第4章-集群升级
原创
本博客原创文章,转载请注明出处
- name: 原创
desc: 本博客原创文章,转载请注明出处
bgColor: '#F0DFB1'
textColor: '#1078E6'
2
3
4
# 第4章-集群升级
本章要点 |
---|
了解 Kubernetes 的升级步骤 |
实施 Kubernetes 的升级 |
# 11. 升级说明
# 1.11.1 为什么要升级 Kubernetes?
每个 Kubernetes 版本的生命周期很短,在官方发布的发行版本历史 (opens new window)以及版本排期表 (opens new window)中可以看到,现在 Kubernetes 每年都会更新迭代,每个新版本的使用寿命只有 1.5 年左右。
- 在今年 6 月份的时候,最新的 Kubernetes 版本是 1.27.3
- 现在是 10 月份,最新版本是 1.27.6 和 1.28.2
- 甚至 1.29 都快出来了
为了获得官方对 Kubernetes 的支持(例如安全补丁),我们每隔一段时间就需要更新 Kubernetes,以提高集群的安全性,并获取高版本中的新特性。
# 1.21.2 Kubernetes的升级限制和顺序
Kubernetes 的升级并不是随意的,需要遵循一些规则。
# 1.2.1不能跨版本升级
Kubernetes 不能跨版本升级,当前版本只能升级到下一个版本。
- 例如 v1.26 版本可以升级到 v1.27
- 但是 v1.26 版本不能升级到 v1.28
也就是说,如果你想将 1.26 升级到 1.28,则你需要进行两次升级,第一次先升级到 1.27,第二次再升级到 1.28。
# 1.2.2升级顺序
Kubernetes 需要按顺序升级。
节点的升级顺序:
- 先升级 master
- 如果有多台 master,则需要一台一台地升级
- 最后才升级 worker
软件的升级顺序:
- 先升级 kubeadm。前面提到过,kubeadm用于部署和管理整个集群,所以要优先升级它
- 升级集群组件
- 升级 kubectl 和 kubelet
具体的升级过程:
- 升级 master 上的 kubeadm
- 升级 master 上的集群组件
- 升级 master 上的 kubectl 和 kubelet
- 升级 worker 上的 kubeadm
- 升级 worker 上的集群组件
- 升级 worker 上的 kubectl 和 kubeclet
# 22. 集群升级
在升级之前,先查看一下 master 当前的版本:
kubectl get nodes
# 或
kubectl version --short
2
3
master 在集群中显示的版本为 v1.26.5,软件版本也为 v1.26.5。
# 2.12.1 升级 master
# 2.1.1升级 master 的 kubeadm
此处通过 yum 来升级 kubeadm 软件包。
查看 kubeadm 的版本列表:
yum list kubeadm --showduplicates
绿色代表你当前已安装的版本。
将 kubeadm 升级为 v1.27.6 版本:
yum install kubeadm-1.27.6-0 --disableexcludes=kubernetes
确认无误后,输入 “y” 并回车,以确认安装。
安装完成后,查看 kubeadm 软件的当前版本:
kubeadm version
软件更新成功,已经变成了 v1.27.6 版本。但是集群中的版本信息还没有变化,不用担心,这是正常的。
成功更新 kubeadm 软件之后,我们可以查看 kubernetes 集群的更新计划:
kubeadm upgrade plan
从图中可以看到,我们的集群目前处于 v1.26.5 版本,你可以将其更新为 v1.26.9 版本。
此外,上方还有一条提示信息 “remote version is much newer: v1.28.2; falling back to: stable-1.27”。意思是说:发现了最新版本 v1.28.2,但是你首先需要更新为 1.27 版本,才能进一步更新为 v1.28。
命令行的输出信息很多,继续往下拉,看到了另一个可更新的版本 v1.27.6,这正是我们想要的。
# 2.1.2升级 master 的集群组件
在更新集群组件之前,需要先将 master 节点设置成维护模式:
kubectl drain www.k10.com --ignore-daemonsets
kubectl get nodes
2
3
确保 master 已经处于维护模式,然后更新集群:
kubeadm upgrade apply v1.27.6
确认无误后,输入 “y” 并回车,以确认操作。
此外,更新集群的同时还会更新 etcd 组件,该组件保存了集群的各种状态信息,例如配置信息、运行信息、网络信息等。
如果你担心 etcd 在更新的过程中发生什么闪失,导致信息丢失,则你可以添加标志符--etcd-upgrade=false
以禁止 etcd 组件的更新:
kubeadm upgrade apply v1.27.6 --etcd-upgrade=false
集群的更新时间比较长,因为更新的过程中 需要下载镜像文件,具体的时间长短 取决于你的网络速度。在更新集群之前,你也可以执行命令kubeadm config images pull
来提前下载镜像文件。
当你看到 “[upgrade/successful]” 字样的时候,说明升级成功。
# 2.1.3升级 master 的 kubectl和kubelet
kubeadm 软件和相关集群组件都已经升级完毕,下一步是升级 kubectl 和 kubelet 软件。
将 kubectl 和 kubelet 升级至 v1.27.6 版本:
yum install kubectl-1.27.6-0 kubelet-1.27.6-0 --disableexcludes=kubernetes
确认无误后,输入 “y” 并回车,以确认操作。
安装完毕后,重载并重启 kubelet 服务:
# 重载并重启服务
systemctl daemon-reload
systemctl restart kubelet
systemctl status kubelet
2
3
4
5
此时 kubelet 服务的状态为 “active(running)”。
取消 master 节点的维护模式:
kubectl uncordon www.k10.com
通过kubectl get nodes
再次查看集群信息,可以看到 master 节点的版本已经变更为了 v1.27.6。
master 升级成功!
# 2.22.2 升级 worker
worker 的升级步骤和 master 相同,都是三步:
- 升级 kubeadm
- 升级集群组件
- 升级 kubectl 和 kubelet
只有一点不同,那就是 master 在升级集群组件时的命令是:
# master升级集群组件
kubeadm upgrade apply v1.27.6
2
而 worker 升级集群组件时,则需要使用另一个命令:
# worker升级集群组件
kubeadm upgrade node
2
master 和 worker 之间除了升级组件的命令不同之外,其余的命令和操作完全一致。
# 2.2.1升级 worker 的 kubeadm
在升级之前,先查看版本列表,确认是否有我们所需要的版本:
yum list kubeadm --showduplicates
发现最高的软件版本只有 1.27.2,并没有我们需要的 1.27.6。
不用慌,可能是 yum 软件列表太旧了,更新一下信息即可:
# 获取有关于 kubeadm 的最新软件包信息
yum update kubeadm
# 更新所有软件包信息,速度可能较慢,不推荐
yum update
2
3
4
5
注意!!!这里要输入 “n” 取消更新,因为我们只是要获取版本信息,并不需要更新。
如果你输入了 “y” 则你的 kubeadm 会自动更新为最新的 v1.28.2 版本。
成功获取版本信息,现在可以看到 1.27.6 版本的 kubeadm 了。
安装:
yum install kubeadm-1.27.6-0 --disableexcludes=kubernetes
确认下版本:
kubeadm version
# 2.2.2升级 worker 的集群组件
回到 master 节点,将需要升级的 worker 设置成维护模式(升级哪个就维护哪个):
kubectl drain www.k11.com --ignore-daemonsets --delete-emptydir-data
成功将该 worker 设置成维护模式。
回到 worker 主机,更新组件:
kubeadm upgrade node
worker 更新组件的速度特别快,快到你差点以为出错了,和 master 的更新速度形成了鲜明对比。
看到 “successfully updated!” 字样说明更新成功。
# 2.2.3升级 worker 的 kubectl和kubelet
更新 kubectl 和 kubelet:
yum install kubectl-1.27.6-0 kubelet-1.27.6-0 --disableexcludes=kubernetes
更新完毕后,重载和重启 kubelet 服务:
systemctl daemon-reload
systemctl restart kubelet
systemctl status kubelet
2
3
4
服务状态为 “active(running)” 说明正常。
回到 master 主机,取消 worker 节点的维护模式。
kubectl uncordon www.k11.com
# 2.32.3 升级另一台worker
快速过一遍。
# 更新kubeadm
yum install kubeadm-1.27.6-0 --disableexcludes=kubernetes -y
2
# 查看版本
kubeadm version
2
# 在master上,将worker设置成维护模式
kubectl drain www.k12.com --force --ignore-daemonsets --delete-emptydir-data
2
# 更新组件
kubeadm upgrade node
2
# 更新kubectl和kubelet
yum install kubectl-1.27.6-0 kubelet-1.27.6-0 --disableexcludes=kubernetes -y
2
# 重载和重启服务
systemctl daemon-reload
systemctl restart kubelet
systemctl status kubelet
2
3
4
5
# 在master上,取消worker的维护模式
kubectl uncordon www.k12.com
2
至此,三个节点都已完成升级。
# 33. 小结
你应该学会如何升级 kubernetes 集群了吧?
我为你准备了一些练习(练习题-2),去试试吧!