云原生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
master1K8S master节点docker 20.10.6containerd 1.6.24192.168.204.180
master2K8S master节点docker 20.10.6containerd 1.6.24192.168.204.181
node1K8S node节点docker 20.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     #先启动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
master1K8S master节点docker 20.10.6containerd 1.6.24192.168.204.180
master2K8S master节点docker 20.10.6containerd 1.6.24192.168.204.181
node1K8S node节点docker 20.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) 查看集群服务状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/272774.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

macos Apple开发证书 应用签名p12证书 获取生成方法 codesign 证书获取

在开发macos应用的时候必须要对自己开发的应用进行签名才能使用, 下面介绍个人如何获取Apple开发签名证书. 必备条件, 你需要先安装 xcode , 注册一个苹果开发者账号 免费的就可以, 以下为获取流程 You need to create a cert through xcode. Additionally, you need to have…

Jmeter之从CSV文件获取数据

新建csv文件 新建一个excel,填充业务数据,然后导出csv格式文件。 添加一个CSV数据文件 使用

苏州科技大学计算机817程序设计(java) 学习笔记

之前备考苏州科技大学计算机(专业课:817程序设计(java))。 学习Java和算法相关内容,现将笔记及资料统一整理归纳移至这里。 部分内容不太完善,欢迎提议。 目录 考情分析 考卷题型 刷题攻略…

Linux中Mysql数据库备份操作

逻辑备份 备份的是建表、建库、插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低。 本质:导出的是SQL语句文件 优点:不论是什么存储引擎,都可以用mysqldump备成SQL语句 缺点:速度较慢,…

人工智能_机器学习078_聚类算法_概念介绍_聚类升维_降维_各类聚类算法_有监督机器学习_无监督机器学习---人工智能工作笔记0118

首先看一下什么是聚类,我们可以进入sklearn的官网去看看 可以看到这里,首先classification 这个分类我们学完了,然后就是regression回归我们也学完了对吧,其实我们现实生活中的,大部分问题就是 这两种问题就可以解决了. 然后我们再来看一个: clustering,这个就是聚类对吧.聚类算…

万界星空科技生产管理MES系统中的工时管理

工时管理的重大意义 1.提高生产效率 通过工时管理,企业可以更加精确地掌握研发人员的工时情况,及时调整项目进度和人力安排,提高生产效率。 2.降低人力成本 通过工时管理,企业可以更加精确地核算研发人员的工时费用&#xff0c…

KEPServerEX 6 之【外篇-1】PTC-ThingWorx服务端软件安装 Tomcat10本地安装

本文目标: 安装 Java 和 Apache Tomcat ,为ThingWorx安装做基础。 ----------------------------------------------------------------------- 安装重点 --------------------------------------------------------------------- 1. 安装 Java 11 / JDK 11 添加系…

Seem环境安装

创建虚拟环境 conda create -n seem python3.8 conda activate seem 安装相关依赖:(不按照的话会报错) sudo apt-get install openmpi-bin libopenmpi-devconda install gcc_linux-64pip install mpi4py 导入环境 export PYTHONPATH$(pwd…

在k8s中使用cert-manager部署gitlab集群

写在前面的话:前面有详细的分享过在k8s集群中部署gitlab,不过当时使用gitlab的访问证书是阿里云上免费的ssl证书,今天特意专门介绍下另外一种基于cert-manager发布自签证书的方式实现部署gitlab到k8s集群中。 往期gitlab部署系列如&#xff1…

文献速递:生成对抗网络医学影像中的应用——3DGAUnet:一种带有基于3D U-Net的生成器的3D生成对抗网络

文献速递:生成对抗网络医学影像中的应用——3DGAUnet:一种带有基于3D U-Net的生成器的3D生成对抗网络 给大家分享文献的主题是生成对抗网络(Generative adversarial networks, GANs)在医学影像中的应用。文献的研究内容包括同模态…

Elasticsearch 查询命令执行时,如何通过词项索引、词项字典、倒排表定位文档逻辑介绍

这里不涉及到源码,只是根据网上的一些文章总结一下,目前不需要细究,只需要知道大概就好,除非你的工作是二次开发ES 一、​Term Index(词项索引)1、FSM(Finite State Machine)有限状态机2、FSA(F…

家政上门服务系统|上门服务系统优化您的生活质量

家政上门服务软件的开发为用户与家政服务供应商之间的互动提供了一个便捷的平台。通过这个软件,用户可以随时随地选择自己所需的服务,比如家庭清洁、保姆、月嫂、老人陪护等。而家政服务供应商则能够接收并响应用户的需求,从而提供一对一的服…

鸿蒙操作系统:从手机到物联网,打造全场景智能体验

随着科技的不断发展,人们对于操作系统的需求也在不断升级。鸿蒙操作系统,作为华为推出的新一代智能终端操作系统,凭借其强大的分布式能力、流畅的用户体验以及丰富的应用生态,正逐渐成为人们关注的焦点。 一、鸿蒙操作系统概述 …

Zookeeper在分布式命名服务中的实践

Java学习面试指南:https://javaxiaobear.cn 命名服务是为系统中的资源提供标识能力。ZooKeeper的命名服务主要是利用ZooKeeper节点的树形分层结构和子节点的顺序维护能力,来为分布式系统中的资源命名。 哪些应用场景需要用到分布式命名服务呢&#xff1…

什么是工厂方法模式,工厂方法模式解决了什么问题?

工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但将实际的实例化过程延迟到子类中。这样,客户端代码在不同的子类中实例化具体对象,而不是直接实例化具体类。工厂方法模式允许一个类的实例化延迟到其子类&…

[Angular] 笔记 9:list/detail 页面以及@Output

1. Output input 好比重力,向下传递数据,list 传给 detail,smart 组件传给 dumb 组件,父组件传给子组件。input 顾名思义,输入数据给组件。 output 与之相反,好比火箭,向上传递数据或事件。ou…

5.微服务代码模型

1.微服务代码模型 代码分层 在微服务代码模型里,我们分别定义了用户接口层、并分别为它们建立了interfaces、application、domain和infrastructure四个一级代码目录; interfaces(用户接口层): 它主要存放用户接口层与前端应用交互、数据转换和交互相关…

一起玩儿物联网人工智能小车(ESP32)——16. 用ESP32的GPIO控制智能小车运动起来(MicroPython)

摘要:本文介绍用MicroPython实现ESP32的GPIO控制智能小车朝各个方向运动 前边的Mixly开发之后,对应生成的代码是C语言的。可能很多人都觉得C语言很难学,现在学Python的人很多,觉得学起来更容易一些。其实,语言本身的难…

探索前端开发趋势:2023年的新兴技术与发展方向

随着科技的不断发展,前端开发领域也在不断演进。本文将详细介绍2023年前端开发的新兴技术和发展趋势,为开发者们指明前端技术的发展方向和面临的挑战。从WebAssembly、PWA到低代码开发,激动人心的全新前景等你探索。 随着科技的快速发展&…

计算机图形图像技术复习资料

一、考试题型 1、简述题(10分4题,共40分) 2、计算题(共10分) 3、编程题(共30分) 4、问答题(共20分) 二、复习提纲 1、简答题 (1)第1章的基本…
最新文章