kubeadm upgrade
不会影响你的工作负载,只会涉及 Kubernetes 内部的组件,但备份终究是好的。systemctl status kubelet
或 journalctl -xeu kubelet
查看服务日志。kubeadm upgrade
的 `--config 参数和 kubeadm 配置 API 类型 来重新配置集群,这样会产生意想不到的结果。使用操作系统的包管理器找到最新的补丁版本 Kubernetes 1.24:
apt updateCentOS、RHEL 或 Fedora
apt-cache madison kubeadm
# 在列表中查找最新的 1.24 版本
# 它看起来应该是 1.24.x-00,其中 x 是最新的补丁版本
yum list --showduplicates kubeadm --disableexcludes=kubernetes
# 在列表中查找最新的 1.24 版本
# 它看起来应该是 1.24.x-0,其中 x 是最新的补丁版本
控制面节点上的升级过程应该每次处理一个节点。 首先选择一个要先行升级的控制面节点。该节点上必须拥有 /etc/kubernetes/admin.conf
文件。
# 用最新的补丁版本号替换 1.24.x-00 中的 xCentOS、RHEL 或 Fedora
apt-mark unhold kubeadm && \
apt-get update && apt-get install -y kubeadm=1.24.x-00 && \
apt-mark hold kubeadm
-
# 用最新的补丁版本号替换 1.24.x-0 中的 x验证下载操作正常,并且 kubeadm 版本正确:
yum install -y kubeadm-1.24.x-0 --disableexcludes=kubernetes
kubeadm version验证升级计划:
kubeadm upgrade plan
此命令检查你的集群是否可被升级,并取回你要升级的目标版本。 命令也会显示一个包含组件配置版本状态的表格。
Note:
kubeadm upgrade
也会自动对 kubeadm 在节点上所管理的证书执行续约操作。 如果需要略过证书续约操作,可以使用标志 --certificate-renewal=false
。 Note:
如果 kubeadm upgrade plan
给出任何需要手动升级的组件配置,用户必须 通过 --config
命令行标志向 kubeadm upgrade apply
命令提供替代的配置文件。 如果不这样做,kubeadm upgrade apply
会出错并退出,不再执行升级操作。
选择要升级到的目标版本,运行合适的命令。例如:
# 将 x 替换为你为此次升级所选择的补丁版本号
sudo kubeadm upgrade apply v1.24.x
一旦该命令结束,你应该会看到:
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.24.x". Enjoy!手动升级你的 CNI 驱动插件。
[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
你的容器网络接口(CNI)驱动应该提供了程序自身的升级说明。
如果 CNI 驱动作为 DaemonSet 运行,则在其他控制平面节点上不需要此步骤。
与第一个控制面节点相同,但是使用:
sudo kubeadm upgrade node
而不是:
sudo kubeadm upgrade apply
此外,不需要执行 kubeadm upgrade plan
和更新 CNI 驱动插件的操作。
# 将 <node-to-drain> 替换为你要腾空的控制面节点名称
kubectl drain <node-to-drain> --ignore-daemonsets
```shellCentOS、RHEL 或 Fedora
# 用最新的补丁版本替换 1.24.x-00 中的 x
apt-mark unhold kubelet kubectl && \
apt-get update && apt-get install -y kubelet=1.24.x-00 kubectl=1.24.x-00 && \
apt-mark hold kubelet kubectl
```
```shell重启 kubelet
# 用最新的补丁版本号替换 1.24.x-00 中的 x
yum install -y kubelet-1.24.x-0 kubectl-1.24.x-0 --disableexcludes=kubernetes
```
sudo systemctl daemon-reload
sudo systemctl restart kubelet
# 将 <node-to-drain> 替换为你的节点名称
kubectl uncordon <node-to-drain>
工作节点上的升级过程应该一次执行一个节点,或者一次执行几个节点, 以不影响运行工作负载所需的最小容量。
# 将 1.24.x-00 中的 x 替换为最新的补丁版本号CentOS、RHEL 或 Fedora
apt-mark unhold kubeadm && \
apt-get update && apt-get install -y kubeadm=1.24.x-00 && \
apt-mark hold kubeadm
# 用最新的补丁版本替换 1.24.x-00 中的 x
yum install -y kubeadm-1.24.x-0 --disableexcludes=kubernetes
sudo kubeadm upgrade node
# 将 <node-to-drain> 替换为你正在腾空的节点的名称
kubectl drain <node-to-drain> --ignore-daemonsets
# 将 1.24.x-00 中的 x 替换为最新的补丁版本CentOS, RHEL or Fedora
apt-mark unhold kubelet kubectl && \
apt-get update && apt-get install -y kubelet=1.24.x-00 kubectl=1.24.x-00 && \
apt-mark hold kubelet kubectl
# 将 1.24.x-0 x 替换为最新的补丁版本重启 kubelet
yum install -y kubelet-1.24.x-0 kubectl-1.24.x-0 --disableexcludes=kubernetes
sudo systemctl daemon-reload
sudo systemctl restart kubelet
# 将 <node-to-drain> 替换为当前节点的名称
kubectl uncordon <node-to-drain>
在所有节点上升级 kubelet 后,通过从 kubectl 可以访问集群的任何位置运行以下命令, 验证所有节点是否再次可用:
kubectl get nodes
STATUS
应显示所有节点为 Ready
状态,并且版本号已经被更新。
如果 kubeadm upgrade
失败并且没有回滚,例如由于执行期间节点意外关闭, 你可以再次运行 kubeadm upgrade
。 此命令是幂等的,并最终确保实际状态是你声明的期望状态。 要从故障状态恢复,你还可以运行 kubeadm upgrade --force
而无需更改集群正在运行的版本。
在升级期间,kubeadm 向 /etc/kubernetes/tmp
目录下的如下备份文件夹写入数据:
kubeadm-backup-etcd-<date>-<time>
kubeadm-backup-manifests-<date>-<time>
kubeadm-backup-etcd
包含当前控制面节点本地 etcd 成员数据的备份。 如果 etcd 升级失败并且自动回滚也无法修复,则可以将此文件夹中的内容复制到 /var/lib/etcd
进行手工修复。如果使用的是外部的 etcd,则此备份文件夹为空。
kubeadm-backup-manifests
包含当前控制面节点的静态 Pod 清单文件的备份版本。 如果升级失败并且无法自动回滚,则此文件夹中的内容可以复制到 /etc/kubernetes/manifests
目录实现手工恢复。 如果由于某些原因,在升级前后某个组件的清单未发生变化,则 kubeadm 也不会为之 生成备份版本。
kubeadm upgrade apply
做了以下工作:
CoreDNS
和 kube-proxy
清单,并强制创建所有必需的 RBAC 规则。kubeadm upgrade node
在其他控制平节点上执行以下操作:
ClusterConfiguration
。 kubeadm upgrade node
在工作节点上完成以下工作:
ClusterConfiguration
。