温馨提示×

Debian如何进行K8S的版本升级

小樊
35
2025-12-13 03:38:28
栏目: 智能运维

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 为例,具体以实际为准):
    1. 查询可用版本并选定目标补丁版本:
      apt update && apt-cache policy kubeadm
    2. 升级 kubeadm(先解 hold,升级后再 hold):
      apt-mark unhold kubeadm && apt-get install -y kubeadm=1.28.x-00 && apt-mark hold kubeadm
    3. 验证:kubeadm version
  • 升级第一个控制平面节点:
    1. 检查升级计划:kubeadm upgrade plan(如需跳过证书自动续期,可加 –certificate-renewal=false
    2. 执行升级:sudo kubeadm upgrade apply v1.28.x
  • 升级其余控制平面节点(如为高可用):
    1. 腾空节点:kubectl drain --ignore-daemonsets
    2. 仅升级 kubeadm:apt-mark unhold kubeadm && apt-get install -y kubeadm=1.28.x-00 && apt-mark hold kubeadm
    3. 执行节点升级:sudo kubeadm upgrade node
    4. 升级 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
    5. 重启 kubelet:systemctl daemon-reload && systemctl restart kubelet
    6. 解除封锁:kubectl uncordon
  • 升级工作节点(逐台进行):
    1. 腾空:kubectl drain --ignore-daemonsets
    2. 升级 kubeadm(与当前控制面小版本一致):apt-mark unhold kubeadm && apt-get install -y kubeadm=1.28.x-00 && apt-mark hold kubeadm
    3. 执行节点升级:sudo kubeadm upgrade node
    4. 升级 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
    5. 重启 kubelet:systemctl daemon-reload && systemctl restart kubelet
    6. 解除封锁:kubectl uncordon
  • 升级 CNI 插件与附加组件:按所用网络/存储/监控等组件的官方说明执行对应版本升级(如 Calico/Flannel/CiliumIngress ControllerMetrics 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):
    1. 下载并替换二进制:
      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/
    2. 控制平面:kubeadm version && kubeadm upgrade plan && sudo kubeadm upgrade apply v1.28.10
    3. 工作节点:kubeadm upgrade node
    4. 重启 kubelet:systemctl daemon-reload && systemctl restart kubelet
    5. 节点维护:kubectl drain/uncordon
  • 说明:直装方式便于精确控制版本,但后续安全更新与依赖管理需自行维护;优先推荐使用 Debian 官方仓库包 管理。

0