温馨提示×

怎样升级centos k8s系统

小樊
42
2025-11-22 04:15:24
栏目: 智能运维

CentOS 上 Kubernetes 升级实操指南

一 升级策略与准备

  • 升级顺序与节奏:遵循 控制平面 → 其余控制平面 → Worker 节点 的顺序,且通常只允许一次跨一个 次要版本(x.y → x.(y+1)),不可跨多个次版本;落后较多版本时需按序逐步升级。升级前务必做好 备份(如 etcd 快照、/etc/kubernetes 配置),并在升级窗口内保持集群健康与业务可容忍的短暂中断。对于生产环境,建议先在测试环境演练。
  • 版本与兼容检查:核对当前与目标版本,列出可用的 kubeadm 版本并安装目标版本;执行 kubeadm upgrade plan 预览升级路径与兼容性;确认 kubelet/kubectl 与目标版本一致;检查 内核/容器运行时/CNI 是否满足新版本要求;规划 网络插件(如 Calico、Flannel) 的兼容性更新。
  • 升级方式选择:在自建集群中常用 原地滚动升级;对稳定性要求极高的场景可采用 蓝/绿金丝雀 方式(创建新集群验证后再切换),但成本与协调复杂度更高。

二 原地升级步骤(kubeadm 方式)

  1. 备份与预检
  • 备份关键数据与配置:
    • etcd 快照etcdctl snapshot save /var/lib/etcd/backup/snapshot.db
    • kubeconfigcp /root/.kube/config /root/.kube/config.backup
    • 配置文件:/etc/kubernetes/ 目录
  • 预检:kubectl get nodes 确认所有节点 Ready;检查待升级版本是否可用:yum list --showduplicates kubeadm --disableexcludes=kubernetes
  1. 升级控制平面(首个控制平面节点)
  • 升级 kubeadm:
    • 查看可用版本并安装目标版本:yum install -y kubeadm-<version> --disableexcludes=kubernetes
  • 预览与执行升级计划:
    • kubeadm upgrade plan
    • kubeadm upgrade apply <target-version>(如 v1.28.3
  • 腾空节点并重启 kubelet:
    • kubectl drain <master-node> --ignore-daemonsets
    • systemctl daemon-reload && systemctl restart kubelet
    • kubectl uncordon <master-node>
  • 其余控制平面节点:重复上述步骤(先升级 kubeadm,再 kubeadm upgrade node,随后重启 kubelet 并解除封锁)。
  1. 升级工作节点(逐个进行)
  • 升级 kubelet/kubectl(与控制平面目标版本保持一致):
    • yum install -y kubelet-<version> kubectl-<version> --disableexcludes=kubernetes
  • 腾空、重启、恢复:
    • kubectl drain <worker-node> --ignore-daemonsets
    • systemctl daemon-reload && systemctl restart kubelet
    • kubectl uncordon <worker-node>
  • 建议逐台进行,升级期间保持业务副本数或 Pod 反亲和,避免服务中断。
  1. 升级后验证
  • 组件版本:kubectl version --shortkubectl get nodes -o wide
  • 系统组件:kubectl get pods -n kube-system
  • 网络与存储:确认 CNI 插件、CoreDNSkube-proxy 正常运行,业务 Pod 就绪。

三 升级方式与回退方案

  • 原地滚动升级:最常用、成本低,按节点逐步替换,适合多数自建集群;需确保应用具备 滚动更新反亲和/副本 能力。
  • 蓝/绿升级:新建 Green 集群验证新版本与基础设施变更,通过 DNS/LB 切换流量;回滚最快、成本最高,适合关键业务与跨多版本跃迁。
  • 金丝雀升级:在 Green 集群小流量验证,逐步扩大规模后切换;兼顾风险与成本,适合渐进式验证。

四 常见问题与排查要点

  • 版本不兼容或跳级:出现 “版本不兼容/不可升级” 时,回退到上一个可用 次版本,按序升级;例如从 1.23 → 1.24 → 1.25,不可直接 1.23 → 1.25
  • kubeadm 与组件版本不一致:确保 kubeadm/kubelet/kubectl 版本一致或满足兼容矩阵;必要时使用 yum install -y kubeadm-<version> --disableexcludes=kubernetes 精确指定版本。
  • 节点无法排空或 Pod 无法终止:检查 PodDisruptionBudgetDaemonSet、本地卷/HostPath 等阻止驱逐的因素;必要时临时调整策略或手动清理。
  • 网络插件异常:升级后 CNI 未就绪会导致 Pod 不通;按插件文档执行升级或重装,并重启相关 kube-proxyCoreDNS
  • 升级失败回退:若有 etcd 快照 与控制平面备份,可先恢复快照与配置,再回滚 kubeadm/kubelet 版本并重启服务;蓝/绿/金丝雀策略可直接切回旧集群。

0