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

目录

一、理论

1.K8S集群升级

2.环境

3.升级策略

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

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

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

[7.升级集群计划(v1.23.14 → v1.24.1)](#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. 环境](#1. 环境)

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

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

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

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

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

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

[8.升级 node1节点版本(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。

bash 复制代码
kubectl get nodes -owide #查看容器运行时

(2)迁移master1

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

(3)关闭并卸载Docker

bash 复制代码
systemctl disable docker  --now     #先启动docker

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

(4)安装并配置containerd

bash 复制代码
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服务

bash 复制代码
systemctl enable containerd  ; systemctl restart containerd  # 重启

systemctl status containerd    # 查看服务状态

(6)配置并启动kubelet

bash 复制代码
vim /etc/sysconfig/kubelet     #设置kubelet启动参数

systemctl restart kubelet      #重启kubelet服务

(7)对master节点进行uncordon

bash 复制代码
kubectl uncordon master1       #解除维护

(8)验证

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

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

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

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

bash 复制代码
kubectl get nodes -owide #查看容器运行时

(2)迁移master2

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

(3)关闭并卸载Docker

bash 复制代码
systemctl disable docker  --now     #先启动docker

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

(4)安装并配置containerd

bash 复制代码
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服务

bash 复制代码
systemctl enable containerd  ; systemctl restart containerd  # 重启

systemctl status containerd    # 查看服务状态

(6)配置并启动kubelet

bash 复制代码
vim /etc/sysconfig/kubelet     #设置kubelet启动参数

systemctl restart kubelet      #重启kubelet服务

(7)对master2节点进行uncordon

bash 复制代码
kubectl uncordon master2      #解除维护

(8)验证

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

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

(1) 迁移node1节点

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

(2)关闭并卸载Docker

bash 复制代码
systemctl disable docker --now     # 关闭

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

(3)安装并配置containerd

bash 复制代码
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服务

bash 复制代码
 systemctl enable containerd  ; systemctl restart containerd   # 重启

(5)配置并启动kubelet

bash 复制代码
vim /etc/sysconfig/kubelet     #设置kubelet启动参数

systemctl restart kubelet       #重启kubelet服务

kubectl get nodes -owide         #查看pod

(6)对node1节点进行uncordon

bash 复制代码
 kubectl uncordon node1   #解除维护

(7)验证

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

(8)查看

bash 复制代码
kubectl get pods -n kube-system      #查看集群

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

(1)查看集群

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

(2)修改master1节点kubelet参数

bash 复制代码
kubectl edit nodes master1   #修改
 
systemctl restart kubelet    #重启

(3)修改master2节点kubelet参数

bash 复制代码
kubectl edit nodes master2   #修改
 
systemctl restart kubelet    #重启

(4)修改node1节点kubelet参数

bash 复制代码
kubectl edit nodes node1   #修改
 
systemctl restart kubelet    #重启

(5)确定升级版本

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

我的目标版本是1.24.1-0。

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

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

bash 复制代码
yum install -y kubeadm-1.24.1-0 --disableexcludes=kubernetes

(2)腾空控制节点master1

bash 复制代码
kubectl drain master1  --delete-emptydir-data  --force --ignore-daemonsets

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

bash 复制代码
kubeadm upgrade apply v1.24.1

(4)升级kubectl和kubelet到1.24.1

bash 复制代码
yum install -y kubelet-1.24.1-0 kubectl-1.24.1-0 --disableexcludes=kubernetes

(5)修改kubelet参数

bash 复制代码
vim /var/lib/kubelet/kubeadm-flags.env

(6)重启kubelet

bash 复制代码
systemctl daemon-reload;  systemctl restart kubelet

(7)解除master1的节点维护

bash 复制代码
 kubectl uncordon master1

(8)查看节点状态

bash 复制代码
kubectl get nodes

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

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

bash 复制代码
yum install -y kubeadm-1.24.1-0 --disableexcludes=kubernetes

(2)腾空控制节点master1

bash 复制代码
kubectl drain master2  --delete-emptydir-data  --force --ignore-daemonsets

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

bash 复制代码
kubeadm upgrade apply v1.24.1

(4)升级kubectl和kubelet到1.24.1

bash 复制代码
yum install -y kubelet-1.24.1-0 kubectl-1.24.1-0 --disableexcludes=kubernetes

(5)修改kubelet参数

bash 复制代码
vim /var/lib/kubelet/kubeadm-flags.env

(6)重启kubelet

bash 复制代码
systemctl daemon-reload;  systemctl restart kubelet

(7)解除master1的节点维护

bash 复制代码
 kubectl uncordon master2

(8)查看节点状态

bash 复制代码
kubectl get nodes

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

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

bash 复制代码
yum install -y kubeadm-1.24.1-0 --disableexcludes=kubernetes

(2)腾空控制节点master1

bash 复制代码
kubectl drain node1  --delete-emptydir-data  --force --ignore-daemonsets

(3)升级node1上的kubelet

bash 复制代码
 kubeadm upgrade node

(4)修改kubelet参数

bash 复制代码
vim /var/lib/kubelet/kubeadm-flags.env

(5)升级kubelet和kubectl

bash 复制代码
yum install -y kubelet-1.24.1-0 kubectl-1.24.1-0 --disableexcludes=kubernetes

(6)重启kubelet

bash 复制代码
systemctl daemon-reload;  systemctl restart kubelet

(7)解除node11的节点维护

bash 复制代码
 kubectl uncordon node1

11.验证集群(v1.24.1)

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

bash 复制代码
kubectl get nodes

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

版本均已升级到 v1.24.1。

(2) 查看集群服务状态

bash 复制代码
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。

(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) 查看集群服务状态

相关推荐
_.Switch23 分钟前
构建现代应用的Python Serverless架构详解
运维·开发语言·python·云原生·架构·serverless·restful
小诸葛的博客26 分钟前
istio中使用serviceentry结合egressgateway实现多版本路由
云原生·istio
jonssonyan1 小时前
稳了,搭建Docker国内源图文教程
运维·docker·容器
福大大架构师每日一题2 小时前
16.2 k8s容器基础资源指标讲解
云原生·容器·kubernetes·prometheus
周湘zx2 小时前
k8s中的微服务
linux·运维·服务器·微服务·云原生·kubernetes
工业甲酰苯胺2 小时前
k8s 中的 Ingress 简介
云原生·容器·kubernetes
周湘zx3 小时前
k8s中的存储
linux·运维·云原生·容器·kubernetes
[听得时光枕水眠]4 小时前
【Docker】Docker上安装MySql8和Redis
运维·docker·容器
Xinan_____6 小时前
Linux——k8s认识
linux·运维·kubernetes
nvd116 小时前
K8S - Access Control 机制介绍
kubernetes