目录

一、理论

1.K8S集群升级

2.环境

3.升级策略

4.master1节点迁移容器运行时(docker → containerd)

5.master2节点迁移容器运行时(docker → containerd)

6.node1节点容器运行时迁移(docker → containerd)

7.升级集群计划(v1.23.14 →v1.24.1)

8.升级master1节点版本(v1.24.1)

9.升级master2节点版本(v1.24.1)

10.升级node1节点版本(v1.24.1)

11.验证集群(v1.24.1)

二、实验

1. 环境

2.master1节点迁移容器运行时(docker → containerd)

3.master2节点迁移容器运行时(docker → containerd)

4.node1节点迁移容器运行时(docker → containerd)

5.升级集群计划(v1.23.14 →v1.24.1)

6.升级master1节点版本(v1.24.1)

7.升级 master2节点版本(v1.24.1)

8.升级 node1节点版本(v1.24.1)

9.验证集群(v1.24.1)


一、理论

1.K8S集群升级

(1)概念

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

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

2.环境

(1)主机(容器运行时)

表1 主机(容器运行时)

主机架构当前容器运行时目标容器运行时IP
master1K8S master节点docker 20.10.6containerd 1.6.24192.168.204.180
master2K8S master节点docker20.10.6containerd 1.6.24192.168.204.181
node1K8S node节点docker20.10.6containerd 1.6.24192.168.204.182

(2)主机 (集群版本)

表2 主机(集群版本)

主机架构当前版本目标版本IP
master1K8S master节点v1.23.14v1.24.1192.168.204.180
master2K8S master节点v1.23.14v1.24.1192.168.204.181
node1K8S node节点v1.23.14v1.24.1192.168.204.182

3.升级策略

(1)升级策略1

先迁移容器运行时为containerd:

docker → containerd

(2)升级策略2

然后升级集群版本到v1.24.1:

v1.23.14 → v1.24.1

4.master1节点迁移容器运行时(docker → containerd)

(1)确定迁移容器运行时

可以看到目前的容器运行时是docker 20.10.6。

kubectl get nodes -owide #查看容器运行时

(2)迁移master1

kubectl drain master1--delete-emptydir-data--force --ignore-daemonsets #对k8s控制节点xianchaomaster1进行drain

(3)关闭并卸载Docker

systemctl disable docker--now #先启动dockeryum remove docker-ce docker-ce-cli -y #卸载

(4)安装并配置containerd

yum installcontainerd.io cri-tools-y # 安装crictl config runtime-endpoint unix:///var/run/containerd/containerd.sockcontainerd config default > /etc/containerd/config.toml#生成配置文件vim /etc/containerd/config.toml#使用vim编辑器打开,分别搜素mirrors、sandbox、SystemdCgroup并修改

(5)重启containerd服务

systemctl enable containerd; systemctl restart containerd# 重启systemctl status containerd# 查看服务状态

(6)配置并启动kubelet

vim /etc/sysconfig/kubelet #设置kubelet启动参数systemctl restart kubelet#重启kubelet服务

(7)对master节点进行uncordon

kubectl uncordon master1#解除维护

(8)验证

kubectl get nodes -owide#验证是否把容器运行时由docker迁移到containerd

5.master2节点迁移容器运行时(docker → containerd)

(1)确定迁移容器运行时

可以看到目前的容器运行时是docker 20.10.6。

kubectl get nodes -owide #查看容器运行时

(2)迁移master2

kubectl drain master2--delete-emptydir-data--force --ignore-daemonsets #对k8s控制节点xianchaomaster1进行drain

(3)关闭并卸载Docker

systemctl disable docker--now #先启动dockeryum remove docker-ce docker-ce-cli -y #卸载

(4)安装并配置containerd

yum installcontainerd.io cri-tools-y # 安装crictl config runtime-endpoint unix:///var/run/containerd/containerd.sockcontainerd config default > /etc/containerd/config.toml#生成配置文件vim /etc/containerd/config.toml#使用vim编辑器打开,分别搜素mirrors、sandbox、SystemdCgroup并修改

(5)重启containerd服务

systemctl enable containerd; systemctl restart containerd# 重启systemctl status containerd# 查看服务状态

(6)配置并启动kubelet

vim /etc/sysconfig/kubelet #设置kubelet启动参数systemctl restart kubelet#重启kubelet服务

(7)对master2节点进行uncordon

kubectl uncordon master2 #解除维护

(8)验证

kubectl get nodes -owide#验证是否把容器运行时由docker迁移到containerd

6.node1节点容器运行时迁移(docker → containerd)

(1)迁移node1节点

kubectl drain node1 --delete-emptydir-data--force --ignore-daemonsets #对k8s工作节点xianchaonode1进行drain

(2)关闭并卸载Docker

systemctl disable docker --now # 关闭yum remove docker-ce docker-ce-cli -y# 卸载

(3)安装并配置containerd

yum installcontainerd.io cri-tools-y#安装crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock # 配置containerd config default > /etc/containerd/config.toml #生成配置文件vim /etc/containerd/config.toml #使用vim编辑器打开,分别搜素mirrors、sandbox、SystemdCgroup并修改

(4)重启containerd服务

 systemctl enable containerd; systemctl restart containerd # 重启

(5)配置并启动kubelet

vim /etc/sysconfig/kubelet #设置kubelet启动参数systemctl restart kubelet #重启kubelet服务kubectl get nodes -owide #查看pod

(6)对node1节点进行uncordon

 kubectl uncordon node1 #解除维护

(7)验证

kubectl get nodes -owide #验证是否把容器运行时由docker迁移到containerd

(8)查看

kubectl get pods -n kube-system#查看集群

7.升级集群计划(v1.23.14 →v1.24.1

(1)查看集群

 kubectl get nodes -owide# 查看集群版本

(2)修改master1节点kubelet参数

kubectl edit nodes master1 #修改 systemctl restart kubelet#重启

(3)修改master2节点kubelet参数

kubectl edit nodes master2 #修改 systemctl restart kubelet#重启

(4)修改node1节点kubelet参数

kubectl edit nodes node1 #修改 systemctl restart kubelet#重启

(5)确定升级版本

# 执行如下命令确定升级版本yum list --showduplicates kubeadm --disableexcludes=kubernetes

我的目标版本是1.24.1-0。

8.升级master1节点版本(v1.24.1)

(1)在k8s控制节点master1安装kubeadm1.24.1

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

(2)腾空控制节点master1

kubectl drain master1--delete-emptydir-data--force --ignore-daemonsets

(3)升级控制节点master1各个组件

kubeadm upgrade apply v1.24.1

(4)升级kubectl和kubelet到1.24.1

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

(5)修改kubelet参数

vim /var/lib/kubelet/kubeadm-flags.env

(6)重启kubelet

systemctl daemon-reload;systemctl restart kubelet

(7)解除master1的节点维护

 kubectl uncordon master1

(8)查看节点状态

kubectl get nodes

9.升级master2节点版本(v1.24.1)

(1)在k8s控制节点master1安装kubeadm1.24.1

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

(2)腾空控制节点master1

kubectl drain master2--delete-emptydir-data--force --ignore-daemonsets

(3)升级控制节点master1各个组件

kubeadm upgrade apply v1.24.1

(4)升级kubectl和kubelet到1.24.1

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

(5)修改kubelet参数

vim /var/lib/kubelet/kubeadm-flags.env

(6)重启kubelet

systemctl daemon-reload;systemctl restart kubelet

(7)解除master1的节点维护

 kubectl uncordon master2

(8)查看节点状态

kubectl get nodes

10.升级node1节点版本(v1.24.1)

(1)在k8s工作节点node1安装kubeadm1.24.1

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

(2)腾空控制节点master1

kubectl drain node1--delete-emptydir-data--force --ignore-daemonsets

(3)升级node1上的kubelet

 kubeadm upgrade node

(4)修改kubelet参数

vim /var/lib/kubelet/kubeadm-flags.env

(5)升级kubelet和kubectl

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

(6)重启kubelet

systemctl daemon-reload;systemctl restart kubelet

(7)解除node11的节点维护

 kubectl uncordon node1

11.验证集群(v1.24.1)

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

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

版本均已升级到 v1.24.1。

(2) 查看集群服务状态

kubectl get pods -n kube-system

二、实验

1. 环境

(1)主机(容器运行时)

表1 主机(容器运行时)

主机架构当前容器运行时目标容器运行时IP
master1K8S master节点docker 20.10.6containerd 1.6.24192.168.204.180
master2K8S master节点docker20.10.6containerd 1.6.24192.168.204.181
node1K8S node节点docker20.10.6containerd 1.6.24192.168.204.182

(2)主机 (集群版本)

表2 主机(集群版本)

主机架构当前版本目标版本IP
master1K8S master节点v1.23.14v1.24.14192.168.204.180
master2K8S master节点v1.24.14v1.24.14192.168.204.181
node1K8S node节点v1.24.14v1.24.14192.168.204.182

2.master1节点迁移容器运行时(docker → containerd)

(1)确定迁移容器运行时

可以看到目前的容器运行时是docker 20.10.6。

(2)迁移master1

(3)关闭并卸载Docker

先启动docker,再卸载

(4)安装并配置containerd

① 安装

② 生成配置文件

使用vim编辑器打开

第一步:搜素mirrors,并修改(原来一行变三行)

修改前:

修改后:

第二步:搜索sandbox,并修改。

修改前:

修改后:

第三步:搜索SystemdCgroup,并修改。

修改前:

修改后:

(5)重启containerd服务

重启

②查看服务

(6)配置并启动kubelet

设置

②修改

重启kubelet服务

这时查看pod,master1为SchedulingDisabled,容器运行时还未更新

(7)对master1节点进行uncordon

(8)验证(此时master1可以调度)

3.master2节点迁移容器运行时(docker → containerd)

(1)迁移master2

(2)关闭并卸载Docker

先启动

卸载

(4)安装并配置containerd

安装

② ⑩配置

生成配置文件

使用vim编辑器打开

第一步:搜素mirrors,并修改(原来一行变三行)

⑥第二步:搜索sandbox,并修改。

⑦ ​​​​​​​​​​​​​​​​​​​​​第三步:搜索SystemdCgroup,并修改。

(5)重启containerd服务

重启

② 查看服务

(6)配置并启动kubelet

设置

② 修改


③ 重启

这时查看pod,master2为SchedulingDisabled,容器运行时已更新

​​​​​​​(7)对master2节点进行uncordon

(8)验证(此时master2可以调度)

4.node1节点迁移容器运行时(docker → containerd)

(1)迁移node1节点​​​​​​​

(2)关闭并卸载Docker

关闭并卸载

(3)安装并配置containerd

安装

② 配置

生成配置文件

④ ​​​​​​​使用vim编辑器打开

第一步:搜素mirrors,并修改(原来一行变三行)

⑥​​​​​​​第二步:搜索sandbox,并修改。

第三步:搜索SystemdCgroup,并修改。

(4)重启containerd服务

重启

② 查看服务

(5)配置并启动kubelet

设置

这时查看pod,node1为SchedulingDisabled,容器运行时已更新

(6)对node节点进行uncordon

(7)验证 (此时node1可以调度)

(8)查看

5.升级集群计划v1.23.14 →v1.24.1

(1)确定升级版本

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

(2)修改节点kubelet参数(在runtime由docker迁移到containerd之后做)

①修改master1节点

修改前:

修改后:

②重启

③修改master2节点

修改前:

修改后:

④重启

⑤修改node1节点

修改前:

修改后:

④重启

(3)确定升级计划

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

我的目标版本是1.24.1-0。

6.升级master1节点版本(v1.24.1)

(1)在k8s控制节点master1安装kubeadm1.24.1

(2)腾空控制节点master1

(3)升级控制节点master1各个组件

成功

(4)升级kubectl和kubelet到1.24.1

(5)修改kubelet参数

修改前:

修改后:

(6)重启kubelet

(7)解除master1的节点维护

(8)查看节点状态(master1已升级为v1.24.1)

7.升级 master2节点版本(v1.24.1)

(1)在k8s控制节点master2安装kubeadm1.24.1

(2)腾空控制节点master2

(3)升级master2节点

成功:

(4)升级kubectl和kubelet到1.24.1

(5)修改kubelet参数

修改前:

修改后:

(6)重启kubelet

(7)查看节点状态(master1和master2都已升级为v1.24.1)

8.升级 node1节点版本(v1.24.1)

(1)在node1节点上安装kubeadm 1.24.1

(2)腾空节点node1(驱逐node1的pod)

(3)升级node1上的kubelet

(4)修改kubelet变量

修改前:

修改后:

(5)升级kubelet和kubectl

(6)解除对node1的保护

9.验证集群(v1.24.1)

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

​​​​​​​​​​​​​​​​​​​​​

版本均已升级到 v1.24.1。

(2) 查看集群服务状态