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

news2025/2/2 13:02:18

目录

一、理论

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.coloradmin.cn/o/1337916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云OpenSearch-LLM智能问答故障的一天

上周五使用阿里云开放搜索问答版时,故障了一整天,可能这个服务使用的人比较少,没有什么消息爆出来,特此记录下这几天的阿里云处理过程,不免让人怀疑阿里云整体都外包出去了,反应迟钝,水平业余&a…

sheng的学习笔记-【中】【吴恩达课后测验】Course 4 -卷积神经网络 - 第三周测验

课程4_第3周_测验题 目录 第一题 1.现在你要构建一个能够识别三个对象并定位位置的算法,这些对象分别是:行人(c1),汽车(c2),摩托车(c3)。下图中的标签哪个…

Chrome插件精选 — 前端工具

Chrome实现同一功能的插件往往有多款产品,逐一去安装试用耗时又费力,在此为某一类型插件挑选出比较好用的一款或几款,尽量满足界面精致、功能齐全、设置选项丰富的使用要求,便于节省一个个去尝试的时间和精力。 1. FeHelper(前端助…

ARCGIS PRO SDK 要素空间关系

一、要素与要素查询,返回的是bool值 1、 Touches 判断几何要素是否接触 Touches 如果 geometry1 与 geometry2 接触,则返回 true,否则 false。 touches GeometryEngine.Instance.Touches(Geometry1, Geometry2) 2、…

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

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

LabVIEW进行激光斑点图像处理与分析

LabVIEW进行激光斑点图像处理与分析 近年来,激光技术的应用日益繁荣。激光光斑的质量评估和分析技术决定了应用效果,对机器视觉、武器装备、光学测量和医疗设备产生深远影响。就具体用途和技术而言,激光光斑的采集和处理至关重要。即插即用的…

【三维目标检测】【自动驾驶】IA-BEV:基于结构先验和自增强学习的实例感知三维目标检测(AAAI 2024)

系列文章目录 论文:Instance-aware Multi-Camera 3D Object Detection with Structural Priors Mining and Self-Boosting Learning 地址:https://arxiv.org/pdf/2312.08004.pdf 来源:复旦大学 英特尔Shanghai Key Lab /美团 文章目录 系列文…

Linux:查询当前进程或线程的资源使用情况

目录 一、/proc/[PID]/下的各个文件1、proc简介2、/proc/[PID]/详解 二、通过Linux API获取当前进程或线程的资源使用情况1、getrusage2、sysinfo3、times 在工作中,我们排除app出现的一些性能/资源问题时,通常要先知道当前app的资源使用情况&#xff0c…

一种改进的平衡生成对抗网络用于视网膜血管分割

A Refined Equilibrium Generative Adversarial Network for Retinal Vessel Segmentation 一种改进的平衡生成对抗网络用于视网膜血管分割背景贡献实验方法Symmetric equilibrium architecture(对称均衡架构)Multi-scale features refine block&#xf…

40G多模光模块QSFP-40G-SR4优势及应用领域介绍

QSFP-40G-SR4光模块是一种常用的光纤传输解决方案。传输速率40G,SR代表短距离多模光纤(Short Range Multimode Fiber),4表示有四个光纤通道。这种光模块采用MPO/MTP多模光纤连接器来实现高速传输,传输距离可以达到300米…

如何将语音版大模型AI接入自己的项目里(语音ChatGPT)

如何将语音版大模型AI接入自己的项目里语音ChatGPT 一、语音版大模型AI二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例5、智能生成API代码 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、语音版大模型AI 基于阿里通义千问、百…

WPF 消息日志打印帮助类:HandyControl+NLog+彩色控制台打印

文章目录 前言相关文章Nlog配置HandyControl配置简单使用显示效果文本内容 前言 我将简单的HandyControl的消息打印系统和Nlog搭配使用,简化我们的代码书写 相关文章 .NET 控制台NLog 使用 WPF-UI HandyControl 控件简单实战 C#更改控制台文字输出颜色 Nlog配置 …

Python中的用户交互函数详解,提升用户体验!

更多Python学习内容:ipengtao.com 大家好,我是彭涛,今天为大家分享 Python中的用户交互函数详解,提升用户体验!全文4200字,阅读大约12分钟 用户进行交互的Python应用程序,有许多常用的用户交互函…

linux开放tomcat 8080端口

1、查看8080是否开放 firewall-cmd --query-port8080/tcp查看已开启的端口 firewall-cmd --list-ports开启防火墙 systemctl start firewalld2、永久开放8080端口 firewall-cmd --zonepublic --add-port8080/tcp --permanent3、重加载(重启防火墙) …

设计模式-依赖注入模式

设计模式专栏 模式介绍模式特点应用场景依赖注入和控制反转的区别代码示例Java实现依赖注入模式Python实现依赖注入模式 依赖注入模式在spring中的应用 模式介绍 依赖注入(Dependency Injection,简称DI)是一种面向对象编程中的设计模式&…

基于SSM的教育管理系统

基于SSM的教育管理系统 一、系统介绍二、功能展示1.项目内容2.项目骨架3.管理员登录4.系统界面5.注册6.系统管理7.课程管理8.添加科目9.学员信息 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目名称:基于ssm的教育管理系统 当前版本:V1.0.0版本…

android——自定义TextView

效果展示&#xff1a; 代码解析&#xff1a; 1、首先设置自定义属性&#xff08;res/values下新建一个attrs.xml文件&#xff09; <?xml version"1.0" encoding"utf-8"?> <resources><!-- name 自定义view的名字 CustomTextView--&…

flask文件夹列表改进版--Bug追踪

把当前文件夹下的所有文件夹和文件列出来&#xff0c;允许点击返回上层目录&#xff0c;允许点击文件夹进入下级目录并显示此文件夹内容 允许点击文件进行下载 from flask import Flask, render_template, send_file, request, redirect, url_for import osapp Flask(__name_…

51单片机(STC8)-- 串口配置及串口重定向(printf)

文章目录 STC8串口概述串口寄存器配置串口1控制寄存器SCON串口1数据寄存器SBUF串口1模式 1工作方式串口1波特率计算方式 串口注意事项串口1通信demo串口重定向 STC8串口概述 由下图可知STC8H3K64S4带有4个4个串行通信接口&#xff0c;芯片名后两位S所带的数字即代表这款芯片带…

Systemctl | 系统服务管理利器

功能介绍 systemctl 是用于管理系统服务的命令行工具&#xff0c;常用于 Linux 系统中。提供了对系统服务&#xff08;包括启动、停止、重启、启用、禁用等&#xff09;的控制&#xff0c;以及对系统单元&#xff08;units&#xff09;的操作。 语法结构 systemctl 的基本语…