温馨提示×

Linux下K8S如何进行版本升级

小樊
32
2026-01-01 01:52:54
栏目: 智能运维

Linux下Kubernetes版本升级实操指南

一 升级总览与准备

  • 升级原则与路径
    • 采用“相邻次要版本递进”策略,例如:v1.24.x → v1.25.y → v1.26.z;不建议跨多个次要版本跳跃。升级前通过 kubeadm upgrade plan 确认可升级到的目标版本与变更点。
  • 备份与回滚点
    • 备份控制面配置与证书:/etc/kubernetes/;备份 etcd 数据(示例):
      • ETCDCTL_API=3 etcdctl snapshot save /data/etcd/etcd_bak.db
        –endpoints=https://127.0.0.1:2379
        –cacert=/etc/kubernetes/pki/etcd/ca.crt
        –cert=/etc/kubernetes/pki/etcd/server.crt
        –key=/etc/kubernetes/pki/etcd/server.key
    • 确认集群健康:kubectl get nodeskubectl get pods -A 均为正常;如有 PodDisruptionBudget有状态服务,提前评估可中断窗口与替代节点容量。
  • 高可用与维护窗口
    • Master 场景建议通过 HAProxy/Keepalived 对外暴露 VIP;升级单个 Master 时将其从 VIP 后端摘除,避免业务流量打入。
  • 兼容性核对
    • 容器运行时、网络插件、存储插件、Ingress、监控告警等需与目标 K8s 版本兼容;必要时先升级周边组件。

二 使用 kubeadm 的标准升级流程

  • 控制平面升级(以第一个 Master 为例)
    1. 在所有 Master 上升级 kubeadm(示例目标版本:v1.29.10
      • CentOS/RHEL:yum install -y kubeadm-1.29.10-00 --disableexcludes=kubernetes
      • 验证:kubeadm version
    2. 检查升级计划:kubeadm upgrade plan
    3. 执行控制面升级:kubeadm upgrade apply v1.29.10(可按需加 --v=5 查看详细日志;如需跳过证书自动续期,加 --certificate-renewal=false)
    4. 腾空当前 Master:kubectl drain --ignore-daemonsets
    5. 升级 kubeletkubectl(同版本):yum install -y kubelet-1.29.10-00 kubectl-1.29.10-00 --disableexcludes=kubernetes
    6. 重启 kubelet:systemctl daemon-reload && systemctl restart kubelet
    7. 恢复调度:kubectl uncordon
    8. 其余 Master 节点:重复 1、2 步后执行 kubeadm upgrade node,再按 4–7 步升级 kubelet/kubectl 并恢复调度
  • 工作节点升级
    1. 逐个节点操作(避免一次性腾空过多节点)
    2. 腾空节点:kubectl drain --ignore-daemonsets
    3. 升级 kubelet/kubectl(与集群目标版本一致)
    4. 重启 kubelet:systemctl daemon-reload && systemctl restart kubelet
    5. 恢复调度:kubectl uncordon
    6. 等待节点 Ready、工作负载恢复后再处理下一个节点
  • 升级后验证
    • 节点与系统组件:kubectl get nodes;kubectl get pods -n kube-system
    • 控制面健康:kubectl get cs;如有 controller-manager/scheduler 状态异常,检查静态 Pod 清单端口配置并重启 kubelet(常见为将 manifests 中 –port=0 注释后重启 kubelet)

三 二进制部署或特殊场景

  • 二进制方式(非 kubeadm)
    • 逐节点停业务后升级控制面组件二进制(如 kube-apiserver、kube-controller-manager、kube-scheduler),再升级 kubelet/kubectl 并重启;HA 场景注意先摘除 VIP 或调整 Keepalived/HAProxy 后端。升级前同样做好 /etc/kubernetes/etcd 的备份。
  • 单节点集群
    • 驱逐会导致业务短暂中断(无其它节点可调度),请在维护窗口内执行,或先扩容节点再升级。

四 常见问题与回滚

  • 证书与端口
    • kubeadm 升级会自动续期控制面临时证书;如需手动控制,可使用 –certificate-renewal=false。若 kubectl get cs 显示 controller-manager/scheduler 不健康,检查 /etc/kubernetes/manifests/–port=0 配置并重启 kubelet。
  • 版本兼容与工具链
    • 保持 kubectl 与集群版本相差不超过 1 个次要版本;升级 kube-proxy 使其不高于 kube-apiserver;容器运行时、网络/存储插件与目标 K8s 版本匹配。
  • 回滚策略
    • 控制面回滚:优先使用已备份的 etcd 快照恢复(停机窗口内执行),再按备份的 /etc/kubernetes/ 配置回滚组件版本;数据面回滚:将节点重新 drain、降级 kubelet/kubectl 并重启,随后 uncordon 恢复。

0