云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)

目录

一、理论

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
master1 K8S master节点 docker 20.10.6 containerd 1.6.24 192.168.204.180
master2 K8S master节点 docker 20.10.6 containerd 1.6.24 192.168.204.181
node1 K8S node节点 docker 20.10.6 containerd 1.6.24 192.168.204.182 

(2)主机 (集群版本)

表2 主机(集群版本)

主机 架构 当前版本 目标版本 IP
master1 K8S master节点 v1.23.14 v1.24.1 192.168.204.180
master2 K8S master节点 v1.23.14 v1.24.1 192.168.204.181
node1 K8S node节点 v1.23.14 v1.24.1 192.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     #先启动docker

yum remove docker-ce docker-ce-cli -y #卸载

(4)安装并配置containerd

yum install  containerd.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并修改

(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     #先启动docker

yum remove docker-ce docker-ce-cli -y #卸载

(4)安装并配置containerd

yum install  containerd.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并修改

(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 install  containerd.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
master1 K8S master节点 docker 20.10.6 containerd 1.6.24 192.168.204.180
master2 K8S master节点 docker 20.10.6 containerd 1.6.24 192.168.204.181
node1 K8S node节点 docker 20.10.6 containerd 1.6.24 192.168.204.182 

(2)主机 (集群版本)

表2 主机(集群版本)

主机 架构 当前版本 目标版本 IP
master1 K8S master节点 v1.23.14 v1.24.14 192.168.204.180
master2 K8S master节点 v1.24.14 v1.24.14 192.168.204.181
node1 K8S node节点 v1.24.14 v1.24.14 192.168.204.182 

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

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

可以看到目前的容器运行时是docker 20.10.6。云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第1张图片

(2)迁移master1云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第2张图片

(3)关闭并卸载Docker

先启动docker,再卸载

(4)安装并配置containerd

① 安装

② 生成配置文件

③  使用vim编辑器打开

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

修改前:

修改后:

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

修改前:

修改后:

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

修改前:

修改后:

(5)重启containerd服务

重启

②查看服务

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第3张图片

(6)配置并启动kubelet

①  设置

②修改

重启kubelet服务

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

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第4张图片

(7)对master1节点进行uncordon

(8)验证(此时master1可以调度)云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第5张图片

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

(1)迁移master2云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第6张图片

(2)关闭并卸载Docker

先启动

卸载

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第7张图片

(4)安装并配置containerd

①  安装

② ⑩配置

生成配置文件

使用vim编辑器打开

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

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

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

(5)重启containerd服务

重启

②  查看服务

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第8张图片

(6)配置并启动kubelet

设置

② 修改


③ 重启

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

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第9张图片

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

(8)验证(此时master2可以调度)云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第10张图片

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

(1) 迁移node1节点​​​​​​​云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第11张图片

(2)关闭并卸载Docker

关闭并卸载

(3)安装并配置containerd

①  安装

② 配置

生成配置文件

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

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

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

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

(4)重启containerd服务

重启

②  查看服务

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第12张图片

(5)配置并启动kubelet

①  设置

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

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第13张图片

(6)对node节点进行uncordon云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第14张图片

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

(8)查看云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第15张图片

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

(1)确定升级版本

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

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

①修改master1节点

修改前:

修改后:

②重启

③修改master2节点

 修改前:

修改后:

④重启

⑤修改node1节点

 修改前:

修改后:

④重启

(3)确定升级计划

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

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第16张图片

我的目标版本是1.24.1-0。

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

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

(2)腾空控制节点master1

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第17张图片

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

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第18张图片

成功

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第19张图片

(4)升级kubectl和kubelet到1.24.1

(5)修改kubelet参数

修改前:

修改后:

(6)重启kubelet

(7)解除master1的节点维护

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

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第20张图片

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

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

(2)腾空控制节点master2

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第21张图片

(3)升级master2节点

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第22张图片

成功:

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第23张图片

(4)升级kubectl和kubelet到1.24.1

(5)修改kubelet参数

修改前:

修改后:

(6)重启kubelet

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

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第24张图片

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

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

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

(3)升级node1上的kubelet

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第25张图片

(4)修改kubelet变量

修改前:

修改后:

(5)升级kubelet和kubectl

(6)解除对node1的保护

9.验证集群(v1.24.1)

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

​​​​​​​​​​​​​​​​​​​​​云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第26张图片

版本均已升级到 v1.24.1。

(2) 查看集群服务状态

云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)_第27张图片

你可能感兴趣的:(云原生Kubernetes,云原生,kubernetes,容器)