温馨提示×

Ubuntu Kubernetes 集群升级注意事项

小樊
43
2025-12-30 08:40:08
栏目: 智能运维

Ubuntu 上 Kubernetes 集群升级注意事项

一 版本与路径规划

  • 明确目标版本后,遵循“每次仅升级一个次要版本”的原则,例如从 v1.28 → v1.29 → v1.30;跨多个次要版本直接升级不被支持。升级前阅读目标版本的 Release Notes / 变更日志,关注 Deprecations / Removals
  • 遵守组件版本偏差策略:kubelet 不得高于 kube-apiserver;通常要求 kubelet 与 apiserver 的小版本差不超过 1;多个 apiserver 实例间版本差不超过 1kubectl 与 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 目录(包含集群配置与证书)。
  • 基础设施与系统:确保 NTP 同步防火墙/安全组策略允许 6443/10250 等端口、swap 已禁用,并准备回滚方案(如回滚包版本、恢复备份、回滚清单)。

三 升级顺序与操作步骤

  • 总体顺序:先控制平面,后工作节点;逐个节点进行,升级期间保持集群可用的最小副本数。
  • 控制平面节点(首个):
    1. 标记维护:kubectl cordon ;如该节点也跑业务负载,执行 kubectl drain --ignore-daemonsets。
    2. 升级 kubeadm:apt-mark unhold kubeadm && apt-get install -y kubeadm=<目标版本> && apt-mark hold kubeadm。
    3. 检查与执行:kubeadm upgrade plan;随后 kubeadm upgrade apply <目标版本>(会自动处理控制面静态 Pod 与证书续期,如需跳过证书续期可用 –certificate-renewal=false)。
    4. 升级 kubelet/kubectl:apt-mark unhold kubelet kubectl && apt-get install -y kubelet=<目标版本> kubectl=<目标版本> && apt-mark hold kubelet kubectl。
    5. 重启 kubelet:systemctl daemon-reload && systemctl restart kubelet;kubectl uncordon 恢复调度。
  • 其他控制平面节点:执行 kubeadm upgrade node(无需再执行 plan 与 CNI 升级)。
  • 工作节点:与控制面节点类似,先 cordon/drain,再升级 kubeadm/kubelet/kubectlrestart kubelet,最后 uncordon
  • 组件与插件:按各组件文档升级 CNI、CSI、Ingress Controller、CoreDNS 等,确保与目标版本兼容。

四 兼容性风险与验证

  • API 弃用与 Helm:升级后若遇到类似 “no matches for kind … in version …” 的错误,说明清单使用了已被移除/弃用的 API 版本。建议在升级前用 kubectl api-resourceshelm lint --stricthelm template --validate --kube-version <目标版本> 做静态与模拟校验,并按需迁移到 apps/v1、networking.k8s.io/v1 等稳定版本。
  • 清单与控制器:升级 kubeadm 不会自动改写你的业务清单;对使用旧 API 的资源,可用 kubectl convert 辅助迁移,并在 CI 中固化版本校验。
  • 升级后验证:逐节点确认 STATUS=ReadyVERSION 正确;检查 kube-system 核心组件 Running;查看 kubelet 日志(journalctl -xeu kubelet);验证关键业务与存储卷可用性。

五 回滚与常见坑

  • 回滚策略:若升级失败,优先恢复到升级前备份(如 etcd 快照/etc/kubernetes 配置),并将 kubeadm/kubelet/kubectl 降级到原版本,重启服务后重新加入集群。
  • 常见坑与规避:
    • 禁止跨多个次要版本升级;控制面与 kubelet 版本偏差超限会导致不可预期问题。
    • 节点维护务必 cordon/drain,并处理好 emptyDir 与本地卷数据风险。
    • 升级期间避免同时操作多个节点,防止控制面或工作负载容量不足。
    • 包被 hold 导致无法升级时,使用 –allow-change-held-packages 或先解除 hold。
    • 单节点集群无法在驱逐后调度 Pod,升级会短时中断业务,需提前评估或准备替代节点。

0