在 Huawei DCS 上升级 Kubernetes

本指南说明如何完成 Huawei DCS 集群升级工作流的第 2 阶段。在升级 Kubernetes 之前,请先完成 Upgrading Clusters 中描述的 Distribution Version 升级。

升级顺序

按照以下顺序升级 DCS 集群:

  1. 升级 Distribution Version(Aligned Extensions)。请参见 Upgrading Distribution Version
  2. 升级控制平面 Kubernetes 版本。
  3. 将工作节点升级到目标 Kubernetes 版本。

Cluster API 使用内置的安全机制编排滚动更新,以减少服务中断。

前提条件

开始之前,请确保满足以下所有前提条件:

  • Distribution Version 升级已完成
  • 控制平面可访问
  • 所有节点均健康且处于 Ready 状态
  • IP Pool 有足够的容量支持滚动更新
  • VM 模板支持目标 Kubernetes 版本。版本映射请参见 OS Support Matrix
  • 目标 Kubernetes 版本与您的工作负载和附加组件兼容
WARNING

升级期间的数据丢失

升级依赖 Cluster API 的滚动更新机制。在 DCS 上执行滚动更新时,数据盘会从旧 VM 分离并重新挂载到新 VM。请确保没有集群功能或工作负载依赖系统盘上存储的数据。

使用 YAML

基于 YAML 的升级不依赖 Fleet Essentials。

升级控制平面基础设施

升级控制平面 machine template 允许您发布更新后的 VM 规格、系统补丁和基础设施设置。

操作步骤

  1. 创建更新后的 machine template

    KubeadmControlPlane 引用的现有 DCSMachineTemplate 复制并保存为新文件:

    kubectl get dcsmachinetemplate <current-template-name> -n cpaas-system -o yaml > new-cp-template.yaml
  2. 修改模板规格

    按需更新新模板:

    • metadata.name 设置为 <new-template-name>
    • 更新 spec.template.spec.vmTemplateName
    • 更新 spec.template.spec.vmConfig.dcsMachineCpuSpec.quantity
    • 更新 spec.template.spec.vmConfig.dcsMachineMemorySpec.quantity
    • 更新 spec.template.spec.vmConfig.dcsMachineDiskSpec
  3. 应用更新后的模板

    kubectl apply -f new-cp-template.yaml -n cpaas-system
  4. 更新控制平面引用

    修改 KubeadmControlPlane 资源以引用新模板:

    kubectl patch kubeadmcontrolplane <kcp-name> -n cpaas-system --type='merge' -p='{"spec":{"machineTemplate":{"infrastructureRef":{"name":"<new-template-name>"}}}}'
  5. 监控滚动更新

    kubectl get kubeadmcontrolplane <kcp-name> -n cpaas-system -w
    kubectl get machines -n cpaas-system -l cluster.x-k8s.io/control-plane

升级控制平面 Kubernetes 版本

升级控制平面 Kubernetes 版本需要兼容的 VM 模板以及更新后的 KubeadmControlPlane 版本。

操作步骤

  1. 准备兼容的 VM 模板

    确保所引用的 DCSMachineTemplate 使用的 vmTemplateName 与目标 Kubernetes 版本匹配。

  2. 更新控制平面版本

    修改 KubeadmControlPlane 资源中的 spec.version。您也可以同时更新相关的 rollout 设置,或引用的基础设施模板,以符合您的升级策略。

  3. 监控升级

    kubectl get kubeadmcontrolplane <kcp-name> -n cpaas-system
    kubectl get machines -n cpaas-system -l cluster.x-k8s.io/control-plane
    kubectl get nodes

升级工作节点

工作节点 Kubernetes 升级通过 MachineDeployment 资源进行管理。

操作步骤

  1. 创建更新后的 machine template

    • 创建一个新的 DCSMachineTemplate,其 vmTemplateName 支持目标 Kubernetes 版本
    • 确保 VM 模板包含正确的 Kubernetes 二进制文件和依赖项
  2. 更新 MachineDeployment

    • spec.template.spec.version 更新为目标 Kubernetes 版本
    • spec.template.spec.infrastructureRef.name 更新为新 machine template 的引用
    • 如需更改 bootstrap 配置,可选更新 spec.template.spec.bootstrap.configRef.name
  3. 监控滚动更新

    • 验证滚动更新已成功完成
    • 验证新的工作节点已加入集群,并运行目标 Kubernetes 版本

使用 Web UI

在完成第 1 阶段后,使用此工作流从 Web UI 升级 Kubernetes。

版本要求:此工作流需要 Fleet Essentials 和 Alauda Container Platform DCS Infrastructure Provider 1.0.13 或更高版本。如果 provider 版本早于 1.0.13,请使用 YAML manifests。

前提条件

  • Distribution Version 升级已完成。请参见 Upgrading Distribution Version
  • Control Plane Node Pool 处于 Running 状态
  • IP Pool 有足够的容量支持滚动更新

升级工作流

在完成 Distribution Version 升级后,Kubernetes 升级按以下顺序进行:

  1. 升级 Control Plane Node Pool。
  2. 等待 Control Plane Node Pool 升级完成。
  3. 按任意顺序升级 Worker Node Pools。

检查可用升级

导航:Clusters → Clusters → 选择集群 → Node Pools Tab

有可用升级的 Node Pools 会显示 Upgrade available 指示器。单击 Node Pool card 查看当前版本与目标版本。

升级 Control Plane Node Pool

步骤

  1. 在 Node Pools Tab 中,找到 Control Plane Node Pool
  2. 单击 Upgrade
  3. 查看升级信息:
    • Current Version:当前 Kubernetes 版本
    • Target Version:自动选择的最新次要版本
  4. 单击 Confirm 开始升级

监控

  • 观察 Node Pool 状态
  • 节点将逐个执行滚动更新(maxSurge=0, maxUnavailable=1)
  • 升级时间取决于节点数量和资源情况

升级 Worker Node Pools

WARNING

在 Control Plane Node Pool 升级完成之前,Worker Node Pools 不能升级。

可开始 Worker Pool 升级的条件

  • Control Plane Kubernetes 版本与 global cluster 版本一致
  • Control Plane 处于 Running 状态

升级步骤

  1. 对每个 Worker Node Pool:
    • 单击 Upgrade 按钮
    • 查看并确认
  2. 在 Control Plane 完成后,可以并行升级各个 Pool

升级限制

Pool 状态Upgrade 按钮
Not Running❌ 已禁用:"Upgrade is unavailable when the Worker Node Pool is not in the Running state"
Control Plane not started❌ 已禁用:"Upgrade the Control Plane Node Pool first"
Control Plane upgrading❌ 已禁用:"Wait for the Control Plane Node Pool upgrade to complete"
Control Plane upgraded✅ 已启用

跨版本升级

当跨多个次要版本升级时(例如,v1.32 → v1.34):

  1. 将 Control Plane 升级到 v1.33
  2. 等待完成
  3. 将 Control Plane 升级到 v1.34
  4. 对 Worker Pools 重复上述过程

原因:Kubernetes 仅支持单次次要版本升级。

故障排查

问题解决方案
Upgrade 按钮被禁用检查 pool 状态和 Control Plane 版本
升级卡住检查 IP Pool 可用性、DCS 平台资源
节点未加入验证网络连通性、DNS 设置

其他资源