温馨提示×

Kubernetes在Ubuntu上如何升级

小樊
33
2025-12-28 09:32:01
栏目: 智能运维

Ubuntu上使用 kubeadm 升级 Kubernetes 的标准流程

一 升级前准备

  • 备份关键数据与清单:导出集群资源清单与应用配置,备份 etcd(快照),记录当前 kubeadm 配置与静态 Pod 镜像版本,便于回滚与比对。
    示例:
    kubectl get nodes -o wide
    kubectl get pods -A -o yaml > backup-pods.yaml
    kubectl get cm -n kube-system kubeadm-config -o yaml > backup-kubeadm-config.yaml
    grep image: /etc/kubernetes/manifests/*.yaml
  • 检查版本与兼容性:确认升级路径与组件匹配。
    kubectl version --short
    kubeadm version

    查看可升级目标版本

    sudo kubeadm upgrade plan
  • 维护窗口与策略:生产环境建议按 PATCH → MINOR 节奏滚动升级,先控制面后工作节点,逐台节点操作,保持业务连续性。
  • 容器运行时就绪:确保 containerd/docker 与目标 Kubernetes 版本兼容并已升级到稳定版。
  • 源与版本锁定:配置可用的 APT 源(如官方或国内镜像),并使用 apt-mark hold/unhold 管理包版本,避免非计划升级。
    以上准备动作与命令示例可参考业内实践与升级经验。

二 控制平面升级(逐个控制面节点)

  • 将节点标记为不可调度并驱逐工作负载:
    kubectl cordon
    kubectl drain --ignore-daemonsets --delete-emptydir-data --force
  • 升级 kubeadm(解除锁定→安装→重新锁定):
    sudo apt-mark unhold kubeadm
    sudo apt-get update && sudo apt-get install -y kubeadm=<目标版本号>
    sudo apt-mark hold kubeadm
  • 验证升级计划并应用:
    kubeadm version
    sudo kubeadm upgrade plan

    如暂不升级 etcd,可加上:–etcd-upgrade=false

    sudo kubeadm upgrade apply <目标版本号> [–etcd-upgrade=false]
  • 升级 kubelet 与 kubectl(控制面节点):
    sudo apt-mark unhold kubelet kubectl
    sudo apt-get update && sudo apt-get install -y kubelet=<目标版本号> kubectl=<目标版本号>
    sudo apt-mark hold kubelet kubectl
    sudo systemctl daemon-reload && sudo systemctl restart kubelet
  • 恢复节点调度:
    kubectl uncordon
  • 多控制面节点:重复以上步骤,逐台升级,确保控制面组件版本完全一致。
    上述流程与命令示例适用于 Ubuntu 上的 kubeadm 集群升级。

三 工作节点升级(逐台滚动)

  • 隔离与排空节点:
    kubectl cordon
    kubectl drain --ignore-daemonsets --delete-emptydir-data --force
  • 升级 kubelet 与 kubectl:
    sudo apt-mark unhold kubelet kubectl
    sudo apt-get update && sudo apt-get install -y kubelet=<目标版本号> kubectl=<目标版本号>
    sudo apt-mark hold kubelet kubectl
    sudo systemctl daemon-reload && sudo systemctl restart kubelet
  • 恢复节点调度:
    kubectl uncordon
  • 依次对全部工作节点执行,直至集群所有节点版本一致或满足兼容性要求。
    以上节点升级“隔离-升级-恢复”的三步法与命令示例可直接用于生产滚动升级。

四 升级后验证与常见问题

  • 集群与节点状态:
    kubectl get nodes -o wide
    kubectl get pods -n kube-system
    kubectl version --short
    kubectl api-versions
  • 控制面健康:
    kubectl get --raw=‘/healthz’
  • 常见问题与处理:
    • 节点 NotReady:检查 kubelet 日志(journalctl -u kubelet -f)、容器运行时状态与镜像拉取情况。
    • 组件版本不一致:控制面组件必须同版本;kubelet 与控制面通常允许 ±1 个小版本差异,必要时对齐版本。
    • etcd 升级谨慎:如选择不随控制面升级 etcd(–etcd-upgrade=false),需单独制定 etcd 升级与回滚方案,并在升级前完成快照备份。
    • 升级失败回滚:使用已备份的 etcd 快照与 kubeadm 配置回滚,或按相反顺序降级相关组件版本。
      这些验证与排错要点可显著提升升级可控性与成功率。

0