Debian升级Kubernetes集群的标准流程
一 升级前准备
- 明确升级路径:Kubernetes社区大约每4个月发布一个次要版本,生产环境应优先选择仍在维护的版本,并遵循“逐级升级、不跨多个版本”的原则。若当前版本已停止维护,建议尽快规划升级至受支持版本。升级顺序为:先控制平面,后工作节点。
- 备份关键数据与配置:备份**/etc/kubernetes/、/var/lib/etcd/,并使用etcdctl对etcd做快照;同时备份kubeconfig**。
- 检查集群健康:确保节点状态Ready、关键系统组件运行正常、无Pending的升级任务或变更。
- 维护窗口与流量治理:为控制面与节点滚动留出维护窗口;为关键应用配置**PodDisruptionBudget(PDB)**与就绪探针,确保驱逐时仍可对外服务。
- 升级依赖与组件:在Debian节点上先执行系统更新(如apt update/upgrade),并确认容器运行时(如 containerd)与目标K8s版本兼容。
二 使用kubeadm就地升级步骤
- 控制平面节点(逐个升级,若为HA需逐台进行)
- 安装目标版本的kubeadm:apt-get update && apt-get install -y kubeadm=<目标版本>
- 检查升级计划:kubeadm upgrade plan <目标版本>
- 腾空控制面节点:kubectl drain <控制面节点名> --ignore-daemonsets
- 执行升级:kubeadm upgrade apply <目标版本>
- 升级kubelet与kubectl:apt-get install -y kubelet=<目标版本> kubectl=<目标版本>
- 重启kubelet:systemctl daemon-reload && systemctl restart kubelet
- 解除封锁:kubectl uncordon <控制面节点名>
- 工作节点(逐台滚动升级)
- 腾空节点:kubectl drain <节点名> --ignore-daemonsets
- 安装目标版本的kubeadm(与当前控制面一致的次要版本)
- 执行节点升级准备:kubeadm upgrade node
- 升级kubelet与kubectl:apt-get install -y kubelet=<目标版本> kubectl=<目标版本>
- 重启kubelet:systemctl daemon-reload && systemctl restart kubelet
- 解除封锁:kubectl uncordon <节点名>
- 验证:在各节点与集群层面检查组件版本与状态(如 kubectl version、kubectl get nodes、kubectl get pods -A)。
三 升级后的验证与回滚要点
- 版本与就绪性:确认控制面与节点版本达到目标版本,所有节点Ready,系统组件Running。
- 工作负载稳定性:观察核心应用的Pod是否全部就绪,业务指标与日志无异常告警。
- 网络与存储:确认CNI插件与CSI驱动与目标K8s版本兼容并已升级;验证跨节点与跨命名空间的网络连通性、持久卷挂载正常。
- 回滚策略:若升级失败或出现异常,优先基于备份与快照回滚;kubeadm的升级是不可逆操作,务必在升级前完成etcd与配置备份,并在测试环境充分演练。
四 常见注意事项与替代方案
- 版本支持与节奏:避免跨多个次要版本升级,优先选择仍在维护的版本;升级前阅读目标版本的变更说明与弃用API清单。
- 插件与扩展:确保CNI/CSI/Ingress Controller/Operator等与目标K8s版本兼容,必要时先行升级。
- 节点升级策略:除“就地升级”外,可采用“蓝绿/新建集群迁移”方式,先搭建新版本集群、逐步迁移工作负载,再下线旧集群,以降低风险。
- 高可用与PDB:为关键应用设置合理的PDB与就绪/存活探针,在节点排空与升级过程中保障最低可用实例数。