Debian 上 Kubernetes 版本升级实操指南
一 升级前准备与版本规则
- 备份关键数据与配置:建议备份 /etc/kubernetes/ 与 etcd 数据(如使用外部 etcd,使用 etcdctl 快照),以便回滚。检查集群健康(节点 Ready、系统组件 Running、无异常 Pod)。
- 版本路径与限制:遵循“相邻次要版本递进”,不支持跨多个次要版本(如 1.22 → 1.24 不合法),通常支持跨 1 个大版本(如 1.19 → 1.20)。升级前阅读目标版本的发行说明与变更。
- 运行时与系统:确认容器运行时(如 containerd/Docker)与目标版本兼容;禁用 Swap;确保节点间网络与 API 访问通畅。
- 组件一致性:升级过程中保持 kubelet/kubeadm/kubectl 的版本关系合理,通常控制面与节点组件版本偏差不超过 1 个次要版本。
二 使用 kubeadm 的标准升级流程(Debian 包管理)
- 在所有节点准备新版本包(以目标版本为 v1.28.x 为例,具体以实际为准):
- 查询可用版本并选定目标补丁版本:
apt update && apt-cache policy kubeadm
- 升级 kubeadm(先解 hold,升级后再 hold):
apt-mark unhold kubeadm && apt-get install -y kubeadm=1.28.x-00 && apt-mark hold kubeadm
- 验证:kubeadm version
- 升级第一个控制平面节点:
- 检查升级计划:kubeadm upgrade plan(如需跳过证书自动续期,可加 –certificate-renewal=false)
- 执行升级:sudo kubeadm upgrade apply v1.28.x
- 升级其余控制平面节点(如为高可用):
- 腾空节点:kubectl drain --ignore-daemonsets
- 仅升级 kubeadm:apt-mark unhold kubeadm && apt-get install -y kubeadm=1.28.x-00 && apt-mark hold kubeadm
- 执行节点升级:sudo kubeadm upgrade node
- 升级 kubelet/kubectl:apt-mark unhold kubelet kubectl && apt-get install -y kubelet=1.28.x-00 kubectl=1.28.x-00 && apt-mark hold kubelet kubectl
- 重启 kubelet:systemctl daemon-reload && systemctl restart kubelet
- 解除封锁:kubectl uncordon
- 升级工作节点(逐台进行):
- 腾空:kubectl drain --ignore-daemonsets
- 升级 kubeadm(与当前控制面小版本一致):apt-mark unhold kubeadm && apt-get install -y kubeadm=1.28.x-00 && apt-mark hold kubeadm
- 执行节点升级:sudo kubeadm upgrade node
- 升级 kubelet/kubectl:apt-mark unhold kubelet kubectl && apt-get install -y kubelet=1.28.x-00 kubectl=1.28.x-00 && apt-mark hold kubelet kubectl
- 重启 kubelet:systemctl daemon-reload && systemctl restart kubelet
- 解除封锁:kubectl uncordon
- 升级 CNI 插件与附加组件:按所用网络/存储/监控等组件的官方说明执行对应版本升级(如 Calico/Flannel/Cilium、Ingress Controller、Metrics Server 等)。
三 升级后验证与常见问题
- 验证集群状态:
kubectl get nodes(所有节点应为 Ready)
kubectl get pods -A(关键系统组件 Running,无 CrashLoopBackOff/Error)
查看组件日志:journalctl -u kubelet -f(必要时排查 kube-apiserver/controller-manager/scheduler)
- 常见注意事项:
- 单节点集群无法在驱逐后调度 Pod,升级期间会出现短暂中断;生产环境建议至少 2 个节点 或具备 Pod 反亲和/拓扑分散策略。
- 升级会触发控制面与 kube-proxy 等组件重建,属于预期行为;确保业务有健康检查与副本数,降低感知。
- 若 kubeadm upgrade plan 提示需提供配置文件,使用 –config 传入并按提示调整;证书默认会自动续期,如特殊需求可用 –certificate-renewal=false。
- 升级完成后,按需更新 Helm Chart、准入控制器、OPA/Gatekeeper、日志与监控采集器等周边组件的版本以匹配新集群。
四 不通过包管理器的替代方式(仅当无法使用 apt 时)
- 使用官方二进制包直装(示例目标版本 v1.28.10):
- 下载并替换二进制:
wget https://dl.k8s.io/release/v1.28.10/bin/linux/amd64/{kubeadm,kubelet,kubectl}
chmod +x {kubeadm,kubelet,kubectl} && sudo mv {kubeadm,kubelet,kubectl} /usr/local/bin/
- 控制平面:kubeadm version && kubeadm upgrade plan && sudo kubeadm upgrade apply v1.28.10
- 工作节点:kubeadm upgrade node
- 重启 kubelet:systemctl daemon-reload && systemctl restart kubelet
- 节点维护:kubectl drain/uncordon
- 说明:直装方式便于精确控制版本,但后续安全更新与依赖管理需自行维护;优先推荐使用 Debian 官方仓库包 管理。