• 云原生Kubernetes:K8S集群版本升级(v1.20.15 - v1.22.14)


    目录

    一、理论

    1.K8S集群升级

    2.集群概况

    3.升级集群(v1.21.14)

    4.验证集群(v1.21.14)

    5.升级集群(v1.22.14)

    6.验证集群  (v1.22.14)

    二、实验

     1.升级集群(v1.21.14)

    2.验证集群(v1.21.14)

     3.升级集群(v1.22.14)

    4.验证集群(v1.22.14)


    一、理论

    1.K8S集群升级

    (1)概念

    搭建K8S集群的方式有很多种,比如二进制,kubeadm,RKE(Rancher)等,K8S集群升级方式也各有千秋,目前准备使用kubeadm方式搭建的k8s集群升级方法。

    需要注意的是,升级集群版本建议逐步升级,比如 v1.20.1–>v1.21.1–>v1.22.1–>v1.23.1–>v1.24.1,不能跨度过大,否则会报错。

    2.集群概况

    表1 集群概况

    节点名称IP版本目标版本
    master1192.168.204.180v1.20.15v1.22.14
    master2192.168.204.181v1.20.15v1.22.14
    node1192.168.204.182 v1.20.15v1.22.14

    3.升级集群(v1.21.14)

    升级策略为先升级到v1.21.14,再升级到v1.22.14

    v1.20.15–>v1.21.14–>v1.22.14

    (1)确定升级版本

    可以看到目前的版本是v1.20.15。

    1. kubectl get nodes # 查看集群版本
    2. NAME STATUS ROLES AGE VERSION
    3. master1 Ready control-plane,master 95d v1.20.15
    4. master2 Ready control-plane,master 94d v1.20.15
    5. node1 Ready worker 94d v1.20.15
    1. # 执行如下命令确定升级版本
    2. yum list --showduplicates kubeadm --disableexcludes=kubernetes

    我的目标版本是1.21.14-0。

    (2)升级Master

    ①所有 master 节点操作

    1. # 升级kubeadm
    2. yum install -y kubeadm-1.21.14-0 --disableexcludes=kubernetes # --disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库
    3. # 升级完成后验证版本
    4. kubeadm version

    ② 升级 master1 节点

    1. # 验证升级计划。检查当前集群是否可被升级
    2. kubeadm upgrade plan

    最高可以升级到 v1.21.14版本,正好与我们的目标版本一致;只要可允许升级的最高版本高于你的目标版本,就可以升级。

    1. 注意:kubeadm upgrade命令也会自动对kubeadm在节点上所管理的证书执行续约操作。如果需要略过证书续约操作,可以使用
    2. 标志--certificate-renewal=false

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

    1. # 将 master1 升级到目标版本
    2. kubeadm upgrade apply v1.21.14

    ③ 升级 master2节点

    master2节点操作

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

    kubeadm upgrade node
    

    ④升级kubectl和kubelet

    两台 master 节点操作,操作顺序:master1——>master2
    分别在两台master节点上执行如下操作,注意更改<节点名称>。

    1. # 1.将当前节点标记为不可调度,并驱逐节点上的Pod
    2. kubectl drain <节点名称> --ignore-daemonsets --delete-emptydir-data
    3. ##说明:
    4. ## --ignore-daemonsets 无视DaemonSet管理下的Pod。即--ignore-daemonsets往往需要指定的,这是
    5. #因为deamonset会忽略unschedulable标签(使用kubectl drain时会自动给节点打上不可调度标签),
    6. #由于deamonset控制器控制的pod被删除后可能马上又在此节点上启动起来,这样就会成为死循环。因此
    7. #这里忽略daemonset。
    8. # 2.升级kubelet和kubectl组件
    9. yum install -y kubelet-1.21.14-0 kubectl-1.24.15-0 --disableexcludes=kubernetes
    10. ## 说明: --disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库
    11. # 3.重启kubelet
    12. systemctl daemon-reload
    13. systemctl restart kubelet
    14. # 4.恢复当前节点上的Pod调度,使其上线
    15. kubectl uncordon <节点名称>

    此时查看节点版本,发现两台master节点已经升级完毕。

    1. [root@master1 ~]# kubectl get nodes
    2. NAME STATUS ROLES AGE VERSION
    3. master1 Ready control-plane,master 95d v1.21.14
    4. master2 Ready control-plane,master 94d v1.21.14
    5. node1 Ready worker 94d v1.20.15

    接下来升级worker节点。

    (3) 升级 Worker

    工作节点上的升级过程应该一次执行一个节点,或者一次执行几个节点,以不影响运行工作负载所需的最小容量。
    由于我的集群中只有一个worker节点,所以这里只在一台机器上操作;如果你的集群中有多个worker节点,每个节点都需要操作。

    1. # 升级kubeadm
    2. yum install -y kubeadm-1.21.14-0 --disableexcludes=kubernetes
    3. # 查看版本
    4. kubeadm version
    5. # 升级 node 节点
    6. kubeadm upgrade node
    7. # 设置节点不可调度并排空节点。只有1个worker节点时忽略此步,因为可能会报错
    8. kubectl drain node1 --ignore-daemonsets
    9. # 升级kubelet和kubectl组件
    10. yum install -y kubelet-1.21.14-0 kubectl-1.21.14-0 --disableexcludes=kubernetes
    11. # 重启kubelet
    12. systemctl daemon-reload
    13. systemctl restart kubelet
    14. # 恢复当前节点上的Pod调度。只有1个worker节点时忽略此步
    15. kubectl uncordon node1 # node1 为worker节点名称

    4.验证集群(v1.21.14)

    (1)验证集群状态是否正常

    1. kubectl get nodes
    2. # 结果如下:
    3. [root@master1 ~]# kubectl get nodes

    版本均已升级到 v1.21.14。

    (2) 查看节点详细信息

    kubectl get nodes -o wide

    5.升级集群(v1.22.14)

    升级策略为v1.21.14–>v1.22.14

    (1)确定升级版本

    可以看到目前的版本是v1.21.14。

    1. kubectl get nodes # 查看集群版本
    2. NAME STATUS ROLES AGE VERSION
    3. master1 Ready control-plane,master 94d v1.21.14
    4. master2 Ready control-plane,master 94d v1.21.14
    5. node1 Ready worker 94d v1.21.14
    1. # 执行如下命令确定升级版本
    2. yum list --showduplicates kubeadm --disableexcludes=kubernetes

    我的目标版本是1.22.14-0。

    (2)升级Master

    ①所有 master 节点操作

    1. # 升级kubeadm
    2. yum install -y kubeadm-1.22.14-0 --disableexcludes=kubernetes # --disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库
    3. # 升级完成后验证版本
    4. kubeadm version

    ② 升级 master1 节点

    1. # 验证升级计划。检查当前集群是否可被升级
    2. kubeadm upgrade plan

    最高可以升级到 v1.20.15 版本,正好与我们的目标版本一致;只要可允许升级的最高版本高于你的目标版本,就可以升级。

    1. 注意:kubeadm upgrade命令也会自动对kubeadm在节点上所管理的证书执行续约操作。如果需要略过证书续约操作,可以使用
    2. 标志--certificate-renewal=false

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

    1. # 将 master1 升级到目标版本
    2. kubeadm upgrade apply v1.22.14

    ③ 升级 master2节点

    master2节点操作

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

    kubeadm upgrade node
    

    ④升级kubectl和kubelet

    两台 master 节点操作,操作顺序:master1——>master2
    分别在两台master节点上执行如下操作,注意更改<节点名称>。

    1. # 1.将当前节点标记为不可调度,并驱逐节点上的Pod
    2. kubectl drain <节点名称> --ignore-daemonsets --delete-emptydir-data
    3. ##说明:
    4. ## --ignore-daemonsets 无视DaemonSet管理下的Pod。即--ignore-daemonsets往往需要指定的,这是
    5. #因为deamonset会忽略unschedulable标签(使用kubectl drain时会自动给节点打上不可调度标签),
    6. #由于deamonset控制器控制的pod被删除后可能马上又在此节点上启动起来,这样就会成为死循环。因此
    7. #这里忽略daemonset。
    8. # 2.升级kubelet和kubectl组件
    9. yum install -y kubelet-1.22.14-0 kubectl-1.22.14-0 --disableexcludes=kubernetes
    10. ## 说明: --disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库
    11. # 3.重启kubelet
    12. systemctl daemon-reload
    13. systemctl restart kubelet
    14. # 4.恢复当前节点上的Pod调度,使其上线
    15. kubectl uncordon <节点名称>

    此时查看节点版本,发现两台master节点已经升级完毕。

    1. [root@master1 ~]# kubectl get nodes
    2. NAME STATUS ROLES AGE VERSION
    3. master1 Ready control-plane,master 95d v1.22.14
    4. master2 Ready control-plane,master 94d v1.22.14
    5. node1 Ready worker 94d v1.21.14

    接下来升级worker节点。

    (3) 升级 Worker

    工作节点上的升级过程应该一次执行一个节点,或者一次执行几个节点,以不影响运行工作负载所需的最小容量。
    由于我的集群中只有一个worker节点,所以这里只在一台机器上操作;如果你的集群中有多个worker节点,每个节点都需要操作。

    1. # 升级kubeadm
    2. yum install -y kubeadm-1.22.14-0 --disableexcludes=kubernetes# 查看版本
    3. kubeadm version
    4. # 升级 node 节点
    5. kubeadm upgrade node
    6. # 设置节点不可调度并排空节点。只有1个worker节点时忽略此步,因为可能会报错
    7. kubectl drain node1 --ignore-daemonsets
    8. # 升级kubelet和kubectl组件
    9. yum install -y kubelet-1.22.14-0 kubectl-1.22.14-0 --disableexcludes=kubernetes
    10. # 重启kubelet
    11. systemctl daemon-reload
    12. systemctl restart kubelet
    13. # 恢复当前节点上的Pod调度。只有1个worker节点时忽略此步
    14. kubectl uncordon node1 # node1 为worker节点名称

    6.验证集群  (v1.22.14)

    (1)验证集群状态是否正常

    1. kubectl get nodes
    2. # 结果如下:
    3. [root@master1 ~]# kubectl get nodes
    4. NAME STATUS ROLES AGE VERSION
    5. master1 Ready control-plane,master 95d v1.22.14
    6. master2 Ready control-plane,master 94d v1.22.14
    7. node1 Ready worker 94d v1.22.14

    版本均已升级到 v1.22.14。

    (2) 查看节点详细信息

    kubectl get nodes -o wide

    二、实验

     1.升级集群(v1.21.14)

    (1)确定升级版本

    可以看到目前的版本是v1.20.15。

    执行如下命令确定升级版本

    我的目标版本是1.21.14-0。

    (2)升级Master

    ①所有 master 节点操作

     升级kubeadm

     升级完成后验证版本

    ② 升级 master1 节点

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

    最高可以升级到 v1.21.14 版本,正好与我们的目标版本一致;只要可允许升级的最高版本高于你的目标版本,就可以升级。

    1. 注意:kubeadm upgrade命令也会自动对kubeadm在节点上所管理的证书执行续约操作。如果需要略过证书续约操作,可以使用
    2. 标志--certificate-renewal=false

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

    成功

    ③ 升级 master2节点

    master2节点操作

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

    升级kubeadm

    升级完成后验证版本

    升级master2节点

    成功:

    ④升级kubectl和kubelet

    两台 master 节点操作,操作顺序:master1——>master2
    分别在两台master节点上执行如下操作,注意更改<节点名称>。

    1)master1节点

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

    升级kubelet和kubectl组件

    重启kubelet

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

    查看节点版本,发现一台master节点已经升级完毕。

    2)master2节点

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

    升级kubelet和kubectl组件

    重启kubelet

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

    此时查看节点版本,发现两台master节点已经升级完毕。

    接下来升级worker节点。

    (3) 升级 Worker

    工作节点上的升级过程应该一次执行一个节点,或者一次执行几个节点,以不影响运行工作负载所需的最小容量。
    由于我的集群中只有一个worker节点,所以这里只在一台机器上操作;如果你的集群中有多个worker节点,每个节点都需要操作。

    升级kubeadm​​​​​​​

    查看版本

    升级 node 节点

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

    升级kubelet和kubectl组件

    重启kubelet

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

    2.验证集群(v1.21.14)

    (1)验证集群状态是否正常​​​​​​​

    版本均已升级到 v1.21.14。

    (2) 查看节点详细信息

     3.升级集群(v1.22.14)

    升级策略为v1.21.14–>v1.22.14

    (1)确定升级版本

    可以看到目前的版本是v1.21.14。​​​​​​​

    执行如下命令确定升级版本

    我的目标版本是1.22.14-0。

    (2)升级Master

    ①所有 master 节点操作

     升级kubeadm​​​​​​​

     升级完成后验证版本

    ② 升级 master1 节点

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

    最高可以升级到 v1.22.14 版本,正好与我们的目标版本一致;只要可允许升级的最高版本高于你的目标版本,就可以升级。

    1. 注意:kubeadm upgrade命令也会自动对kubeadm在节点上所管理的证书执行续约操作。如果需要略过证书续约操作,可以使用
    2. 标志--certificate-renewal=false

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

    成功

    ③ 升级 master2节点

    master2节点操作

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

    升级kubeadm

    升级完成后验证版本

    升级master2节点

    成功:

    ④升级kubectl和kubelet

    两台 master 节点操作,操作顺序:master1——>master2
    分别在两台master节点上执行如下操作,注意更改<节点名称>。

    1)master1节点

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

    升级kubelet和kubectl组件

    重启kubelet

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

    查看节点版本,发现一台master节点已经升级完毕。

    2)master2节点

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

    升级kubelet和kubectl组件​​​​​​​

    重启kubelet

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

    此时查看节点版本,发现两台master节点已经升级完毕。​​​​​​​

    接下来升级worker节点。

    (3) 升级 Worker

    工作节点上的升级过程应该一次执行一个节点,或者一次执行几个节点,以不影响运行工作负载所需的最小容量。
    由于我的集群中只有一个worker节点,所以这里只在一台机器上操作;如果你的集群中有多个worker节点,每个节点都需要操作。

    升级kubeadm​​​​​​​​​​​​​​​​​​​​​

    查看版本

    升级 node 节点

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

    升级kubelet和kubectl组件

    重启kubelet

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

    4.验证集群(v1.22.14)

    (1)验证集群状态是否正常​​​​​​​​​​​​​​​​​​​​​

    版本均已升级到 v1.22.14。

    (2) 查看节点详细信息

  • 相关阅读:
    仅用30秒,Python就能学会的漂亮短代码,你学会了吗?
    List,Set,Map集合总结
    【bat批处理】bat脚本编写:循环,间隔,定时自动获取TCP连接并写入本地文件
    10款远程办公软件,助你事半功倍,晋升快如闪电
    自定义步骤条setup
    Linux多线程(线程互斥与线程锁)
    vue 监听屏幕的宽度
    Nginx部署Vue前端项目
    C++ 字面量
    文字轮播与图片轮播?CSS 不在话下
  • 原文地址:https://blog.csdn.net/cronaldo91/article/details/133794149