Debian上升级Kubernetes集群配置的标准流程
一 升级前准备
- 备份关键数据与清单:备份**/etc/kubernetes/与/var/lib/etcd/;如使用etcd**,建议用etcdctl snapshot save进行快照备份,确保可回滚。检查集群健康与节点状态,确保没有未完成的作业或长时间阻塞的任务。
- 系统与安全:执行sudo apt update && sudo apt upgrade -y更新系统包;确保禁用 Swap(swapoff -a 并注释 /etc/fstab 中的 swap 行),避免 kubelet 异常。
- 版本策略:遵循“一次只跨一个次要版本”的原则(如从1.28.x → 1.29.x),不要跨多个小版本;升级前阅读目标版本的发行说明与变更对 API/清单的影响。
- 运行时与网络:如使用Docker,注意自v1.24起移除 dockershim,建议迁移到containerd;确认CNI 网络插件与新版本兼容,并准备其升级步骤。
二 升级控制平面节点
- 升级 kubeadm:在 Debian 上通过 APT 升级到目标小版本的kubeadm(保持 kubelet/kubectl 暂不升级),或下载指定版本的 kubeadm 二进制替换。
- 检查升级计划:执行kubeadm upgrade plan,确认组件可升级到目标版本与所需变更。
- 执行控制面升级:运行kubeadm upgrade apply <目标版本>;如需临时跳过证书自动续期,可加**–certificate-renewal=false**(不建议生产长期使用)。
- 腾空与恢复节点:对控制面节点执行kubectl drain <节点名> --ignore-daemonsets,随后升级 kubelet/kubectl 并重启服务,最后**kubectl uncordon <节点名>**恢复调度。
- 多控制面:其余控制面节点执行kubeadm upgrade node,无需再次执行 plan 与 CNI 升级。
三 升级工作节点
- 逐节点滚动升级:每次只升级一个工作节点,升级期间保持集群可用容量。
- 标准步骤:
- 升级 kubeadm;
- kubectl drain <节点名> --ignore-daemonsets;
- 升级 kubelet/kubectl 并重启(systemctl daemon-reload && systemctl restart kubelet);
- **kubectl uncordon <节点名>**恢复调度。
- 验证:所有节点升级后,确认kubectl get nodes均为Ready。
四 升级后验证与常见问题
- 版本与组件:执行kubectl version --short与kubectl get pods -A检查控制面与系统组件运行状态;按需升级CoreDNS/kube-proxy清单与CNI 插件(如 Flannel/Calico),确保与podSubnet等配置一致。
- 证书检查:使用kubeadm alpha certs check-expiration(或新版本等效命令)查看证书有效期,必要时续期。
- 回滚与排障:若kubeadm upgrade apply失败,按提示回滚;常见原因包括镜像不可达、节点 NotReady、CNI 不兼容等,先恢复节点可调度并排查网络与镜像拉取问题。
五 变更配置的安全做法
- 使用 kubeadm 管理配置:通过kubeadm init phase upload-config与kubeadm upgrade应用配置变更,避免手工改动静态 Pod 清单;升级前后用kubectl -n kube-system get cm kubeadm-config -oyaml核对配置。
- 清单与 API 变更:升级后按新版本的API 变更调整 Deployment/Service/Ingress 等清单(如 apiVersion、字段弃用),先在测试环境验证。
- 扩缩容与版本对齐:新增节点应与集群目标小版本一致;升级窗口内避免并行大规模变更。