Kubernetes集群版本升级(centos 7系统,K8s1.24版本之前)
搭建k8s集群的方式有很多种,比如二进制,kubeadm,RKE(Rancher)等,k8s集群升级方式也各有千秋,本文主要介绍使用kubeadm方式搭建的k8s集群升级方法。注意事项:升级集群版本建议逐步升级,比如 v1.20.4–>v1.21.4–>v1.22.4–>v1.23.4–>v1.24.4,不能跨大版本升级,否则会报错。例如:1.19.x → 1.20.y——可以(其中y > x)1
K8s集群升级(1.24版本之前)
2024.5.30
搭建k8s集群的方式有很多种,比如二进制,kubeadm,RKE(Rancher)等,k8s集群升级方式也各有千秋,本文主要介绍使用kubeadm方式搭建的k8s集群升级方法。
注意事项:
升级集群版本建议逐步升级,比如 v1.20.4–>v1.21.4–>v1.22.4–>v1.23.4–>v1.24.4,不能跨大版本升级,否则会报错。
例如:
1.19.x → 1.20.y——可以(其中y > x)
1.19.x → 1.21.y——不可以跨段(其中y > x)
1.21.x → 1.21.y——可以(只要其中y > x)
一、升级控制节点
1)查看控制节点K8s版本(所有master节点)
[root@k8s-master01 ~]# yum list --showduplicates kubeadm --disableexcludes=kubernetes
2)升级kubeadm(所有master节点,确定你所要升级的版本)
[root@k8s-master01 ~]# yum install -y kubeadm-1.19.10 kubelet-1.19.10 kubectl-1.19.10 --disableexcludes=kubernetes
3)查看kubeadm版本(所有master节点)
[root@k8s-master01 ~]# kubeadm version
4)查看升级计划(master01节点)
[root@k8s-master01 ~]# kubeadm upgrade plan
注意:kubeadm upgrade 会自动对 kubeadm 在节点上所管理的证书执行续约操作。
如果需要略过证书续约操作,可以使用标志 --certificate-renewal=false。
5)升级master(master01节点)
[root@k8s-master01 ~]# kubeadm upgrade apply v1.19.10 --v=5
#升级过程中输入y
–v=5: 这个选项用于设置日志的详细级别。在 Kubernetes 中,日志级别是一个整数,范围 从 0 到 10,其中 0 表示几乎不输出日志,10 表示输出非常详细的日志。在这个命令中,–v=5 表示设置日志级别为 5。
若有其他master节点需要升级,操作步骤与前四步一样,但需要使用kubeadm upgrade node命令。
[root@k8s-master02 ~]# kubeadm upgrade node(master02节点和master03节点)
6)升级kubectl和kubelet(master01节点)
多台 master 节点操作,操作顺序:master1——>master2——>master3——>master* 等分别在多台master节点上执行如下操作,注意更改节点名称。
驱逐master节点
将当前节点标记为不可调度,并驱逐节点上的Pod(master01节点)
[root@k8s-master01 ~]# kubectl drain k8s-master02 --ignore-daemonsets
[root@k8s-master01 ~]# kubectl drain k8s-master03 --ignore-daemonsets
##说明:–ignore-daemonsets 无视DaemonSet管理下的Pod。即–ignore-daemonsets往往需要指定的,这是因为deamonset会忽略unschedulable标签,
由于deamonset控制器控制的pod被删除后可能马上又在此节点上启动起来,这样就会成为死循环。因此忽略daemonset。
升级kubelet和kubectl组件(所有master节点)
[root@k8s-master01 ~]# yum install -y kubelet-1.19.10 kubectl-1.19.10 --disableexcludes=kubernetes
说明: --disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库
重启kubelet(所有master节点)
[root@k8s-master01 ~]# systemctl daemon-reload
[root@k8s-master01 ~]# systemctl restart kubelet
[root@k8s-master01 ~]# systemctl status kubelet
恢复节点调度,使其上线(master01节点)
[root@k8s-master01 ~]# kubectl uncordon k8s-master02
[root@k8s-master01 ~]# kubectl uncordon k8s-master03
7)查看master节点状态(所有master节点)
[root@k8s-master01 ~]# kubectl get cs
解决controller-manager和scheduler组件状态不健康问题
sed -i 's/- --port=0/#&/' /etc/kubernetes/manifests/kube-scheduler.yaml
sed -i 's/- --port=0/#&/' /etc/kubernetes/manifests/kube-controller-manager.yaml
systemctl restart kubelet
8)查看master节点状态
kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master01 Ready master 70m v1.19.10
k8s-master02 Ready master 60m v1.19.10
k8s-master03 Ready master 60m v1.19.10
k8s-node01 Ready <none> 58m v1.18.20
k8s-node02 Ready <none> 58m v1.18.20
二、升级node01节点
node节点上的升级过程应该一次执行一个节点,或者一次执行几个节点,以不影响运行工作负载所需的最小容量。
1)升级kubeadm(node01节点)
[root@k8s-node01 ~]# yum install -y kubeadm-1.19.10 kubelet-1.19.10 kubectl-1.19.10 --disableexcludes=kubernetes
2)查看kubeadm版本(node01节点)
[root@k8s-node01 ~]# kubeadm version
3)升级node(node01节点)
[root@k8s-node01 ~]# kubeadm upgrade node
4)驱逐node01节点(master01节点)
#将节点标记为不可调度并驱逐所有pod,准备节点的维护
[root@k8s-master01 ~]# kubectl drain k8s-node01 --ignore-daemonsets
5)升级kubelet和kubectl组件(node01节点)
[root@k8s-node01 ~]# yum install -y kubelet-1.19.10 kubectl-1.19.10 --disableexcludes=kubernetes
[root@k8s-node01 ~]# systemctl daemon-reload
[root@k8s-node01 ~]# systemctl restart kubelet
[root@k8s-node01 ~]# systemctl status kubelet
6)恢复node节点调度(master01节点)
[root@k8s-master01 ~]# kubectl uncordon k8s-node01
7)同样的操作步骤升级node02节点
执行上面6步,注意修改节点名称
8)查看所有节点版本(master01节点)
[root@k8s-master01 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master01 Ready master 79m v1.19.10
k8s-master02 Ready master 69m v1.19.10
k8s-master03 Ready master 69m v1.19.10
k8s-node01 Ready <none> 67m v1.19.10
k8s-node02 Ready <none> 67m v1.19.10
故障恢复
1)如果kubeadm upgrade失败且没有回滚,例如由于执行期间意外关闭,可在再次执行kubeadm upgrade。
2)在升级期间,kubeadm将以下备份文件写入/etc/kubernetes/tmp目录下。
kubeadm-backup-etcd-<date>-<time>
kubeadm-backup-manifests-<date>-<time>
更多推荐
所有评论(0)