云原生Kubernetes:K8S集群版本升级(v1.22.14 - v1.23.14)
目录
一、理论
1.K8S集群升级
2.环境
3.升级集群(v1.23.14)
4.验证集群(v1.23.14)
二、实验
1. 环境
2.升级集群(v1.23.14)
2.验证集群(v1.23.14)
一、理论
1.K8S集群升级
(1)概念
搭建K8S集群的方式有很多种,比如二进制,kubeadm,RKE(Rancher)等,K8S集群升级方式也各有千秋,目前准备使用kubeadm方式搭建的k8s集群升级方法。
需要注意的是,升级集群版本建议逐步升级,比如v1.20.4–>v1.21.4–>v1.22.4–>v1.23.4–>v1.24.4,不能跨度过大,否则会报错。
2.环境
(1)主机
表1 主机
| 主机 | 架构 | 当前版本 | 目标版本 | IP |
|---|---|---|---|---|
| master1 | K8S master节点 | v1.22.14 | v1.23.14 | 192.168.204.180 |
| master2 | K8S master节点 | v1.22.14 | v1.23.14 | 192.168.204.181 |
| node1 | K8S node节点 | v1.22.14 | v1.23.14 | 192.168.204.182 |
3.升级集群(v1.23.14)
升级策略为直接升级到v1.23.14
v1.22.14–>v1.23.14
(1)确定升级版本
可以看到目前的版本是v1.22.14。
kubectl get nodes # 查看集群版本NAME STATUS ROLES AGE VERSION
master1 Ready control-plane,master 95d v1.22.14
master2 Ready control-plane,master 95d v1.22.14
node1 Ready worker 95d v1.22.14
# 执行如下命令确定升级版本
yum list --showduplicates kubeadm --disableexcludes=kubernetes
我的目标版本是1.23.14-0。
(2)升级Master
①所有 master 节点操作
# 升级kubeadm
yum install -y kubeadm-1.23.14-0 --disableexcludes=kubernetes # --disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库# 升级完成后验证版本
kubeadm version
② 升级 master1 节点
# 验证升级计划。检查当前集群是否可被升级
kubeadm upgrade plan
最高可以升级到 v1.21.14版本,正好与我们的目标版本一致;只要可允许升级的最高版本高于你的目标版本,就可以升级。
注意:kubeadm upgrade命令也会自动对kubeadm在节点上所管理的证书执行续约操作。如果需要略过证书续约操作,可以使用
标志--certificate-renewal=false。
确定集群升级目标版本,并且查看升级计划符合条件后,就可以在 master1 节点上执行升级集群的命令了
# 将 master1 升级到目标版本
kubeadm upgrade apply v1.23.14
③ 升级 master2节点
master2节点操作
升级master2节点与 master1 节点相同,但是使用下面的命令,而不是kubeadm upgrade apply命令。
kubeadm upgrade node
④升级kubectl和kubelet
两台 master 节点操作,操作顺序:master1——>master2
分别在两台master节点上执行如下操作,注意更改<节点名称>。
# 1.将当前节点标记为不可调度,并驱逐节点上的Pod
kubectl drain <节点名称> --ignore-daemonsets --delete-emptydir-data
##说明:
## --ignore-daemonsets 无视DaemonSet管理下的Pod。即--ignore-daemonsets往往需要指定的,这是
#因为deamonset会忽略unschedulable标签(使用kubectl drain时会自动给节点打上不可调度标签),
#由于deamonset控制器控制的pod被删除后可能马上又在此节点上启动起来,这样就会成为死循环。因此
#这里忽略daemonset。# 2.升级kubelet和kubectl组件
yum install -y kubelet-1.23.14-0 kubectl-1.23.14-0 --disableexcludes=kubernetes ## 说明: --disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库# 3.重启kubelet
systemctl daemon-reload
systemctl restart kubelet# 4.恢复当前节点上的Pod调度,使其上线
kubectl uncordon <节点名称>
此时查看节点版本,发现两台master节点已经升级完毕。
[root@master1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master1 Ready control-plane,master 95d v1.23.14
master2 Ready control-plane,master 95d v1.23.14
node1 Ready worker 95d v1.22.14
接下来升级node节点。
(3) 升级 node
工作节点上的升级过程应该一次执行一个节点,或者一次执行几个节点,以不影响运行工作负载所需的最小容量。
由于我的集群中只有一个worker节点,所以这里只在一台机器上操作;如果你的集群中有多个node节点,每个节点都需要操作。
# 升级kubeadm
yum install -y kubeadm-1.23.14-0 --disableexcludes=kubernetes
# 查看版本
kubeadm version# 升级 node 节点
kubeadm upgrade node# 设置节点不可调度并排空节点。只有1个worker节点时忽略此步,因为可能会报错
kubectl drain node1 --ignore-daemonsets# 升级kubelet和kubectl组件
yum install -y kubelet-1.23.14-0 kubectl-1.23.14-0 --disableexcludes=kubernetes# 重启kubelet
systemctl daemon-reload
systemctl restart kubelet# 恢复当前节点上的Pod调度。只有1个worker节点时忽略此步
kubectl uncordon node1 # node1 为worker节点名称
4.验证集群(v1.23.14)
(1)验证集群状态是否正常
kubectl get nodes# 结果如下:
[root@master1 ~]# kubectl get nodes
版本均已升级到 v1.23.14。
(2) 查看节点详细信息
kubectl get nodes -o wide
二、实验
1. 环境
(1)主机
表1 主机
| 主机 | 架构 | 当前版本 | 目标版本 | IP |
|---|---|---|---|---|
| master1 | K8S master节点 | v1.22.14 | v1.23.14 | 192.168.204.180 |
| master2 | K8S master节点 | v1.22.14 | v1.23.14 | 192.168.204.181 |
| node1 | K8S node节点 | v1.22.14 | v1.23.14 | 192.168.204.182 |
2.升级集群(v1.23.14)
(1)确定升级版本
可以看到目前的版本是v1.22.14。
执行如下命令确定升级版本

我的目标版本是1.23.14-0。
(2)升级Master
①所有 master 节点操作
升级kubeadm
升级完成后验证版本
② 升级 master1 节点
验证升级计划。检查当前集群是否可被升级

最高可以升级到 v1.23.17 版本,包含目标版本;只要可允许升级的最高版本高于你的目标版本,就可以升级。
注意:kubeadm upgrade命令也会自动对kubeadm在节点上所管理的证书执行续约操作。如果需要略过证书续约操作,可以使用
标志--certificate-renewal=false。
确定集群升级目标版本,并且查看升级计划符合条件后,就可以在 master1 节点上执行升级集群的命令了

成功

③ 升级 master2节点
master2节点操作
升级master2节点与 master1 节点相同,但是使用下面的命令kubeadm upgrade node
,而不是kubeadm upgrade apply命令。
升级kubeadm

升级完成后验证版本

升级master2节点

成功:

④升级kubectl和kubelet
两台 master 节点操作,操作顺序:master1——>master2
分别在两台master节点上执行如下操作,注意更改<节点名称>。
1)master1节点
将当前节点标记为不可调度,并驱逐节点上的Pod

升级kubelet和kubectl组件

重启kubelet

恢复当前节点上的Pod调度,使其上线

查看节点版本,发现一台master节点已经升级完毕。
2)master2节点
将当前节点标记为不可调度,并驱逐节点上的Pod

升级kubelet和kubectl组件
重启kubelet

恢复当前节点上的Pod调度,使其上线

此时查看节点版本,发现两台master节点已经升级完毕。
接下来升级node节点。
(3) 升级 node
工作节点上的升级过程应该一次执行一个节点,或者一次执行几个节点,以不影响运行工作负载所需的最小容量。
由于我的集群中只有一个worker节点,所以这里只在一台机器上操作;如果你的集群中有多个worker节点,每个节点都需要操作。
① 升级kubeadm
② 查看版本

③升级 node 1节点

④ 设置节点不可调度并排空节点。只有1个worker节点时忽略此步,因为可能会报错

⑤升级kubelet和kubectl组件

⑥ 重启kubelet

⑦恢复当前节点上的Pod调度。只有1个node节点时忽略此步

2.验证集群(v1.23.14)
(1)验证集群状态是否正常
版本均已升级到 v1.23.14。
(2) 查看节点详细信息

相关文章:
云原生Kubernetes:K8S集群版本升级(v1.22.14 - v1.23.14)
目录 一、理论 1.K8S集群升级 2.环境 3.升级集群(v1.23.14) 4.验证集群(v1.23.14) 二、实验 1. 环境 2.升级集群(v1.23.14) 2.验证集群(v1.23.14) 一、理论 1.K8S集群升级 …...
C++面向对象(OOP)编程-位运算详解
本文主要介绍原码、位运算的种类,以及常用的位运算的使用场景。 目录 1 原码、反码、补码 2 有符号和无符号数 3 位运算 4 位运算符使用规则 4.1 逻辑移位和算术移位 4.1.1 逻辑左移和算法左移 4.1.2 逻辑右移和算术右移 4.1.3 总结 4.2 位运算的应用场景 …...
linux运行服务提示报错/usr/bin/java: 没有那个文件或目录
如果是直接从官网下载的jdk解压安装,那么/usr/bin/没有java的软连接,即/usr/bin/java,所以即使在/etc/profile中配置了jdk的环境变量也没用,识别不到。 方法一:用java的执行路径配置/usr/bin/java软连接(优…...
一篇文章教会你数据仓库之详解拉链表怎么做
前言 本文将会谈一谈在数据仓库中拉链表相关的内容,包括它的原理、设计、以及在我们大数据场景下的实现方式。 全文由下面几个部分组成: 先分享一下拉链表的用途、什么是拉链表。通过一些小的使用场景来对拉链表做近一步的阐释,以及拉链表和…...
C/S医院检验LIS系统源码
一、检验科LIS系统概述: LIS系统即实验室信息管理系统。LIS系统能实现临床检验信息化,检验科信息管理自动化。其主要功能是将检验科的实验仪器传出的检验数据经数据分析后,自动生成打印报告,通过网络存储在数据库中ÿ…...
项目应用多级缓存示例
前不久做的一个项目,需要在前端实时展示硬件设备的数据。设备很多,并且每个设备的数据也很多,总之就是数据很多。同时,设备的刷新频率很快,需要每2秒读取一遍数据。 问题来了,我们如何读取数据,…...
音视频技术开发周刊 | 325
每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 AI读心术震撼登顶会!模型翻译脑电波,人类思想被投屏|NeurIPS 2023 在最近举办的NeurIPS大会上,研究人员展示了当代AI更震撼…...
量化服务器 - 后台挂载运行
服务器 - 后台运行 pip3命令被kill 在正常的pip命令后面加上 -no-cache-dir tmux 使用教程 https://codeleading.com/article/40954761108/ 如果你希望在 tmux 中后台执行一个 Python 脚本,你可以按照以下步骤操作: 启动 tmux: tmux这将会创建一个新…...
使用tesla gpu 加速大模型,ffmpeg,unity 和 UE等二三维应用
我们知道tesla gpu 没有显示器接口,那么在windows中怎么使用加速unity ue这种三维编辑器呢,答案就是改变注册表来加速相应的三维渲染程序. 1 tesla gpu p40 p100 加速 在windows中使用regedit 来改变 核显配置, 让p100 p40 等等显卡通过核显…...
巅峰画师Midjourney:新时代的独角兽
介绍 AI绘画领域中,Midjourney处于绝对地位,并且一年时间就登顶。 Midjourney是一家独立的AI研究实验室,探索新的思维媒介,拓展人类的想象力。 它由一个小型的自筹资金团队组成,专注于设计、人类基础设施和AI。 在AI绘画领域,Midjourney取得了非常突出…...
入行 4 年,跳槽 2 次,我摸透了软件测试这一行!
最近几年行业在如火如荼的发展壮大,以及其他传统公司都需要大批量的软件测试人员,但是最近几年的疫情导致大规模裁员,让人觉得行业寒冬已来,软件测试人员的职业规划值得我们深度思考。 大家都比较看好软件测试行业,只是…...
Hive01_安装部署
Hive的安装 上传安装包 解压 tar zxvf apache-hive-3.1.2-bin.tar.gz mv apache-hive-3.1.2-bin hive解决Hive与Hadoop之间guava版本差异 cd /export/software/hive/ rm -rf lib/guava-19.0.jarcp cp /export/software/hadoop/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0…...
解决国内大模型痛点的最佳实践方案
1.前言 自AI热潮掀起以来,国内互联网大厂躬身入局,各类机构奋起追赶,创业型企业纷至沓来。业内戏称,一场大模型的“百模大战”已经扩展到“千模大战”。 根据近期中国科学技术信息研究所发布的《中国人工智能大模型地图研究报告…...
当文字成为雨滴:HTML、CSS、JS创作炫酷的“文字雨“动画!
简介 在本篇技术文章中,将介绍如何使用HTML、CSS和JavaScript创建一个独特而引人注目的"文字(字母&数字)"雨🌧️动画效果。通过该动画,展现出的是一系列随机字符将从云朵中下落像是将文字变成雨滴从天而降,营造出与…...
计算机网络简述
前言 计算机网路是一个很庞大的话题。在此我仅对其基础概述以及简单应用进行陈述。后续或有补充以形成完善的计算机网络知识体系。 一.计算机网络的定义 根据百度词条的描述,计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过…...
Go 泛型之类型参数
Go 泛型之类型参数 文章目录 Go 泛型之类型参数一、Go 的泛型与其他主流编程语言的泛型差异二、返回切片中值最大的元素三、类型参数(type parameters)四、泛型函数3.1 泛型函数的结构3.2 调用泛型函数3.3 泛型函数实例化(instantiation&…...
KafkaLog4jAppender
Apache Log4j 中有一个 Appender 概念,它负责将日志信息输出到各种目的地,例如控制台、文件、数据库等。KafkaLog4jAppender 是 Log4j 的一个扩展,它可以将日志信息发送到 Apache Kafka。 下面是如何在 Log4j 中使用 KafkaLog4jAppender 的一…...
IntelliJ IDEA插件
插件安装目录:C:\Users\<username>\AppData\Roaming\JetBrains\IntelliJIdea2021.2\plugins aiXcoder Code Completer:代码补全 Bookmark-X:书签分类 使用方法:鼠标移动到某一行,按ALT SHIFT D...
鸿蒙开发中的坑(持续更新……)
最近在使用鸿蒙开发时,碰到了一些坑,特做记录,如:鸿蒙的preview不能预览,轮播图组件Swiper使用时的问题,console.log() 打印的内容 一、鸿蒙的preview不能预览 首先,只有 ets文件才能预览。 其…...
单体项目-动态上下文问题
在HTML中使用Thymeleaf解决动态上下文问题,你可以使用Thymeleaf的模板语法来生成动态的链接(例如CSS和JavaScript文件的链接)以适应不同的应用程序上下文。以下是一个示例: <!DOCTYPE html> <html xmlns:th"http:/…...
Go语言中的包管理
Go语言中的包管理 1. 包管理的基本概念 包管理是Go语言开发中的重要部分,它负责管理项目的依赖关系。Go语言的包管理经历了几个阶段: GOPATH模式vendor模式Go Modules模式(当前推荐) 2. Go Modules简介 Go Modules是Go 1.11引入的…...
智能音乐情绪生成器:当AI遇见音乐,用代码谱写情感旋律
引言:音乐与情感的数字化探索音乐是人类情感最直接的表达方式之一,欢快的旋律让人振奋,悲伤的曲调令人沉思。在人工智能时代,我们能否让机器理解情感,并创作出符合特定情绪的音乐?本文将带你走进一个融合了…...
新手零基础入门:借助快马AI生成带注释的微信小程序示例代码
作为一个刚接触微信小程序开发的新手,我最近在InsCode(快马)平台上尝试了一个特别适合零基础学习的实践项目。这个平台最让我惊喜的是,只需要用自然语言描述需求,就能快速生成带详细注释的完整代码,这对理解小程序开发流程帮助很大…...
STM32F407实战:用CubeMX+FreeRTOS+SDIO+FatFs,5分钟搞定SD卡文件读写
STM32F407实战:5分钟极速实现SD卡文件系统全流程 拿到一块STM32F407开发板时,如何快速验证SD卡文件读写功能?这套组合方案或许能帮你省下大量调试时间——CubeMX生成基础框架、FreeRTOS管理任务调度、SDIO硬件接口驱动配合FatFs文件系统&…...
Allegro 17.4表贴焊盘设计实战:用Pad Designer快速创建符合IPC标准的SMD焊盘
Allegro 17.4表贴焊盘设计实战:从零构建符合IPC标准的SMD封装 在高速PCB设计领域,表贴器件(SMD)的焊盘设计质量直接影响焊接良率和信号完整性。Cadence Allegro 17.4的Pad Designer工具提供了专业级的焊盘设计解决方案,但许多工程师在实际操作…...
ESP8266 EEPROM实战:手把手教你存WiFi密码,断电重启也不怕
ESP8266 EEPROM实战:构建可靠的WiFi凭证存储系统 每次重启ESP8266设备都要重新输入WiFi密码?这种重复劳动早就该被技术淘汰了。想象一下,你的智能家居设备在断电恢复后能自动重新连接网络,工业传感器在意外重启后依然保持通信——…...
JNI内存泄漏吞噬GPU显存,Java AI服务OOM频发,一线工程师紧急封堵的4类隐蔽陷阱
第一章:Java AI 推理调试Java 在 AI 推理场景中常通过 ONNX Runtime、Deep Java Library(DJL)或 TensorFlow Java API 集成模型。调试过程需聚焦于输入张量形状匹配、数据类型一致性、设备绑定状态及推理结果可信度验证。启用详细日志输出 DJ…...
颠覆式项目管理工具GanttProject:让团队协作效率提升300%的开源解决方案
颠覆式项目管理工具GanttProject:让团队协作效率提升300%的开源解决方案 【免费下载链接】ganttproject Official GanttProject repository 项目地址: https://gitcode.com/gh_mirrors/ga/ganttproject GanttProject是一款完全免费的开源甘特图工具ÿ…...
保姆级教程:用sw_urdf_exporter插件将Solidworks机械臂模型转为ROS可用的URDF
从Solidworks到ROS:机械臂URDF转换全流程实战指南 机械臂作为工业自动化和服务机器人的核心部件,其运动仿真在ROS生态中占据重要地位。许多工程师习惯使用Solidworks进行机械结构设计,却苦于如何将设计成果无缝迁移到ROS环境。本文将彻底解决…...
从仿真到上板:手把手教你用Vivado搭建一个“永不停机”的FFT信号处理链路(附Testbench)
从仿真到上板:构建高可靠FFT信号处理系统的全流程实战 在数字信号处理领域,快速傅里叶变换(FFT)作为频谱分析的核心算法,其硬件实现一直是FPGA工程师的必备技能。本文将带您从仿真环境搭建开始,逐步完成一…...
