12、kubeadm软件升级
1、背景相关
1.1、kubeadm升级需求
kubeadm 是 kubernetes 提供的一个初始化集群的工具,使用起来非常方便,但是因为 版本的更新 和
证书的有效期 等原因,我们可能在某个阶段会对当前的软件版本进行调整,可能是版本升级,也可能是版本
回退。但是这些场景的操作方法基本上是一样的。
1.2、注意事项
在k8s环境进行变动的时候,需要根据场景的不同采取不同的措施:
对于一般的 开发环境、测试环境、预发布环境等非生产环境之外的其他环境的更新,没有什么限制。
对于生产环境,k8s环境在更新的时候,需要
1、在一个 对业务影响非常小的时段,进行软件版本的更新
2、如果是集群场景
- 不要一下子对所有节点进行更新
- 更新前,首先要将更新的节点从 高可用集群中屏蔽
- 更新完毕后,再将更新后的节点加入到 高可用集群中
- 循环上面的两步,直到所有节点都更新完毕。
2、kubeadm更新命令
# 查询历史版本
yum --showduplicates search kubeadm
2.1、Master节点更新
2.1.1、yum更新
yum install kubelet-x.xx.x kubeadm-x.xx.x kubectl-x.xx.x yum install kubelet-x.xx.x kubeadm-x.xx.x kubectl-x.xx.x -y
2.1.2、查看更新条件
kubeadm upgrade plan
2.1.3、更新kubeadm软件
kubeadm upgrade apply 版本号
2.2、Node节点更新
2.2.1、升级node节点
kubeadm upgrade node
注意:
老版本需要有 "--kubelet-version 版本号" 参数,但是对于最新版的k8s来说,不需要任何参数
2、Master升级实践
2.1、Master节点更新
2.2.1、高可用配置暂停待更新节点的服务功能
# 两台keepalived的nginx都注释掉要更新节点
[root@ ~]# vi /usr/local/nginx-1.20.0/conf/conf.d/apiserver.conf
stream {
upstream kube-apiserver {
#server 192.168.10.26:6443 max_fails=3 fail_timeout=30s;
server 192.168.10.27:6443 max_fails=3 fail_timeout=30s;
server 192.168.10.28:6443 max_fails=3 fail_timeout=30s;
}
# 配置好,记得重启一下nginx服务
systemctl restart nginx
2.2.2、kubeadm更新命令的操作
# 升级软件
yum install kubeadm-1.26.0 kubelet-1.26.0 kubectl-1.26.0 -y
# 检查有哪些版本更新
kubeadm upgrade plan
# 更新指定的版本v1.26.0
kubeadm upgrade apply v1.26.0
2.2.3、更新完成后,需要重启一下kubelet
systemctl daemon-reload
systemctl restart kubelet
kubectl get node
NAME STATUS ROLES AGE VERSION[这里的版本指的是kubelet]
master1 Ready control-plane 39m v1.26.0
master2 Ready control-plane 36m v1.25.7
master3 Ready control-plane 36m v1.25.7
2.2、Master节点回滚
2.2.1、将kubeadm、kubectl、kubelet安装包删除
yum remove kubeadm kubectl kubelet -y
2.2.2、安装降级指定的版本
yum install kubeadm-1.25.7 kubectl-1.25.7 kubelet-1.25.7 -y
2.2.3、重启kubelet和containerd服务
systemctl restart kubelet
systemctl restart containerd
3、Node升级实践
3.1、node节点更新
3.1.1、查看现状
[root@master1 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-76d6c9b8c-j69gx 1/1 Running 0 16s 10.244.3.2 node1 <none> <none>
3.1.2、将node1节点上的所有资源清理出去
# 1、标记节点为不可调度
kubectl cordon node1
[root@master1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master1 Ready control-plane 62m v1.25.7
master2 Ready control-plane 59m v1.25.7
master3 Ready control-plane 59m v1.25.7
node1 Ready,SchedulingDisabled <none> 8m44s v1.25.7
node2 Ready <none> 8m23s v1.25.7
# 2、node1驱逐当前节点上的资源
kubectl drain node1 --delete-emptydir-data --ignore-daemonsets --force
# 驱逐后,调试到node2节点上,可以更新node1节点
[root@master1 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-76d6c9b8c-bg9mw 1/1 Running 0 10s 10.244.4.2 node2 <none> <none>
3.1.3、kubeadm更新命令的操作
# 升级软件
yum install kubeadm-1.26.0 kubelet-1.26.0 kubectl-1.26.0 -y
# 更新配置
kubeadm upgrade node
# 重启kubelet
systemctl daemon-reload
systemctl restart kubelet
3.1.4、查看升级的效果
[root@master1 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master1 Ready control-plane 76m v1.25.7
master2 Ready control-plane 74m v1.25.7
master3 Ready control-plane 73m v1.25.7
node1 Ready,SchedulingDisabled <none> 23m v1.26.0
node2 Ready <none> 22m v1.25.7
3.1.5、恢复node1可以正常调度
[root@master1 ~]# kubectl uncordon node1
node/node1 uncordoned
[root@master1 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master1 Ready control-plane 79m v1.25.7
master2 Ready control-plane 77m v1.25.7
master3 Ready control-plane 76m v1.25.7
node1 Ready <none> 26m v1.26.0
node2 Ready <none> 25m v1.25.7
3.2、node节点回滚
3.2.1、将node1节点上的所有资源清理出去
kubectl cordon node1
kubectl drain node1 --delete-emptydir-data --ignore-daemonsets --force
kubectl get node
3.2.3、kubeadm回滚命令的操作
# 删除软件
yum remove kubeadm kubelet kubectl -y
# 安装指定的版本软件
yum install kubeadm-1.25.7 kubelet-1.25.7 kubectl-1.25.7 -y
# 更新配置
kubeadm upgrade node
# 重启kubelet
systemctl daemon-reload
systemctl restart kubelet
3.2.4、恢复node1可以正常调度
[root@master1 ~]# kubectl uncordon node1
node/node1 uncordoned
[root@master1 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master1 Ready control-plane 86m v1.25.7
master2 Ready control-plane 84m v1.25.7
master3 Ready control-plane 84m v1.25.7
node1 Ready <none> 33m v1.25.7
node2 Ready <none> 33m v1.25.7