kubeadm 部署的集群升级教程

发布时间 2023-08-16 13:03:50作者: MhaiM

1、确定升级的集群版本,查看现有的集群版本

kubectl  get nodes

2、执行如下命令确定升级的版本,目标版本是v1.27.4

yum list --showduplicates kubeadm --disableexcludes=kubernetes

3、升级master节点,所有master节点都要操作,并升级完验证版本

yum install -y kubeadm-1.27.4-0 --disableexcludes=kubernetes  # --disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓

kubeadm version

4、升级master1(master节点1操作即可)

#验证升级计划,检查当前集群是否可以被升级

kubeadm upgrade plan

最高可以升级到 v1.27.4 版本,正好与我们的目标版本一致;只要可允许升级的最高版本高于你的目标版本,就可以升级,注:kubeadm upgrade命令也会自动对kubeadm在节点上所管理的证书执行续约操作。如果需要略过证书续约操作,可以使用标志--certificate-renewal=false

#确定集群升级目标版本,并且查看升级计划符合条件后,就可以在 master1 节点上执行升级集群的命令了

5、 将master1升级到目标版本

kubeadm upgrade apply v1.27.4

6、升级master2&& master3

注:升级master2 & master3 节点与 master1 节点相同,但是使用下面的命令,而不是kubeadm upgrade apply命令

kubeadm upgrade node

7、升级kubectl和kubelet

三台 master 节点操作,操作顺序:master1——>master2——>master3

7.1、将当前节点标记为不可调度,并驱逐节点上的Pod

kubectl drain master-1 --ignore-daemonsets

##说明:
## --ignore-daemonsets 无视DaemonSet管理下的Pod。即--ignore-daemonsets往往需要指定的,这是
#因为deamonset会忽略unschedulable标签(使用kubectl drain时会自动给节点打上不可调度标签),
#由于deamonset控制器控制的pod被删除后可能马上又在此节点上启动起来,这样就会成为死循环。因此
#这里忽略daemonset

# 升级kubelet和kubectl组件

 yum install -y kubelet-1.27.4-0 kubectl-1.27.4-0 --disableexcludes=kubernetes

7.2、重启kubelet

systemctl daemon-reload
systemctl restart kubelet

7.3、恢复当前节点上的Pod调度,使其上线

kubectl uncordon nodes/master-1

#查看节点版本,发现master节点已经升级完成

8、 升级work 节点(其他work节点也执行如下相同步骤)

说明:

工作节点上的升级过程应该一次执行一个节点,或者一次执行几个节点,以不影响运行工作负载所需的最小容量,如果你的集群中有多个worker节点,每个节点都需要操作

#升级kubeadm

yum install -y kubeadm-1.27.4-0 --disableexcludes=kubernetes

#查看版本

kubeadm version

#升级work节点

kubeadm upgrade node

# 设置节点不可调度并排空节点。只有1个worker节点时忽略此步,因为可能会报错

kubectl drain node1 --ignore-daemonsets

# 升级kubelet和kubectl组件

 yum install -y kubelet-1.27.4-0 kubectl-1.27.4-0 --disableexcludes=kubernetes

# 重启kubelet
systemctl daemon-reload
systemctl restart kubelet

# 恢复当前节点上的Pod调度。只有1个worker节点时忽略此步
kubectl uncordon node1 

9、 验证集群是否正常

kubectl  get node