12、kubeadm软件升级

Kubernetes学习目录

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

 

posted @ 2023-03-16 21:41  小粉优化大师  阅读(248)  评论(0编辑  收藏  举报