Ubuntu Kubernetes 集群升级注意事项
导读:Ubuntu 上 Kubernetes 集群升级注意事项 一 版本与路径规划 明确目标版本后,遵循“每次仅升级一个次要版本”的原则,例如从 v1.28 → v1.29 → v1.30;跨多个次要版本直接升级不被支持。升级前阅读目标版本的...
Ubuntu 上 Kubernetes 集群升级注意事项
一 版本与路径规划
- 明确目标版本后,遵循“每次仅升级一个次要版本”的原则,例如从 v1.28 → v1.29 → v1.30;跨多个次要版本直接升级不被支持。升级前阅读目标版本的 Release Notes / 变更日志,关注 Deprecations / Removals。
- 遵守组件版本偏差策略:kubelet 不得高于 kube-apiserver;通常要求 kubelet 与 apiserver 的小版本差不超过 1;多个 apiserver 实例间版本差不超过 1;kubectl 与 apiserver 的差距通常不超过 1 个次要版本。
- 在 Ubuntu 上用包管理器确认可用补丁版本:执行 apt update & & apt-cache madison kubeadm,选择形如 1.29.x-00 的目标版本,避免误装跨主次版本包。
二 升级前检查与备份
- 集群健康检查:确认所有节点 Ready、核心组件 Running,检查 etcd 集群健康与数据一致性,评估工作负载与 存储/网络 的兼容性(如 emptyDir 在驱逐时的数据风险)。
- 备份关键数据与配置:
- 备份 etcd(示例):
ETCDCTL_API=3 etcdctl snapshot save /tmp/etcd-backup.db \ –endpoints=https://127.0.0.1:2379 \ –cacert= --cert= --key= - 备份 /etc/kubernetes 目录(包含集群配置与证书)。
- 备份 etcd(示例):
- 基础设施与系统:确保 NTP 同步、防火墙/安全组策略允许 6443/10250 等端口、swap 已禁用,并准备回滚方案(如回滚包版本、恢复备份、回滚清单)。
三 升级顺序与操作步骤
- 总体顺序:先控制平面,后工作节点;逐个节点进行,升级期间保持集群可用的最小副本数。
- 控制平面节点(首个):
- 标记维护:kubectl cordon ;如该节点也跑业务负载,执行 kubectl drain --ignore-daemonsets。
- 升级 kubeadm:apt-mark unhold kubeadm & & apt-get install -y kubeadm=< 目标版本> & & apt-mark hold kubeadm。
- 检查与执行:kubeadm upgrade plan;随后 kubeadm upgrade apply < 目标版本> (会自动处理控制面静态 Pod 与证书续期,如需跳过证书续期可用 –certificate-renewal=false)。
- 升级 kubelet/kubectl:apt-mark unhold kubelet kubectl & & apt-get install -y kubelet=< 目标版本> kubectl=< 目标版本> & & apt-mark hold kubelet kubectl。
- 重启 kubelet:systemctl daemon-reload & & systemctl restart kubelet;kubectl uncordon 恢复调度。
- 其他控制平面节点:执行 kubeadm upgrade node(无需再执行 plan 与 CNI 升级)。
- 工作节点:与控制面节点类似,先 cordon/drain,再升级 kubeadm/kubelet/kubectl 并 restart kubelet,最后 uncordon。
- 组件与插件:按各组件文档升级 CNI、CSI、Ingress Controller、CoreDNS 等,确保与目标版本兼容。
四 兼容性风险与验证
- API 弃用与 Helm:升级后若遇到类似 “no matches for kind … in version …” 的错误,说明清单使用了已被移除/弃用的 API 版本。建议在升级前用 kubectl api-resources、helm lint --strict、helm template --validate --kube-version < 目标版本> 做静态与模拟校验,并按需迁移到 apps/v1、networking.k8s.io/v1 等稳定版本。
- 清单与控制器:升级 kubeadm 不会自动改写你的业务清单;对使用旧 API 的资源,可用 kubectl convert 辅助迁移,并在 CI 中固化版本校验。
- 升级后验证:逐节点确认 STATUS=Ready 且 VERSION 正确;检查 kube-system 核心组件 Running;查看 kubelet 日志(journalctl -xeu kubelet);验证关键业务与存储卷可用性。
五 回滚与常见坑
- 回滚策略:若升级失败,优先恢复到升级前备份(如 etcd 快照、/etc/kubernetes 配置),并将 kubeadm/kubelet/kubectl 降级到原版本,重启服务后重新加入集群。
- 常见坑与规避:
- 禁止跨多个次要版本升级;控制面与 kubelet 版本偏差超限会导致不可预期问题。
- 节点维护务必 cordon/drain,并处理好 emptyDir 与本地卷数据风险。
- 升级期间避免同时操作多个节点,防止控制面或工作负载容量不足。
- 包被 hold 导致无法升级时,使用 –allow-change-held-packages 或先解除 hold。
- 单节点集群无法在驱逐后调度 Pod,升级会短时中断业务,需提前评估或准备替代节点。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Kubernetes 集群升级注意事项
本文地址: https://pptw.com/jishu/784468.html
