云原生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 版本 目标版本
master1 192.168.204.180 v1.20.15 v1.22.14
master2 192.168.204.181 v1.20.15 v1.22.14
node1 192.168.204.182 v1.20.15 v1.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。

bash 复制代码
kubectl get nodes   # 查看集群版本

NAME      STATUS   ROLES                  AGE   VERSION
master1   Ready    control-plane,master   95d   v1.20.15
master2   Ready    control-plane,master   94d   v1.20.15
node1     Ready    worker                 94d   v1.20.15
bash 复制代码
# 执行如下命令确定升级版本
yum list --showduplicates kubeadm --disableexcludes=kubernetes

我的目标版本是1.21.14-0。

(2)升级Master

①所有 master 节点操作

bash 复制代码
# 升级kubeadm
yum install -y kubeadm-1.21.14-0 --disableexcludes=kubernetes   # --disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库
# 升级完成后验证版本
kubeadm version

② 升级 master1 节点

bash 复制代码
# 验证升级计划。检查当前集群是否可被升级
kubeadm upgrade plan

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

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

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

bash 复制代码
# 将 master1 升级到目标版本
kubeadm upgrade apply v1.21.14

③ 升级 master2节点

master2节点操作

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

bash 复制代码
kubeadm upgrade node

④升级kubectl和kubelet

两台 master 节点操作,操作顺序:master1------>master2

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

bash 复制代码
# 1.将当前节点标记为不可调度,并驱逐节点上的Pod
kubectl drain <节点名称> --ignore-daemonsets --delete-emptydir-data
##说明:
## --ignore-daemonsets 无视DaemonSet管理下的Pod。即--ignore-daemonsets往往需要指定的,这是
#因为deamonset会忽略unschedulable标签(使用kubectl drain时会自动给节点打上不可调度标签),
#由于deamonset控制器控制的pod被删除后可能马上又在此节点上启动起来,这样就会成为死循环。因此
#这里忽略daemonset。

# 2.升级kubelet和kubectl组件
yum install -y kubelet-1.21.14-0 kubectl-1.24.15-0 --disableexcludes=kubernetes
## 说明: --disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库

# 3.重启kubelet
systemctl daemon-reload
systemctl restart kubelet

# 4.恢复当前节点上的Pod调度,使其上线
kubectl uncordon <节点名称>

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

bash 复制代码
[root@master1 ~]# kubectl get nodes
NAME      STATUS   ROLES                  AGE   VERSION
master1   Ready    control-plane,master   95d   v1.21.14
master2   Ready    control-plane,master   94d   v1.21.14
node1     Ready    worker                 94d   v1.20.15

接下来升级worker节点。

(3) 升级 Worker

工作节点上的升级过程应该一次执行一个节点,或者一次执行几个节点,以不影响运行工作负载所需的最小容量。

由于我的集群中只有一个worker节点,所以这里只在一台机器上操作;如果你的集群中有多个worker节点,每个节点都需要操作。

bash 复制代码
# 升级kubeadm
yum install -y kubeadm-1.21.14-0 --disableexcludes=kubernetes
# 查看版本
kubeadm version

# 升级 node 节点
kubeadm upgrade node

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

# 升级kubelet和kubectl组件
yum install -y kubelet-1.21.14-0 kubectl-1.21.14-0 --disableexcludes=kubernetes

# 重启kubelet
systemctl daemon-reload
systemctl restart kubelet

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

4.验证集群(v1.21.14)

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

bash 复制代码
kubectl get nodes

# 结果如下:
[root@master1 ~]# kubectl get nodes

版本均已升级到 v1.21.14。

(2) 查看节点详细信息

bash 复制代码
kubectl get nodes -o wide

5.升级集群(v1.22.14)

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

(1)确定升级版本

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

bash 复制代码
kubectl get nodes   # 查看集群版本

NAME      STATUS   ROLES                  AGE   VERSION
master1   Ready    control-plane,master   94d   v1.21.14
master2   Ready    control-plane,master   94d   v1.21.14
node1     Ready    worker                 94d   v1.21.14
bash 复制代码
# 执行如下命令确定升级版本
yum list --showduplicates kubeadm --disableexcludes=kubernetes

我的目标版本是1.22.14-0。

(2)升级Master

①所有 master 节点操作

bash 复制代码
# 升级kubeadm
yum install -y kubeadm-1.22.14-0 --disableexcludes=kubernetes   # --disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库
# 升级完成后验证版本
kubeadm version

② 升级 master1 节点

bash 复制代码
# 验证升级计划。检查当前集群是否可被升级
kubeadm upgrade plan

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

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

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

bash 复制代码
# 将 master1 升级到目标版本
kubeadm upgrade apply v1.22.14

③ 升级 master2节点

master2节点操作

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

bash 复制代码
kubeadm upgrade node

④升级kubectl和kubelet

两台 master 节点操作,操作顺序:master1------>master2

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

bash 复制代码
# 1.将当前节点标记为不可调度,并驱逐节点上的Pod
kubectl drain <节点名称> --ignore-daemonsets --delete-emptydir-data
##说明:
## --ignore-daemonsets 无视DaemonSet管理下的Pod。即--ignore-daemonsets往往需要指定的,这是
#因为deamonset会忽略unschedulable标签(使用kubectl drain时会自动给节点打上不可调度标签),
#由于deamonset控制器控制的pod被删除后可能马上又在此节点上启动起来,这样就会成为死循环。因此
#这里忽略daemonset。

# 2.升级kubelet和kubectl组件
yum install -y kubelet-1.22.14-0 kubectl-1.22.14-0 --disableexcludes=kubernetes
## 说明: --disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库

# 3.重启kubelet
systemctl daemon-reload
systemctl restart kubelet

# 4.恢复当前节点上的Pod调度,使其上线
kubectl uncordon <节点名称>

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

bash 复制代码
[root@master1 ~]# kubectl get nodes
NAME      STATUS   ROLES                  AGE   VERSION
master1   Ready    control-plane,master   95d   v1.22.14
master2   Ready    control-plane,master   94d   v1.22.14
node1     Ready    worker                 94d   v1.21.14

接下来升级worker节点。

(3) 升级 Worker

工作节点上的升级过程应该一次执行一个节点,或者一次执行几个节点,以不影响运行工作负载所需的最小容量。

由于我的集群中只有一个worker节点,所以这里只在一台机器上操作;如果你的集群中有多个worker节点,每个节点都需要操作。

bash 复制代码
# 升级kubeadm
yum install -y kubeadm-1.22.14-0 --disableexcludes=kubernetes# 查看版本
kubeadm version

# 升级 node 节点
kubeadm upgrade node

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

# 升级kubelet和kubectl组件
yum install -y kubelet-1.22.14-0 kubectl-1.22.14-0 --disableexcludes=kubernetes

# 重启kubelet
systemctl daemon-reload
systemctl restart kubelet

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

6.验证集群 (v1.22.14)

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

bash 复制代码
kubectl get nodes

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

版本均已升级到 v1.22.14。

(2) 查看节点详细信息

bash 复制代码
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 版本,正好与我们的目标版本一致;只要可允许升级的最高版本高于你的目标版本,就可以升级。

bash 复制代码
注意:kubeadm upgrade命令也会自动对kubeadm在节点上所管理的证书执行续约操作。如果需要略过证书续约操作,可以使用
标志--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 版本,正好与我们的目标版本一致;只要可允许升级的最高版本高于你的目标版本,就可以升级。

bash 复制代码
注意:kubeadm upgrade命令也会自动对kubeadm在节点上所管理的证书执行续约操作。如果需要略过证书续约操作,可以使用
标志--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) 查看节点详细信息

相关推荐
Hernon4 小时前
微服务架构设计 - 可降级设计
微服务·云原生·架构
测试人社区—小叶子10 小时前
测试开发面试高频“灵魂八问”深度解析与应答策略
网络·人工智能·测试工具·云原生·容器·面试·职场和发展
Henry Zhu12311 小时前
VPP中ACL实战配置指南与VPP的API使用初探
运维·服务器·网络·计算机网络·云原生
VermiliEiz12 小时前
使用二进制文件方式部署kubernetes(1)
kubernetes·云计算
云计算小黄同学14 小时前
k8s中的服务通过secret访问数据库的实际案例
数据库·阿里云·kubernetes
炸裂狸花猫15 小时前
开源日志收集体系ELK
elk·elasticsearch·云原生·kubernetes·metricbeat
DeepFlow 零侵扰全栈可观测15 小时前
助力金融信创与云原生转型,DeepFlow 排障智能体和可观测性建设实践
云原生·金融
拾忆,想起16 小时前
Dubbo通信协议全景指南:如何为你的微服务选择最佳通信方案?
微服务·云原生·性能优化·架构·dubbo·safari
网络小白不怕黑16 小时前
Containerd指南:从Docker到K8s的容器运行时
docker·容器·kubernetes