Linux Kubernetes 版本升级实操指南
一 升级策略与准备
- 升级路径与节奏:遵循“每次仅升级一个次要版本”的原则,例如从1.23 → 1.24 → 1.25,不可跨多个次要版本;控制平面与 kubelet 的版本偏差不得超过1个次要版本。落后多个版本时,先在测试环境演练并逐步递进。升级前在测试环境验证清单、控制器、存储与已弃用 API 的兼容性。
- 备份关键数据:备份 /etc/kubernetes/ 配置与 etcd 数据(示例:ETCDCTL_API=3 etcdctl snapshot save /data/etcd/etcd_bak.db --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);如有持久卷,建议用 Velero 做应用与 PV 级备份。
- 集群健康检查:确保控制平面组件 Running(kubectl get pods -n kube-system -l component=kube-apiserver)、所有节点 Ready(kubectl get nodes)、无异常 Pod(kubectl get pods -A --field-selector status.phase!=Running)。
- 组件与运行时兼容性:确认容器运行时与网络/存储插件的版本矩阵;例如 Kubernetes 1.25+ 建议使用 containerd 1.6+;网络插件如 Calico 3.24+、Flannel 0.20.0+ 对 1.25 有良好支持;kubectl 与集群版本相差不超过1个次要版本。
- 维护窗口与策略:采用滚动升级、逐节点腾空与恢复,尽量避开业务高峰;准备回滚方案(etcd 快照、应用与清单备份)。
二 使用 kubeadm 的标准升级流程
- 升级顺序:先控制平面,后工作节点;每个阶段完成后进行健康检查再进入下一步。
- 控制平面节点(以升级到 v1.25.0 为例,逐台 master 执行)
- 升级 kubeadm:yum install -y kubeadm-1.25.0-00 --disableexcludes=kubernetes
- 检查升级计划:kubeadm upgrade plan(确认可升级到的目标版本与变更)
- 执行升级:kubeadm upgrade apply v1.25.0
- 升级 kubelet 与 kubectl:yum install -y kubelet-1.25.0-00 kubectl-1.25.0-00 --disableexcludes=kubernetes;systemctl daemon-reload && systemctl restart kubelet
- 解除不可调度:kubectl uncordon
- 工作节点(逐个节点执行,保持业务连续性)
- 排空节点:kubectl drain --ignore-daemonsets --delete-emptydir-data
- 升级 kubeadm:yum install -y kubeadm-1.25.0-00 --disableexcludes=kubernetes
- 升级节点组件:kubeadm upgrade node
- 升级 kubelet 与 kubectl:同控制平面步骤并重启 kubelet
- 取消排空:kubectl uncordon
- 升级后验证:kubectl get nodes(全为 Ready)、kubectl get pods -A(无 CrashLoopBackOff/Error)、组件日志无异常(journalctl -u kubelet -f、-u kube-apiserver -f)。
三 二进制部署的平滑升级流程
- 适用场景:手动部署/非 kubeadm 管理的集群。
- 升级前:备份 /etc/kubernetes/ 与 /var/lib/etcd/;必要时用 etcdctl 做快照;确认集群健康。
- 控制平面节点(以升级到 v1.29.10 为例)
- 下载并替换二进制:wget https://dl.k8s.io/release/v1.29.10/bin/linux/amd64/{kubeadm,kubelet,kubectl};chmod +x;mv 到 /usr/local/bin/
- 检查升级计划:kubeadm version && kubeadm upgrade plan
- 执行控制平面升级:kubeadm upgrade apply v1.29.10
- 排空节点:kubectl drain --ignore-daemonsets
- 重启 kubelet:systemctl daemon-reload && systemctl restart kubelet
- 取消排空:kubectl uncordon
- 工作节点:逐台执行“排空 → 替换二进制 → kubeadm upgrade node → 重启 kubelet → 取消排空”,与 kubeadm 流程一致。
- 高可用提示:如有多 master,先升级非 VIP 持有者,通过 Keepalived/VIP 切换避免业务中断,逐台滚动完成。
四 升级后验证与回滚
- 快速健康检查:
- 节点与系统组件:kubectl get nodes;kubectl get pods -n kube-system
- 关键业务:访问入口服务、执行数据库/存储读写探测、检查 PV/PVC 挂载与伸缩
- 监控告警:关注 API 响应时延、节点资源使用率、网络连通性与 Pod 重启次数
- 回滚策略:
- 控制平面回滚:kubeadm upgrade apply <上一版本>(需有对应备份与可回滚清单)
- etcd 回滚:使用已保存的 etcd 快照恢复(先停控制平面,恢复快照后重启)
- 应用层回滚:Helm/Rollback、Deployment 回滚或 Velero 恢复
- 常见问题与要点:
- 版本偏差超限会导致组件异常,务必遵循“相邻次要版本”规则
- 升级网络/存储插件前,先查阅其版本兼容矩阵与升级指南
- 升级窗口内保持单节点维护,完成健康检查再处理下一节点。