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

相关推荐
大熊程序猿2 小时前
K8s证书过期
云原生·容器·kubernetes
摸鱼也很难5 小时前
Docker 镜像加速和配置的分享 && 云服务器搭建beef-xss
运维·docker·容器
鸠摩智首席音效师8 小时前
Docker 中如何限制CPU和内存的使用 ?
docker·容器
Michaelwubo8 小时前
Docker dockerfile镜像编码 centos7
运维·docker·容器
好像是个likun8 小时前
使用docker拉取镜像很慢或者总是超时的问题
运维·docker·容器
暴富的Tdy11 小时前
【快速上手Docker 简单配置方法】
docker·容器·eureka
魏 无羡11 小时前
linux CentOS系统上卸载docker
linux·kubernetes·centos
Karoku06611 小时前
【k8s集群应用】kubeadm1.20高可用部署(3master)
运维·docker·云原生·容器·kubernetes
豆豆豆豆变12 小时前
docker之compose篇
docker·容器·自动化运维
凌虚13 小时前
Kubernetes APF(API 优先级和公平调度)简介
后端·程序员·kubernetes