升级 Kubernetes 集群版本

111次阅读
没有评论

问题描述

在升级 Kubernetes 集群版本时遇到了问题。他已经成功将集群升级到了 1.22.7 版本,并通过 kubectl get nodes 命令确认了节点的版本。现在他想将集群升级到 1.23.7 版本,按照以下步骤在主节点和所有工作节点上进行了操作:
sudo apt-mark unhold kubeadm && sudo apt-get update && sudo apt-get install -y kubeadm=1.23.7-00 && sudo apt-mark hold kubeadm
sudo kubeadm upgrade node(在主节点上执行升级计划/应用)
sudo apt-mark unhold kubeadm && sudo apt-get update && sudo apt-get install -y kubelet=1.23.7-00 && sudo apt-mark hold kubelet
sudo systemctl daemon-reload
sudo systemctl restart kubelet

通过 kubeadm version 命令确认 kubeadm 已经成功安装了新版本:

kubeadm version: Major:"1", Minor:"23", GitVersion:"v1.23.7"

通过 kubectl -n kube-system edit cm kubeadm-config 命令确认 kubernetesVersion 已经更新为 v1.23.7。

但是,当用户执行 kubectl get nodes 命令时,仍然显示旧版本 1.22.7:

ubd   Ready                                       223d   v1.22.7

用户想知道为什么其他命令(如 kubeadm version)显示的是新版本,而 kubectl get nodes 命令显示的是旧版本。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在升级 Kubernetes 集群版本时,需要确保所有节点都成功升级。根据用户提供的信息,可能是因为 kubelet 服务没有重新启动导致节点版本没有更新。

以下是解决问题的步骤:
1. 在所有节点上执行以下命令,以确保 kubelet 服务已经停止:
sudo systemctl stop kubelet
2. 在所有节点上执行以下命令,以升级 kubelet:
sudo apt-mark unhold kubelet && sudo apt-get update && sudo apt-get install -y kubelet=1.23.7-00 && sudo apt-mark hold kubelet
3. 在所有节点上执行以下命令,以重新加载 systemd 配置:
sudo systemctl daemon-reload
4. 在所有节点上执行以下命令,以重新启动 kubelet 服务:
sudo systemctl restart kubelet
5. 等待一段时间,然后再次执行 kubectl get nodes 命令,确认节点的版本已经更新。

方案2

如果方案1没有解决问题,可以尝试重启整个集群来确保所有节点都以新版本运行。请注意,这可能会导致集群中的一些服务中断,请在执行此操作之前确保已经做好了备份和风险评估。

以下是解决问题的步骤:
1. 在所有节点上执行以下命令,以确保 kubelet 服务已经停止:
sudo systemctl stop kubelet
2. 在所有节点上执行以下命令,以升级 kubelet:
sudo apt-mark unhold kubelet && sudo apt-get update && sudo apt-get install -y kubelet=1.23.7-00 && sudo apt-mark hold kubelet
3. 在所有节点上执行以下命令,以重新加载 systemd 配置:
sudo systemctl daemon-reload
4. 在所有节点上执行以下命令,以重新启动 kubelet 服务:
sudo systemctl restart kubelet
5. 在所有节点上执行以下命令,以确保所有节点都已经停止:
sudo kubectl drain <node-name> --ignore-daemonsets
其中 <node-name> 是节点的名称,需要逐个节点执行此命令。
6. 在所有节点上执行以下命令,以重新启动节点:
sudo kubectl uncordon <node-name>
其中 <node-name> 是节点的名称,需要逐个节点执行此命令。
7. 等待一段时间,然后再次执行 kubectl get nodes 命令,确认节点的版本已经更新。

请注意,方案2可能会导致集群中的一些服务中断,请在执行此操作之前确保已经做好了备份和风险评估。

总结

在升级 Kubernetes 集群版本时,需要确保所有节点都成功升级。如果节点版本没有更新,可能是因为 kubelet 服务没有重新启动。可以尝试重新启动 kubelet 服务或重启整个集群来解决问题。请在执行任何操作之前做好备份和风险评估。

正文完