K8s集群平滑升级(Smooth Upgrade of K8S Cluster)

简介:

Kubernetes ‌ (简称K8s)是一个开源的容器编排和管理平台,由Google开发并维护。它最初是为了解决谷歌内部大规模容器管理的问题而设计的,后来在2014年开源,成为云原生技术的核心组成部分。‌‌1

K8s的主要功能和特点包括:

  • 自动化部署和大规模伸缩‌:K8s支持自动化的应用部署和扩展,能够根据需求动态调整应用实例的数量,从而实现负载均衡和高可用性。
  • 应用容器化管理‌:K8s提供了容器生命周期管理、健康检查、日志记录等功能,确保应用的稳定运行和高效维护。
  • 多租户和隔离‌:K8s支持多租户环境,每个租户可以在独立的命名空间中运行应用,确保资源隔离和安全。
  • 自我修复‌:K8s具有自我修复的能力,能够检测并修复应用故障,确保服务的连续性。

K8s在多个行业中得到了广泛应用,特别是在金融行业,许多银行的内部结算系统都部署在K8s平台上。随着云原生技术的不断发展,K8s也在不断进化,以满足更复杂的工作负载管理需求。

升级前版本:1.28.2

升级后版本:1.29.10

升级概要

  • 升级集群版本建议逐步升级,k8s版本以 x.y.z 表示,其中 x 是主要版本, y 是次要版本,z 是补丁版本,尽量不能跳过次要版本升级,比如1.28.0->1.30.0可能遭遇失败,补丁版本可以跳跃更新,比如1.28.2->1.28.10

  • 尽量将kubelet和kubeadm版本保持一致,可以偏差一个版本

  • 升级后,因为容器spec的哈希值已更改,所有容器都会被重新启动

kubernetes官方升级参考:升级工作的基本流程如下:

  • 升级控制节点(master)

  • 升级其他控制平面节点(高可用集群) 

  • 升级工作节点(worker)

更改软件包仓库(所有节点)

现在新版本都使用单独的软件仓库,需要修改里面的版本值,如你需要1.29版本,就需要将版本改为v1.29。

cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/rpm/repodata/repomd.xml.key
EOF

将软件仓库配置分发到node节点

scp /etc/yum.repos.d/kubernetes.repo root@10.0.0.101:/etc/yum.repos.d
scp /etc/yum.repos.d/kubernetes.repo root@10.0.0.102:/etc/yum.repos.d

升级前备份

# 备份目录
cp -a /etc/kubernetes/  /etc/kubernetes.bakcp -a /var/lib/etcd   /var/lib/etcd.bak# 备份etcd数据
ETCDCTL_API=3 etcdctl snapshot save /data/etcd/etcd_bak.db \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key # 如果没有etcdctl工具需要安装一下
yum install -y etcd

控制平台节点(master)升级

1 升级kubeadm

yum install -y kubeadm-'1.29.10-*' --disableexcludes=kubernetes

说明:--disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库

2 验证下载操作正常,并且 kubeadm 版本正确

可见版本已经升级到1.29.10

3、验证升级计划:

kubeadm upgrade plan

此命令检查你的集群是否可被升级,并取回你要升级的目标版本。命令也会显示一个包含组件配置版本状态的表格。

4 选择要升级到的目标版本

kubeadm upgrade apply v1.29.10

5 腾空节点

将节点标记为不可调度并驱逐所有负载,准备节点的维护:

# 将 <node-to-drain> 替换为你要腾空的控制面节点名称
kubectl drain <node-to-drain> --ignore-daemonsetskubectl drain k8s-master --ignore-daemonsets

说明:--ignore-daemonsets 忽略DaemonSet管理下的Pod

6 升级 kubelet 和 kubectl

(1)升级 kubelet 和 kubectl:

yum install -y kubelet-'1.29.10-*' kubectl-'1.29.10-*' --disableexcludes=kubernetes

(2)重启 kubelet:

sudo systemctl daemon-reload
sudo systemctl restart kubelet

7 解除节点的保护

# 将 <node-to-uncordon> 替换为你的节点名称
kubectl uncordon <node-to-uncordon>kubectl uncordon k8s-master

此时master节点已经升上去了。

升级工作节点

工作节点上的升级过程应该一次执行一个节点,以不影响运行工作负载所需的最小容量。

我的集群有两个工作节点,先升级节点1,再升级2,步骤是一样的

1 升级 kubeadm

# 将 1.29.x-* 中的 x 替换为最新的补丁版本
sudo yum install -y kubeadm-'1.29.x-*' --disableexcludes=kubernetesyum install -y kubeadm-'1.29.10-*' --disableexcludes=kubernetes

2 执行 "kubeadm upgrade"

对于工作节点,下面的命令会升级本地的 kubelet 配置:

kubeadm upgrade node

3 腾空节点(master上执行)

将节点标记为不可调度并驱逐所有负载,准备节点的维护:

# 将 <node-to-drain> 替换为你正腾空的节点的名称节点1:
kubectl drain k8s-node1 --ignore-daemonsets节点2:
kubectl drain k8s-node2 --ignore-daemonsets

4 升级 kubelet 和 kubectl

(1)升级 kubelet 和 kubectl

尽量跟kubeadm版本保持一致

yum install -y kubelet-'1.29.10-*' kubectl-'1.29.10-*' --disableexcludes=kubernetes

(2)重启 kubelet

sudo systemctl daemon-reload
sudo systemctl restart kubelet

5 解除节点的保护(master上执行)

通过将节点标记为可调度,让节点重新上线:

# 在控制平面节点上执行此命令
# 将 <node-to-uncordon> 替换为你的节点名称
kubectl uncordon <node-to-uncordon>节点1:
kubectl uncordon k8s-node1节点2:
kubectl uncordon k8s-node2

6 查看节点情况

其他工作节点也按照升级工作节点来操作的步骤进行操作

最后结果:

升级成功后,需要确保所有的对象资源的状态跟升级前是一样的。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

结合长短期记忆网络(LSTM)和无迹卡尔曼滤波器(UKF)的技术在机器人导航和状态估计中的应用前景

结合长短期记忆网络(LSTM)和无迹卡尔曼滤波器(UKF)的技术在机器人导航和状态估计中具有广泛的应用前景。如有滤波、导航方面的代码定制需求,可通过文末卡片联系作者获得帮助 文章目录 结合LSTM和UKF的背景结合LSTM和UKF的优势应用实例研究现状MATLAB代码示例结论结合LSTM和…

Spring源码下载与测试

引言 下载了Spring源码想阅读阅读&#xff0c;发现用的是Gradle&#xff0c;原来实习的时候公司用的也是Gradle&#xff0c;但不怎么会用&#xff0c;感觉相比于Maven&#xff0c;Gradle更适合非常大型的项目&#xff0c;因为他的jar包下载的是真快 下载 由于Spring6开始就强…

【HarmonyOS之旅】ArkTS语法(三) -> 渲染控制

目录 1 -> 条件渲染 2 -> 循环渲染 3 -> 数据懒加载 3.1 -> IDataSource类型说明 3.2 -> DataChangeListener类型说明 ArkTS也提供了渲染控制的能力。条件渲染可根据应用的不同状态&#xff0c;渲染对应状态下的UI内容。循环渲染可从数据源中迭代获取数据&…

再见2024,你好2025

再见2024&#xff0c;你好2025 1月2月3月4月5~10月11~12月一些收获读书跑步工作 为了让这篇博客不那么平淡&#xff0c;一句话可以总结为&#xff1a;平平无奇的琐碎&#xff0c;没有亮点成果。 也可以数字化概述&#xff1a;涨了1万粉&#xff0c;赚了10万&#xff0c;跑步300…

阴阳师の新手如何速刷5个SP/SSR?!(急速育成)

目标&#xff1a;攒5个SP/SSR式神&#xff0c;参与急速育成&#xff0c;省四个黑蛋&#xff08;想要快速升级技能而且经常上场的式神在攒够5个式神前先不升级&#xff09;【理论上组成&#xff1a;10蓝40蓝预约召唤福利20修行or抽卡】 关键点&#xff1a;蓝票&#xff0c;新手…

Kerberos用户认证-数据安全-简单了解-230403

hadoop安全模式官方文档&#xff1a;https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html kerberos是什么 kerberos是计算机网络认证协议&#xff0c;用来在非安全网络中&#xff0c;对个人通信以安全的手段进行身份认证。 概念&#…

第 29 章 - ES 源码篇 - 网络 IO 模型及其实现概述

前言 本文介绍了 ES 使用的网络模型&#xff0c;并介绍 transport&#xff0c;http 接收、响应请求的代码入口。 网络 IO 模型 Node 在初始化的时候&#xff0c;会创建网络模块。网络模块会加载 Netty4Plugin plugin。 而后由 Netty4Plugin 创建对应的 transports&#xff0…

SQL 基础教程 - SQL SELECT 语句

SQL SELECT DISTINCT 语句 SELECT DISTINCT 语句用于返回唯一不同的值。 在表中&#xff0c;一个列可能会包含多个重复值&#xff0c;有时您也许希望仅仅列出不同&#xff08;distinct&#xff09;的值。 DISTINCT 关键词用于返回唯一不同的值。 SQL SELECT DISTINCT 语法 …

计算机网络基础知识(7)中科大郑铨老师笔记

协议层次及服务模型 计算机网络的分层设计方法&#xff0c;将复杂的网络功能分解为多个层次&#xff0c;每一层实现特定的功能。 互联网中的TCP/IP协议族&#xff0c;包括物理层、链 路层、网络层、传输层和应用层的功能。然后&#xff0c;数据传输的 过程&#xff0c;从应用层…

Microsoft word@【标题样式】应用不生效(主要表现为在导航窗格不显示)

背景 随笔。Microsoft word 2013基础使用&#xff0c;仅做参考和积累。 问题 Microsoft word 2013&#xff0c;对段落标题文字应用【标题样式】不生效&#xff08;主要表现为在导航窗格不显示&#xff09;。 图1 图2 观察图1和图2&#xff0c;发现图1的文字在应用【标题一】样…

TP 钱包插件版本的使用

目前 TokenPocket 的几个平台中&#xff0c;以 ios 和 安卓版本最为常见&#xff0c;其实很少有人知道&#xff0c;浏览器上有一个插件版本的 Tp, 用电脑多的话&#xff0c;这也是一个挺好的选择。 最新版本现在支持Chrome、Brave 浏览器、Edge&#xff08;Firefox及Opera正在…

微信流量主挑战:三天25用户!功能未完善?(新纪元4)

&#x1f389;【小程序上线第三天&#xff01;突破25用户大关&#xff01;】&#x1f389; 嘿&#xff0c;大家好&#xff01;今天是我们小程序上线的第三天&#xff0c;我们的用户量已经突破了25个&#xff01;昨天还是16个&#xff0c;今天一觉醒来竟然有25个&#xff01;这涨…

【AndroidAPP】权限被拒绝:[android.permission.READ_EXTERNAL_STORAGE],USB设备访问权限系统报错

一、问题原因 1.安卓安全性变更 Android 12 的安全性变更&#xff0c;Google 引入了更严格的 PendingIntent 安全管理&#xff0c;强制要求开发者明确指定 PendingIntent 的可变性&#xff08;Mutable&#xff09;或不可变性&#xff08;Immutable&#xff09;。 但是&#xf…

打印进度条

文章目录 1.Python语言实现(1)黑白色(2)彩色&#xff1a;蓝色 2.C语言实现(1)黑白颜色(2)彩色版&#xff1a;红绿色 1.Python语言实现 (1)黑白色 import sys import timedef progress_bar(percentage, width50):"""打印进度条:param percentage: 当前进度百分比…

ubuntu 使用samba与windows共享文件[注意权限配置]

在Ubuntu上使用Samba服务与Windows系统共享文件&#xff0c;需要正确配置Samba服务以及相应的权限。以下是详细的步骤&#xff1a; 安装Samba 首先&#xff0c;确保你的Ubuntu系统上安装了Samba服务。 sudo apt update sudo apt install samba配置Samba 安装完成后&#xff0c…

数据结构(哈希表)

背景 在对数据的日常处理中&#xff0c;查找是一项基本操作。通常&#xff0c;查找算法都是基于对比的&#xff0c;比如在一条链表中有n个节点&#xff0c;要找到其中的某个节点&#xff0c;最基本的思路就是从头到尾依次遍历每个节点&#xff0c;依次对比每个节点是否是想要的…

【每日学点鸿蒙知识】模拟器开启网络、长时任务、兼容性测试支持、丢帧定位、SO中访问rawfile等

1、模拟器如何开启网络&#xff1f; 模拟器使用的是电脑本身的网络&#xff0c;不通过代理即可访问网络。 2、创建子window后&#xff0c;锁屏很短时间内&#xff0c;应用会被杀死&#xff1f; 没开长时任务&#xff0c;锁屏和退后台保活要开长时任务。 应用退至后台后&…

如何解决Eigen和CUDA版本不匹配引起的错误math_functions.hpp: No such file or directory

Apollo9针对RTX40的docker环境里的Eigen库版本是3.3.4&#xff0c;CUDA是11.8: 编译我们自己封装模型的某些component代码时没问题&#xff0c;编译一个封装occ模型的component代码时始终报错: In file included from /usr/include/eigen3/Eigen/Geometry:11:0, …

Mac连接云服务器工具推荐

文章目录 前言步骤1. 下载2. 安装3. 常用插件安装4. 连接ssh测试5. 连接sftp测试注意&#xff1a;ssh和sftp的区别注意&#xff1a;不同文件传输的区别解决SSL自动退出 前言 Royal TSX是什么&#xff1a; Royal TSX 是一款跨平台的远程桌面和连接管理工具&#xff0c;专为 mac…

python修改ppt中的文字部分及插入图片

批量修改ppt中的某个模块&#xff0c;或者批量制作奖状等场景会用到&#xff1b; import os import pandas as pd from pptx import Presentation from pptx.util import Inchesfilepath/Users/kangyongqing/Documents/kangyq/202303/分析模版/批量制作/file1时段预警_副本.pp…