实验拓扑规划:

  • 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 的集群。