问题描述
在升级 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 服务或重启整个集群来解决问题。请在执行任何操作之前做好备份和风险评估。