在 Huawei Cloud Stack 上升级集群

本指南说明如何在尽量减少停机时间的情况下,在 Huawei Cloud Stack 上升级 Kubernetes 集群,同时保持稳定性和数据完整性。

概览

HCS 上的集群升级涵盖多个组件,并采用结构化流程以确保系统可靠性:

  • 控制平面升级:更新 Kubernetes 控制平面组件及底层基础设施
  • 工作节点升级:使用新的机器镜像和 Kubernetes 版本升级工作节点
  • 基础设施更新:修改虚拟机规格、存储和网络配置

Cluster API 通过内置安全机制编排声明式滚动更新。

INFO

先决条件

开始之前,请确保:

  • 控制平面可达
  • 所有节点均处于健康状态(Ready)

如需了解初始部署,请参阅 创建集群 指南。

WARNING

单控制平面集群

本文档中的升级工作流适用于具有高可用控制平面的 HCS 集群。支持创建单控制平面 HCS 集群,但不支持通过此工作流进行升级。

WARNING

升级期间的数据丢失

升级依赖 Cluster API 的滚动替换机制。当前 HCS provider 在节点替换期间不会保留或重新挂载数据盘。当节点被替换时,旧的 VM 及其挂载的卷可能会一起被删除。不要将 HCS 数据盘上的节点本地数据视为已保留状态。请将有状态数据迁移到外部持久化存储,或在开始升级前完成备份和迁移。

控制平面升级

控制平面升级会更新 Kubernetes API server、etcd、scheduler 和 controller manager,以及底层 VM 基础设施。

对于由固定大小 HCSMachineConfigPool 支持的 HCS 控制平面,在升级期间请保持 KubeadmControlPlane.spec.rolloutStrategy.rollingUpdate.maxSurge: 0。这种默认的先缩容再扩容路径通常不需要额外的控制平面 IP。只有在计划增加控制平面副本数,或有意将 maxSurge 设置为大于 0 时,才需要在控制平面池中准备额外的主机名和静态 IP 条目。

基础设施镜像更新

升级控制平面节点所使用的底层机器镜像可以带来安全补丁、性能改进以及更新后的系统组件。

操作步骤

  1. 创建更新后的机器模板

    复制 KubeadmControlPlane 引用的现有 HCSMachineTemplate,并修改所需规格:

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

    修改新模板:

    • metadata.name 设置为 <new-template-name>
    • 从复制的清单中删除由服务器生成的 metadata 和 status 字段。
    • 保留运行时标识字段为空,包括 spec.template.spec.providerIDspec.template.spec.serverId。HCS provider 在创建实例时会分配这些值。
    • 按需更新:
      • spec.template.spec.imageName
      • spec.template.spec.flavorName
      • spec.template.spec.rootVolume.size
      • spec.template.spec.dataVolumes
  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 版本需要同时更新控制平面软件和配套的虚拟机镜像。

先决条件

  • 验证目标 Kubernetes 版本与现有工作负载的兼容性
  • 确保 VM 模板支持目标 Kubernetes 版本。有关版本映射,请参阅 OS Support Matrix
  • 审查 Kubernetes 升级路径和版本偏差策略

操作步骤

  1. 更新 VM 模板引用

    更新所引用 HCSMachineTemplate 中的 spec.template.spec.imageName。新的 VM 模板必须与目标 Kubernetes 版本匹配。

  2. 更新控制平面版本

    修改 KubeadmControlPlane 资源中的 spec.version 字段(必需)。对于默认的静态 IP 控制平面路径,请保持 spec.rolloutStrategy.rollingUpdate.maxSurge: 0。只有在将控制平面 HCSMachineConfigPool 扩展为包含额外的主机名和 IP 配额后,才应进一步调整滚动更新设置。

  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

工作节点升级

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

INFO

有关工作节点的详细操作步骤,请参阅 管理节点 部分。

其他资源