升级Kubernetes集群 控制平面节点

升级Kubernetes集群 控制平面节点

嚯嚯嚯www 35 2022-08-26

一个正常的k8s集群,由至少一个控制节点与多个工作节点组成,我们的容器pod运行在各个节点之中。
情况就是这个情况,处于某种不可抗的情况下,我们需要将k8s集群中的控制平面节点组件,从v1.23.1版本升级到v1.23.2,更新一个小版本。主要是更新kubeadm、kubelet、kubectl。
需要先将控制节点腾空,设置停止调度并且驱逐节点上的pod;其次按顺序更新kubeadm\kubelet\kubectl。并且控制节点的所有升级,都是在联通外网的条件下进行,避免很多不必要的麻烦。

image

1.将所需要升级的控制节点腾空

// 多个集群情况下,我们需要手动切换到所需要更新的集群中
student@node01:~$ kubectl config use-context k8s-dep

// cordon 停止调度,将node调为SchedulingDisabled。新pod不会被调度到该node,但在该node的旧pod不受影响。

student@node01:~$ kubectl cordon master01
node/master01 cordoned

// drain 驱逐节点。首先,驱逐该node上的pod,并在其他节点重新创建。

student@node01:~$ kubectl drain master01 --ignore-daemonsets
node/master01 already cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/kube-flannel-ds-vmd6h, kube-system/kube-proxy-wgj54
evicting pod kube-system/coredns-6d8c4cb4d-t5n94
evicting pod kube-system/coredns-6d8c4cb4d-p68v8
pod/coredns-6d8c4cb4d-p68v8 evicted
pod/coredns-6d8c4cb4d-t5n94 evicted
node/master01 drained

//接着,将节点调为 SchedulingDisabled。现在检查节点是schedulingdisabled状态

student@node01:~$ kubectl get nodes
NAME       STATUS                     ROLES                  AGE    VERSION
master01   Ready,SchedulingDisabled   control-plane,master   127d  v1.23.1

2.更新控制平面节点中的kubeadm

//检查kubeadm 版本

root@master01:~# apt-cache show kubeadm | grep 1.23.2
Version: 1.23.2-00

//更新kubeadm版本

root@master01:~# apt-get update
root@master01:~# apt-get install kubeadm=1.23.2-00

//检查版本

root@master01:~# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.2", GitCommit:"9d142434e3af351a628bffee3939e64c681afa4d", GitTreeState:"clean", BuildDate:"2022-01-19T17:34:34Z", GoVersion:"go1.17.5", Compiler:"gc", Platform:"linux/amd64"}

//更新节点版本,指定版本号

root@master01:~# kubeadm upgrade apply v1.23.2 --etcd-upgrade=true

当我们执行更新kubeadm upgrade apply 这条命令时,upgrade会检查集群是否可升级;检查API Server是否可访问;集群下的所有节点是否正常;我们指定的更新版本是否有偏差;更新所需要拉的镜像是否可用;更新集群内的证书时间,执行续约。

3.更新控制平面节点中的kubelet与kubectl

//更新kubelet版本

root@master01:~# apt-get install kubelet=1.23.2-00
root@master01:~# kubelet --version
Kubernetes v1.23.2

//更新kubectl版本

root@master01:~# apt-get install kubectl=1.23.2-00
root@master01:~# kubectl version

4.修改恢复节点状态

//退回到node操作节点

root@master01:~# exit
logout
student@master01:~$ exit
logout
Connection to master01 closed.

//将master节点状态改回

student@node01:~$ kubectl uncordon master01
node/master01 uncordoned
student@node01:~$ kubectl get nodes
NAME       STATUS  ROLES                  AGE    VERSION
master01   Ready   control-plane,master   127d   v1.23.2

最后验证效果如图,VERSION显示v1.23.2,小版本升级完成
image-1661524632086