实验拓扑规划:
- Master 节点:
192.168.44.121(Hostname:master) - Worker 节点 1:
192.168.44.122(Hostname:node1) - Worker 节点 2:
192.168.44.123(Hostname:node2)
当前版本 v1.29.15,目标版本 v1.30.14),升级必须遵循**先控制平面(Master),后工作节点(Worker)**的铁律。且不能跨次版本升级,比如 1.29 升到 1.31,必须经过 1.30。
整体步骤:
阶段一
1. 修改 Yum 源并更新缓存
2. 查找可用的目标版本
3. 安装选定版本的 kubeadm
4. 腾空(Drain)Master 节点
5. 评估并执行集群配置升级
6. 升级 kubelet 与 kubectl
7. 恢复节点调度
阶段二:升级 Worker 节点 (以 node1 为例,192.168.44.122)
1. 腾空(Drain)Worker 节点
2. 修改 Yum 源并更新缓存
3. 查找可用的目标版本
4. 安装选定版本的 kubeadm
6. 升级 kubelet 与 kubectl
7. 恢复节点调度
# 阶段一:升级 Master 节点
所有操作均在 master 节点执行。
1. 修改 Yum 源并更新缓存
查看当前版本:
kubectl get nodes
确定当前 yum 源里 kubeadm 可用版本:
sudo yum list --showduplicates kubeadm --disableexcludes=kubernetes
由于跨了次版本(1.29 -> 1.30),必须先修改仓库地址:
sudo sed -i 's/v1.29/v1.30/g' /etc/yum.repos.d/kubernetes.repo
sudo yum clean all
sudo yum makecache
这是因为 Kubernetes 自 1.28 版本起更改了软件包仓库的结构。现在官方推荐(甚至强制)为每一个次版本使用独立的仓库路径。
见官方文档更改 Kubernetes 软件包仓库
2. 升级 kubeadm 查找并安装 1.30 系列的指定版本:
sudo yum install -y kubeadm-1.30.14-150500.1.1 --disableexcludes=kubernetes
kubeadm version
3. 腾空(Drain)Master 节点
设置节点为不可调度并防止 PDB 或临时存储导致命令卡死:
kubectl drain master --ignore-daemonsets --delete-emptydir-data --force
4. 执行集群升级
让 kubeadm 拉取新镜像并更新控制平面组件:
sudo kubeadm upgrade plan
sudo kubeadm upgrade apply v1.30.14
5. 升级 kubelet 与 kubectl
更新底层运行环境并重启服务:
sudo yum install -y kubelet-1.30.14-150500.1.1 kubectl-1.30.14-150500.1.1 --disableexcludes=kubernetes
sudo systemctl daemon-reload
sudo systemctl restart kubelet
6. 恢复节点调度 解除隔离,让 master 节点重新上线:
kubectl uncordon master
# 阶段二:升级 Worker 节点 (以 node1 为例)
升级工作节点需要在 Master 和 Worker 终端之间切换。
1. 腾空工作节点(在 master 节点执行) 安全驱逐业务 Pod:
kubectl drain node1 --ignore-daemonsets --delete-emptydir-data --force
2. 修改源并升级 kubeadm(SSH 登录到 node1 192.168.44.122 执行)
sudo sed -i 's/v1.29/v1.30/g' /etc/yum.repos.d/kubernetes.repo
sudo yum clean all && sudo yum makecache
sudo yum install -y kubeadm-1.30.14-150500.1.1 --disableexcludes=kubernetes
3. 执行节点配置升级(在 node1 节点执行)
注意这里使用的是 node 命令:
sudo kubeadm upgrade node
4. 升级 kubelet 与 kubectl(在 node1 节点执行)
sudo yum install -y kubelet-1.30.14-150500.1.1 kubectl-1.30.14-150500.1.1 --disableexcludes=kubernetes
sudo systemctl daemon-reload
sudo systemctl restart kubelet
5. 恢复节点调度(切回 master 节点执行)
kubectl uncordon node1
对 node2 (192.168.44.123) 重复上述阶段二的 5 个步骤,只需将命令中的 node1 替换为 node2 即可。
完成以上所有步骤后,在 master 节点运行 kubectl get nodes,将看到全员 v1.30.14 且状态为 Ready 的集群。