云原生Kubernetes:K8S集群版本升级

news2024/12/27 15:34:10

目录

一、理论

1.K8S集群升级

2.集群概况

3.升级集群

4.验证集群

二、实验

 1.升级集群

2.验证集群

三、问题

1.给node1节点打污点报错


一、理论

1.K8S集群升级

(1)概念

搭建K8S集群的方式有很多种,比如二进制,kubeadm,RKE(Rancher)等,K8S集群升级方式也各有千秋,目前准备使用kubeadm方式搭建的k8s集群升级方法。

需要注意的是,升级集群版本建议逐步升级,比如 v1.20.1–>v1.21.1–>v1.22.1–>v1.23.1–>v1.24.1,不能跨度过大,否则会报错。

2.集群概况

表1 集群概况

节点名称IP版本目标版本
master1192.168.204.180v1.20.6v1.20.15
master2192.168.204.181v1.20.6v1.20.15
node1192.168.204.182 v1.20.6v1.20.15

3.升级集群

(1)确定升级版本

可以看到目前的版本是v1.20.6。

kubectl get nodes   # 查看集群版本

NAME      STATUS   ROLES                  AGE   VERSION
master1   Ready    control-plane,master   94d   v1.20.6
master2   Ready    control-plane,master   94d   v1.20.6
node1     Ready    worker                 94d   v1.20.6

# 执行如下命令确定升级版本
yum list --showduplicates kubeadm --disableexcludes=kubernetes

……
kubeadm.x86_64                                                                                      1.20.6-0                                                                                   
kubeadm.x86_64                                                                                      1.20.7-0                                                                                   
kubeadm.x86_64                                                                                      1.20.8-0                                                                                   
kubeadm.x86_64                                                                                      1.20.9-0                                                                                   
kubeadm.x86_64                                                                                      1.20.10-0                                                                                  
kubeadm.x86_64                                                                                      1.20.11-0                                                                                  
kubeadm.x86_64                                                                                      1.20.12-0                                                                                  
kubeadm.x86_64                                                                                      1.20.13-0                                                                                  
kubeadm.x86_64                                                                                      1.20.14-0                                                                                  
kubeadm.x86_64                                                                                      1.20.15-0                
……

我的目标版本是1.20.15-0。

(2)升级Master

所有 master 节点操作

# 升级kubeadm
yum install -y kubeadm-1.20.15-0 --disableexcludes=kubernetes   # --disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库
# 升级完成后验证版本
kubeadm version

② 升级 master1 节点

# 验证升级计划。检查当前集群是否可被升级
kubeadm upgrade plan

[upgrade/config] Making sure the configuration is correct:
[upgrade/config] Reading configuration from the cluster...
[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[preflight] Running pre-flight checks.
[upgrade] Running cluster health checks
[upgrade] Fetching available versions to upgrade to
[upgrade/versions] Cluster version: v1.20.6
[upgrade/versions] kubeadm version: v1.20.6
W1012 13:13:14.679497    7949 version.go:102] could not fetch a Kubernetes version from the internet: unable to get URL "https://dl.k8s.io/release/stable.txt": Get "https://cdn.dl.k8s.io/rele context deadline exceeded (Client.Timeout exceeded while awaiting headers)
W1012 13:13:14.679539    7949 version.go:103] falling back to the local client version: v1.20.6
[upgrade/versions] Latest stable version: v1.20.6
[upgrade/versions] Latest stable version: v1.20.6
[upgrade/versions] Latest version in the v1.20 series: v1.20.15
[upgrade/versions] Latest version in the v1.20 series: v1.20.15

Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
COMPONENT   CURRENT       AVAILABLE
kubelet     3 x v1.20.6   v1.20.15

Upgrade to the latest version in the v1.20 series:

COMPONENT                 CURRENT    AVAILABLE
kube-apiserver            v1.20.6    v1.20.15
kube-controller-manager   v1.20.6    v1.20.15
kube-scheduler            v1.20.6    v1.20.15
kube-proxy                v1.20.6    v1.20.15
CoreDNS                   1.7.0      1.7.0
etcd                      3.4.13-0   3.4.13-0

You can now apply the upgrade by executing the following command:

	kubeadm upgrade apply v1.20.15

Note: Before you can perform this upgrade, you have to update kubeadm to v1.20.15.

_____________________________________________________________________


The table below shows the current state of component configs as understood by this version of kubeadm.
Configs that have a "yes" mark in the "MANUAL UPGRADE REQUIRED" column require manual config upgrade or
resetting to kubeadm defaults before a successful upgrade can be performed. The version to manually
upgrade to is denoted in the "PREFERRED VERSION" column.

API GROUP                 CURRENT VERSION   PREFERRED VERSION   MANUAL UPGRADE REQUIRED
kubeproxy.config.k8s.io   v1alpha1          v1alpha1            no
kubelet.config.k8s.io     v1beta1           v1beta1             no
_____________________________________________________________________

最高可以升级到 v1.20.15 版本,正好与我们的目标版本一致;只要可允许升级的最高版本高于你的目标版本,就可以升级。

注意:kubeadm upgrade命令也会自动对kubeadm在节点上所管理的证书执行续约操作。如果需要略过证书续约操作,可以使用
标志--certificate-renewal=false。

确定集群升级目标版本,并且查看升级计划符合条件后,就可以在 master1 节点上执行升级集群的命令了

# 将 master1 升级到目标版本
kubeadm upgrade apply v1.20.15

③ 升级 master2节点

master2节点操作

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

kubeadm upgrade node

升级kubectl和kubelet

两台 master 节点操作,操作顺序:master1——>master2
分别在两台master节点上执行如下操作,注意更改<节点名称>。

# 1.将当前节点标记为不可调度,并驱逐节点上的Pod
kubectl drain <节点名称> --ignore-daemonsets
##说明:
## --ignore-daemonsets 无视DaemonSet管理下的Pod。即--ignore-daemonsets往往需要指定的,这是
#因为deamonset会忽略unschedulable标签(使用kubectl drain时会自动给节点打上不可调度标签),
#由于deamonset控制器控制的pod被删除后可能马上又在此节点上启动起来,这样就会成为死循环。因此
#这里忽略daemonset。

# 2.升级kubelet和kubectl组件
yum install -y kubelet-1.20.15-0 kubectl-1.20.15-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.20.15
master2   Ready    control-plane,master   94d   v1.20.15
node1     Ready    worker                 94d   v1.20.15

接下来升级worker节点。

(3) 升级 Worker

工作节点上的升级过程应该一次执行一个节点,或者一次执行几个节点,以不影响运行工作负载所需的最小容量。
由于我的集群中只有一个worker节点,所以这里只在一台机器上操作;如果你的集群中有多个worker节点,每个节点都需要操作。

# 升级kubeadm
yum install -y kubeadm-1.20.15-0 --disableexcludes=kubernetes
# 查看版本
kubeadm version

# 升级 node 节点
kubeadm upgrade node

# 设置节点不可调度并排空节点。只有1个worker节点时忽略此步,因为可能会报错
kubectl drain node1 --ignore-daemonsets

# 升级kubelet和kubectl组件
yum install -y kubelet-1.20.15-0 kubectl-1.20.15-0 --disableexcludes=kubernetes

# 重启kubelet
systemctl daemon-reload
systemctl restart kubelet

# 恢复当前节点上的Pod调度。只有1个worker节点时忽略此步
kubectl uncordon node1     # node1 为worker节点名称

4.验证集群

(1)验证集群状态是否正常

kubectl get nodes

# 结果如下:
[root@master1 ~]# kubectl get nodes
NAME      STATUS   ROLES                  AGE   VERSION
master1   Ready    control-plane,master   95d   v1.20.15
master2   Ready    control-plane,master   94d   v1.20.15
node1     Ready    worker                 94d   v1.20.15

版本均已升级到 v1.20.15。

(2) 验证集群证书是否正常

kubeadm alpha certs check-expiration

## 结果如下:
[root@master1 ~]# kubeadm alpha certs check-expiration
Command "check-expiration" is deprecated, please use the same command under "kubeadm certs"
[check-expiration] Reading configuration from the cluster...
[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'

CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED
admin.conf                 Oct 11, 2024 05:29 UTC   364d            ca                      no      
apiserver                  Oct 11, 2024 05:28 UTC   364d            ca                      no      
apiserver-etcd-client      Oct 11, 2024 05:28 UTC   364d            etcd-ca                 no      
apiserver-kubelet-client   Oct 11, 2024 05:28 UTC   364d            ca                      no      
controller-manager.conf    Oct 11, 2024 05:29 UTC   364d            ca                      no      
etcd-healthcheck-client    Oct 11, 2024 05:28 UTC   364d            etcd-ca                 no      
etcd-peer                  Oct 11, 2024 05:28 UTC   364d            etcd-ca                 no      
etcd-server                Oct 11, 2024 05:28 UTC   364d            etcd-ca                 no      
front-proxy-client         Oct 11, 2024 05:28 UTC   364d            front-proxy-ca          no      
scheduler.conf             Oct 11, 2024 05:29 UTC   364d            ca                      no      

CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED
ca                      Jul 06, 2033 05:45 UTC   9y              no      
etcd-ca                 Jul 06, 2033 05:45 UTC   9y              no      
front-proxy-ca          Jul 06, 2033 05:45 UTC   9y              no      
[root@master1 ~]# 

二、实验

 1.升级集群

(1)确定升级版本

可以看到目前的版本是v1.20.6。

执行如下命令确定升级版本

我的目标版本是1.20.15-0。

(2)升级Master

所有 master 节点操作

 升级kubeadm

 升级完成后验证版本

② 升级 master1 节点

验证升级计划。检查当前集群是否可被升级

最高可以升级到 v1.20.15 版本,正好与我们的目标版本一致;只要可允许升级的最高版本高于你的目标版本,就可以升级。

注意: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节点已经升级完毕。

接下来升级worker节点。

(3) 升级 Worker

工作节点上的升级过程应该一次执行一个节点,或者一次执行几个节点,以不影响运行工作负载所需的最小容量。
由于我的集群中只有一个worker节点,所以这里只在一台机器上操作;如果你的集群中有多个worker节点,每个节点都需要操作。

升级kubeadm

查看版本

升级 node 节点

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

升级kubeletkubectl组件

重启kubelet

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

2.验证集群

(1)验证集群状态是否正常

版本均已升级到 v1.20.15。

(2) 验证集群证书是否正常

三、问题

1.给node1节点打污点报错

(1)报错

(2)原因分析

有pod在节点存储使用资源,需要驱逐

(3)解决方法

需要命令加上参数 --delete-emptydir-data 

如果有mount local volumn的pod,会强制驱逐pod

[root@master1 ~]# kubectl drain node1 --ignore-daemonsets --delete-emptydir-data

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

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

相关文章

2023年【公路水运工程施工企业安全生产管理人员】考试总结及公路水运工程施工企业安全生产管理人员模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年【公路水运工程施工企业安全生产管理人员】考试总结及公路水运工程施工企业安全生产管理人员模拟考试题库&#xff0c;包含公路水运工程施工企业安全生产管理人员考试总结答案和解析及公路水运工程施工企业安全…

Kotlin-Java 互操作指南

官网地址 https://developer.android.google.cn/kotlin/interop?hlzh-cn 脑图

外汇天眼:6个常见网络投资诈骗迹象,如发现任何一个,务必小心!

在这个数字时代&#xff0c;随着外汇和加密货币市场的不断发展&#xff0c;网络投资已经成为一种广受欢迎的理财方式。然而&#xff0c;近年来&#xff0c;诈骗犯罪也在不断增加&#xff0c;给社会带来了巨大的财务损失。尽管投资诈骗的手法各式各样&#xff0c;但它们都可以追…

2023年全球及中国光伏硅片行业产量、市场竞争格局及趋势分析[图]

随着硅片企业建厂扩建&#xff0c;我国硅片产能逐步增长&#xff0c;光伏硅片产能逐渐向中国集中。2022年&#xff0c;我国光伏硅片产能约650.3GW&#xff0c;同比增长59.7%&#xff1b;2023年1-6月&#xff0c;我国光伏硅片产量超过253.4GW&#xff0c;同比增长65.8%&#xff…

一道桥牌明手题的思路与分析

题目 S先出&#xff0c;要求NS全大 分析 剩下6吨牌&#xff0c;可以确保大的有五吨&#xff08;h2吨&#xff0c;d2吨&#xff0c;c1吨&#xff09; 我们需要额外发展一顿出来&#xff0c;哪一顿呢&#xff1f; s、d和c都有机会&#xff0c;那么我们不妨先让WE陷入被挤的境地…

射频识别技术(RFID)在智能制造模具管理中的应用

背景介绍 模具是工业生产的核心装备&#xff0c;被誉为“工业之母”&#xff0c;广泛应用于机械、汽车、轻工、电子、化工、冶金、建材等各个行业&#xff0c;是制造加工企业的重要资产&#xff0c;然而&#xff0c;传统的人工纸质记录方式已无法满足模具管理的需求&#xff0…

在Android平板上使用code-server公网远程Ubuntu服务器编程

文章目录 1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址6.结语 1.ubuntu本地安装code-server 准备一台虚拟机,Ubuntu或者centos都可以&#xff0c;这里以VMwhere ubuntu系统为例 下载code server服务,浏览器…

冲量在线中标浦发银行AI SaaS服务平台的可信安全技术能力提升项目!打造金融行业首个可信MaaS服务

近日&#xff0c;冲量在线中标浦发银行「围绕SaaS服务平台的可信安全技术能力提升项目」&#xff0c;基于冲量在线领先的隐私计算技术及AI模型可信训练和推理能力&#xff0c;联合海光打造了金融行业首个AI能力可信输出SaaS平台&#xff0c;赋能浦发银行AI能力安全对外输出和共…

怎样录制音频文件?让我一步步带你操作

“音频文件怎么录制呀&#xff1f;参加了学校组织的短视频大赛&#xff0c;现在画面已经拍好了&#xff0c;但是找不到合适的音频&#xff0c;想亲自去录制一个&#xff0c;可是不会操作&#xff0c;大家知道怎么录制音频文件吗&#xff1f;” 录制音频文件已经成为很多人日常…

一.镜头知识之焦点,焦距,有效焦距,前焦距,后焦距

一.镜头知识之焦点&#xff0c;焦距&#xff0c;有效焦距&#xff0c;前焦距&#xff0c;后焦距 文章目录 一.镜头知识之焦点&#xff0c;焦距&#xff0c;有效焦距&#xff0c;前焦距&#xff0c;后焦距1.焦点/焦距f1.1 第一种情况&#xff1a;单片的薄透镜1.2 第二种情况&…

PreScan与MATLAB联合仿真报错

一、 问题&#xff1a; Error:Matlab ||和&&运算符的操作数必须能够转换为逻辑标量值 二、解决办法 必须安装VS2013&#xff08;我装的VS2017不行的&#xff09;&#xff0c;然后重启prescan和MATLAB&#xff0c;编译通过&#xff0c;界面如下&#xff1a; 三、VS…

【JavaEE】IO 操作

文章目录 前言什么是 IOReader 读操作1. 创建 Reader 类2. 理解 Reader 类中的不同 read 方法3. 使用 Reader 类当中的不同 read 方法3. 关闭文件操作 Writer 写操作1. 创建出 Writer 类2. 理解 Writer 类中的不同 write 方法3. 使用 Writer 类当中的 write 方法 OutputStream …

工业交换机选用技巧

当选择工业交换机时&#xff0c;有一些小技巧可以帮助您做出更好的选择&#xff0c;今天&#xff0c;我们一起来了解一下 1. 网络需求分析&#xff1a;首先&#xff0c;对您的网络需求进行详细分析。确定您的带宽需求、设备数量、数据传输量、网络拓扑结构等因素&#xff0c;以…

RCD吸收电路的工作原理及参数计算方法详解

在电子电力技术和自动化控制领域内&#xff0c;RCD吸收电路非常重要&#xff0c;它的作用是吸收瞬间过电压和过电路免受电压波动的影响&#xff0c;因此被广泛应用在各种设备及系统中&#xff0c;今天凡亿将带领小伙伴们来了解下RCD吸收电路的工作原理及计算方法。 1、RCD吸收电…

ET2046·低电压 I/O 触摸屏控制电路(SSOP16、QFN16)

目录 1. 概述 2. 功能特点 3. 管脚排列图 4. 管脚说明 5. 功能框图 6. 功能说明 7. 模拟输入 8. 内部参考 9. 参考输入 10. 触摸屏的建立 11. 温度的测量 12. 电池电压的测量 13. 压力监测 14. 数字接口 15. 控制字 16. PENIRQ 输出 17. 16 …

python unittest 基本用法

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 unittest的使用分为6个步骤&#xff1a; 1.导入unittest模块 2.定义测试类&#xff0c;父类为unittest.TestCase 可继承unittest.TestCase的方法&#xff0c;如…

wins打开ftp服务,跳转到浏览器解决方式

问题: 在wins的资源管理器中输入 ftp://服务器ip的时候&#xff0c;会突然跳转到浏览器中 百度上的方法归纳汇总 解决方法: 百度上最多的方式&#xff0c;但是我电脑试了不行 启动 InternetExplorer 在 菜单栏 选择 工具 -> Internet 选项 -> 高级 -> 勾选 启用 …

安全典型配置(二)使用ACL限制用户在特定时间访问特定服务器的权限

安全典型配置&#xff08;一&#xff09;使用ACL限制FTP访问权限案例_厦门微思网络的博客-CSDN博客本例中配置的本地用户登录密码方式为irreversible-cipher&#xff0c;表示对用户密码采用不可逆算法进行加密&#xff0c;非法用户无法通过解密算法特殊处理后得到密码&#xff…

day27--AJAX(bootstrap之modal,toast;接口文档的一些用法)

目录 Bootstrap之Modal&#xff1a; 显示和隐藏方法 通过自定义属性&#xff1a; 使用JS来控制弹框&#xff1a; Bootstrap之Toast&#xff1a; 接口文档一些用法&#xff1a; 删除图书&#xff1a; 图片上传&#xff1a; 图片上传步骤&#xff1a; 修改头像&#xff…

电脑技巧:推荐一款桌面整理神器TidyTabs

目录 1、软件简介 2、软件功能介绍 3、总结 1、软件简介 TidyTabs是一款Windows应用程序&#xff0c;它可以将多个打开的窗口整理成一个选项卡式的界面&#xff0c;使得用户可以更加方便地切换和管理不同的窗口。 TidyTabs可以将多个窗口整合到一个主窗口中&#xff0c;类似…