实用百科通
霓虹主题四 · 更硬核的阅读氛围

Kubernetes集群升级实战指南

发布时间:2025-12-09 07:53:20 阅读:354 次

为什么要进行ref="/tag/2020/" style="color:#E3A3CF;font-weight:bold;">Kubernetes集群升级

在实际运维中,Kubernetes版本更新频繁,新版本往往带来更好的性能、安全修复和新功能。比如某次生产环境出现了Pod调度延迟的问题,排查后发现是旧版本kube-scheduler的一个已知缺陷,升级到v1.27后问题自动消失。这类情况并不少见,定期升级集群成了保障服务稳定运行的必要操作。

另外,社区对旧版本的支持周期有限,超过Support Window的版本不再接收补丁,继续使用等于把系统暴露在风险之中。

升级前的准备工作

升级不是点一下按钮就完事的事。先检查当前集群状态,确保所有节点都处于Ready状态,没有异常Pod堆积。可以通过以下命令查看:

kubectl get nodes
kubectl get pods -A | grep -v Running

如果有大量CrashLoopBackOff状态的Pod,得先解决这些问题再考虑升级,否则容易引发连锁故障。

备份etcd数据是必须步骤。虽然控制平面组件有高可用设计,但人为误操作或兼容性问题仍可能导致数据不一致。使用静态二进制部署的集群可以执行:

ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save /backup/etcd-snapshot.db

选择合适的升级路径

Kubernetes官方规定不能跨两个小版本直接升级。比如从v1.24直接跳到v1.27是不允许的,必须按v1.25 → v1.26 → v1.27顺序逐步推进。

如果是用kubeadm搭建的集群,可通过以下命令查询推荐升级目标:

kubeadm upgrade plan

输出会列出当前支持的最新版本,并提示是否需要更新kubeadm工具本身。记得先升级master节点上的kubeadm,再执行具体升级动作。

控制平面节点升级

以升级到v1.27.0为例:

sudo apt-get update && sudo apt-get install kubeadm=1.27.0-00
sudo kubeadm upgrade apply v1.27.0

这个过程会自动校验组件配置、生成新证书(如有需要)、更新静态Pod清单文件。完成后别忘了升级kubelet和kubectl:

sudo apt-get install kubelet=1.27.0-00 kubectl=1.27.0-00
sudo systemctl restart kubelet

工作节点逐个滚动更新

控制平面升级完后,开始处理worker节点。为避免业务中断,应逐个节点执行驱逐和重启。

先将节点标记为不可调度:

kubectl drain <node-name> --ignore-daemonsets --timeout=60s

然后登录对应机器,执行kubeadm升级:

sudo apt-get install kubeadm=1.27.0-00
sudo kubeadm upgrade node
sudo apt-get install kubelet=1.27.0-00
sudo systemctl restart kubelet

重启完成后,回到主控节点解除封锁:

kubectl uncordon <node-name>

等该节点恢复正常后再处理下一个,形成滚动更新节奏。

验证升级结果

全部节点升级完毕后,再次运行kubectl get nodes确认版本号统一,同时观察监控面板中的API延迟、Pod启动时间等关键指标是否有异常波动。

部署一个测试Deployment来验证调度和网络是否正常:

kubectl create deploy nginx-test --image=nginx:alpine --replicas=3
kubectl expose deploy nginx-test --port=80

如果新Pod能顺利拉取镜像、分配IP、进入Running状态,说明核心链路通畅。