云原生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:/…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
