云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15)

这篇具有很好参考价值的文章主要介绍了云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、理论

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 版本 目标版本
master1 192.168.204.180 v1.20.6 v1.20.15
master2 192.168.204.181 v1.20.6 v1.20.15
node1 192.168.204.182  v1.20.6 v1.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。云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

执行如下命令确定升级版本云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

我的目标版本是1.20.15-0。

(2)升级Master

所有 master 节点操作

 升级kubeadm

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器 升级完成后验证版本

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

② 升级 master1 节点

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

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

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

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

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

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

成功

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

③ 升级 master2节点

master2节点操作

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

升级kubeadm

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

升级完成后验证版本

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器升级master2节点

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

成功:

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

升级kubectl和kubelet

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

1)master1节点

将当前节点标记为不可调度,并驱逐节点上的Pod

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

升级kubelet和kubectl组件

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

重启kubelet

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

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

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

查看节点版本,发现一台master节点已经升级完毕。

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

2)master2节点

将当前节点标记为不可调度,并驱逐节点上的Pod

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

升级kubelet和kubectl组件

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

重启kubelet

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

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

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

此时查看节点版本,发现两台master节点已经升级完毕。

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

接下来升级worker节点。

(3) 升级 Worker

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

升级kubeadm

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

查看版本

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

升级 node 节点

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

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

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

升级kubeletkubectl组件

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

重启kubelet

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

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

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

2.验证集群

(1)验证集群状态是否正常云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

版本均已升级到 v1.20.15。

(2) 验证集群证书是否正常云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

三、问题

1.给node1节点打污点报错

(1)报错

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器

(2)原因分析

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

(3)解决方法

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

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

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

云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15),云原生Kubernetes,kubernetes,云原生,容器文章来源地址https://www.toymoban.com/news/detail-724583.html

到了这里,关于云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • centos8.x系统安装K8S,kubernetes集群v1.23.9,docker支持的最后一个版本

    卸载podman,centos默认安装了podman容器(不管有没有,执行下总没错),可能与docker存在冲突 2.1 第一种安装方法 docker安装请参考 Linux系统在线安装docker任意版本完整教程 2.2 第二种安装方法 ** ##执行完毕后请记住如下的信息: **

    2024年02月12日
    浏览(55)
  • 【云原生-K8s】kubeadm搭建安装k8s集群v1.25版本完整教程【docker、网络插件calico、中间层cri-docker】

    从 k8s 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,所以docker不能再作为k8s的容器运行时了,即从k8s v1.24开始不再使用docker了 但是如果想继续使用docker的话,可以在kubelet和docker之间加上一个中间层cri-docker。

    2024年02月03日
    浏览(37)
  • 【云原生 | Kubernetes 系列】— 部署K8S 1.28版本集群部署(基于Containerd容器运行)

    主机名 IP地址 备注 k8s-master01 192.168.0.109 master k8s-node1 192.168.0.108 node1 k8s-node2 192.168.0.107 node1 k8s-node3 192.168.0.105 node1 1、主机配置 2、升级内核 3、配置内核转发以及过滤 4、安装ipset ipvsadm,IPVS(IP Virtual Server)是一个用于负载均衡的 Linux 内核模块,它可以用来替代 kube-proxy 默认的

    2024年02月20日
    浏览(61)
  • 云原生Kubernetes:K8S集群各组件服务重启

    目录 一、理论 1.各组件服务重启命令 (1)Master节点+Node节点共同服务 (2)Master节点独有服务 (3)Node节点独有服务

    2024年02月03日
    浏览(41)
  • 部署k8s集群版本升级

            升级k8s,可以升级一个小版本,可以升级一个大版本,但是不能跨版本升级,会有报错提示。建议一个版本一个版本升级 注意kubeadm版本与集群版本一致。本文集群版本v1.20.15升级到v1.21.14. 第一步:查看当前集群集群版本 [root@master ~]# kubectl  get  node 第二步:使节

    2024年02月05日
    浏览(37)
  • K8S最新版本集群部署(v1.28) + 容器引擎Docker部署(下)

    🔼上一集:K8S最新版本集群部署(v1.28) + 容器引擎Docker部署(上) *️⃣主目录:温故知新专栏 🔽下一集:Kubernetes可视化管理工具Kuboard部署使用及k8s常用命令梳理记录 kubectl 是使用 Kubernetes API 与 Kubernetes 集群的控制面进行通信的命令行工具。详见官网安装步骤 📕下载kube

    2024年02月09日
    浏览(42)
  • K8S最新版本集群部署(v1.28) + 容器引擎Docker部署(上)

    🔼上一集:win11+vmware17+centos7.9环境搭建 *️⃣主目录:温故知新专栏 🔽下一集:K8S最新版本集群部署(v1.28) + 容器引擎Docker部署(下) 之前部署过dolphinscheduler3.1.8,看页面增加了K8S模块,所以想着部署一下K8S,学习一下,而且海豚调度也提供了K8S部署方式,经过一番了解,发现

    2024年02月11日
    浏览(47)
  • 二进制部署高可用k8s集群V1.20.11版本

    单master架构图 master节点 node1节点 node2节点   Etcd是一个分布式键值存储系统, K8s使用Etcd进行数据存储 ,所以先准备一个Etcd数据库,为解决Etcd单点故障,应采用集群方式进行部署,这里使用3台组件集群,可容忍1台机器故障,当然 也可以使用5台组件集群,可容忍2台机器故

    2024年01月22日
    浏览(39)
  • 【云原生-K8s-1】kubeadm搭建k8s集群(一主两从)完整教程及kubernetes简介

    🍁 博主简介   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊 交流社区: 运维交流社区 欢迎大家的加入!   Kubernetes(简称:k8s) 是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,用于管理云平台中多

    2024年02月07日
    浏览(55)
  • Centos7安装部署k8s(kubernetes)最新v1.27.1版本超详细安装教程

    从零开始的k8s安装 硬件配置要求 cpu = 2核 硬盘 = 20G 内存 = 2G 节点数量建议为奇数(3, 5, 7, 9等)(1台好像也能搭,没试过) 以下命令出除特殊要求外,其余都建议在master主机执行 本教程配置如下 主机名 IP 配置 master 192.168.42.150 2核+2G+20G node1 192.168.42.151 2核+2G+20G node2 192.168.

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包