一文了解Kubernetes集群管理
发布时间:2022-08-27 12:53:59 所属栏目:云计算 来源:互联网
导读:Kubernetes作为容器的编排平台,它是以集群的形式为业务提供服务。所以在日常的工作中,作为Kubernetes平台的维护者,会经常对集群进行管理。 这里,我将集群管理分为以下几种: 图片 安装集群 前置说明 Kubernetes的集群安装分为:kubeadm安装和二进制安装
Kubernetes作为容器的编排平台,它是以集群的形式为业务提供服务。所以在日常的工作中,作为Kubernetes平台的维护者,会经常对集群进行管理。 这里,我将集群管理分为以下几种: 图片 安装集群 前置说明 Kubernetes的集群安装分为:kubeadm安装和二进制安装。在这里,只会介绍kubeadm的安装。 安装说明: 集群节点:2个 IP信息: master:192.168.205.128 node:192.168.205.128 Kubernetes版本:v1.24.2 运行时:containerd 系统:centos 7.9 系统内核:3.10.0-1160 环境准备 这是安装的不是生产级别的集群,只是为了演示使用。 (1)在每个节点添加host信息。 复制 $ cat >> /etc/hosts << EOF 192.168.205.128 kk-master 192.168.205.130 kk-node01 EOF 1. 2. 3. 4. (2)关闭防火墙和SELinux。 复制 $ systemctl stop firewalld $ systemctl disable firewalld $ setenforce 0 $ cat /etc/selinux/config SELINUX=disabled 1. 2. 3. 4. 5. (3)优化内核参数。 复制 $ cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 vm.swappiness=0 EOF 1. 2. 3. 4. 5. 6. 执行以下命令使其生效: 复制 $ modprobe br_netfilter $ sysctl -p /etc/sysctl.d/k8s.conf 1. 2. (4)关闭swap空间。 复制 $ swapoff -a 1. 注释/etc/fstab文件中swap挂载。 复制 $ cat /etc/fstab # # /etc/fstab # Created by anaconda on Tue Apr 12 17:10:16 2022 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=bc73c871-006c-4e24-a7af-6beb9aac06a7 /boot xfs defaults 0 0 # /dev/mapper/centos-swap swap swap defaults 0 0 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. (5)安装ipvs软件包。 复制 $ cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF $ chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4 $ yum install ipset ipvsadm -y 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. (6)同步服务器时间。 复制 $ yum install chrony -y $ systemctl enable chronyd $ systemctl start chronyd $ chronyc sources 1. 2. 3. 4. (7)安装containerd。 复制 $ yum install -y yum-utils device-mapper-persistent-data lvm2 $ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo $ yum list | grep containerd $ yum install containerd -y 1. 2. 3. 4. 5. 6. 7. 8. 创建containerd配置文件。 复制 $ mkdir -p /etc/containerd # containerd config default > /etc/containerd/config.toml # 替换配置文件 $ sed -i "s#k8s.gcr.io#registry.cn-hangzhou.aliyuncs.com/google_containers#g" /etc/containerd/config.toml $ sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml $ sed -i "s#https://registry-1.docker.io#https://registry.cn-hangzhou.aliyuncs.com#g" /etc/containerd/config.toml 1. 2. 3. 4. 5. 6. 启动containerd。 复制 $ systemctl daemon-reload $ systemctl enable containerd $ systemctl restart containerd 1. 2. 3. (8)安装Kubernetes组件。 复制 $ cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 安装指定版本的组件。 复制 $ yum install -y kubelet-1.24.2 kubeadm-1.24.2 kubectl-1.24.2 1. 设置运行时。 复制 $ crictl config runtime-endpoint /run/containerd/containerd.sock 1. 设置kubelet为自启动。 复制 $ systemctl daemon-reload $ systemctl enable kubelet && systemctl start kubelet 1. 2. 初始化集群 上面把基础环境准备好了,现在开始真正的进行集群初始化。 初始化master节点 然后接下来在 master 节点配置 kubeadm 初始化文件,可以通过如下命令导出默认的初始化配置: 复制 $ kubeadm config print init-defaults > kubeadm.yaml 1. 然后根据我们自己的需求修改配置,比如修改 imageRepository 的值,kube-proxy 的模式为 ipvs,需要注意的是由于我们使用的containerd作为运行时,所以在初始化节点的时候需要指定cgroupDriver为systemd【1】。 复制 apiVersion: kubeadm.k8s.io/v1beta3 bootstrapTokens: - groups: - system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: - signing - authentication kind: InitConfiguration localAPIEndpoint: advertiseAddress: 192.168.205.128 bindPort: 6443 nodeRegistration: criSocket: unix:///var/run/containerd/containerd.sock imagePullPolicy: IfNotPresent name: master taints: null --- apiServer: timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta3 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {} dns: {} etcd: local: dataDir: /var/lib/etcd imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers kind: ClusterConfiguration kubernetesVersion: 1.24.2 networking: dnsDomain: cluster.local serviceSubnet: 10.96.0.0/12 scheduler: {} --- apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: ipvs --- apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 然后使用上面的配置文件进行初始化: 复制 $ kubeadm init --config=kubeadm.yaml ...... Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.205.128:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:51b5e566d3f95aaf3170916d67958bc16cb1b44934885a857b07ee58f041334a 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 如上输出表示master节点初始化成功。 初始化node节点 在初始化node节点的时候,必须把kubernetes需要的组件安装上。确保安装完成后,使用初始化master节点成功后输出的命令加入节点即可。 复制 $ kubeadm join 192.168.205.128:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:51b5e566d3f95aaf3170916d67958bc16cb1b44934885a857b07ee58f041334a 1. 2. 然后可以在master节点使用kubectl get node查看节点是否加入。 复制 $ kubectl get no NAME STATUS ROLES AGE VERSION kk-node01 NotReady <none> 15s v1.24.2 master NotReady control-plane 3m29s v1.24.2 1. 2. 3. 4. 初始化网络 通过上面kubectl get node查看节点信息的时候发现节点的STATUS是NotReady,这是因为现在整个集群还没有相应的网络插件,导致整个集群并不能正常的运行,下面我们就来安装对应的网络插件。 网络插件的选择有很多种,比如flannel,calico等。 (1)下载calico的yaml清单。 复制 $ wget https://raw.githubusercontent.com/projectcalico/calico/master/manifests/calico.yaml 1. (2)安装calico。 复制 $ kubectl apply -f calico.yaml 1. (3)在集群中查看安装结果。 复制 $ kubectl get po -n kube-system | grep calico calico-kube-controllers-5d49fc6c56-szm6v 1/1 Running 0 3m21s calico-node-66q62 1/1 Running 0 3m21s calico-node-lwrcm 1/1 Running 0 3m21s 1. 2. 3. 4. 现在可以看到kubernetes所有节点的状态变成Ready了。 复制 $ kubectl get no NAME STATUS ROLES AGE VERSION kk-node01 Ready <none> 26m v1.24.2 master Ready control-plane 29m v1.24.2 1. 2. 3. 4. 安装Dashboard 上面集群安装完成后,基本都需要使用命令行进行操作,如果为了提升集群的可视化,可以安装一些Dashboard。 目前市面上的Dashboard有很多,比如kubesphere、kuboard、kubernetes dashboard等。这里安装的是kubernetes dashboard,其他可视化产品可以自己去了解并使用。 (1)使用如下命令进行安装。 复制 $ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml 1. (2)查看安装情况。 复制 $ kubectl get po -n kubernetes-dashboard NAME READY STATUS RESTARTS AGE dashboard-metrics-scraper-7bfdf779ff-f9zwn 1/1 Running 0 41s kubernetes-dashboard-6cdd697d84-lvzvz 1/1 Running 0 41s (编辑:我爱制作网_潮州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |