在 Huawei Cloud Stack 上升级集群
本指南说明如何在尽量减少停机时间的情况下,在 Huawei Cloud Stack 上升级 Kubernetes 集群,同时保持稳定性和数据完整性。
概览
HCS 上的集群升级涵盖多个组件,并采用结构化流程以确保系统可靠性:
- 控制平面升级:更新 Kubernetes 控制平面组件及底层基础设施
- 工作节点升级:使用新的机器镜像和 Kubernetes 版本升级工作节点
- 基础设施更新:修改虚拟机规格、存储和网络配置
Cluster API 通过内置安全机制编排声明式滚动更新。
单控制平面集群
本文档中的升级工作流适用于具有高可用控制平面的 HCS 集群。支持创建单控制平面 HCS 集群,但不支持通过此工作流进行升级。
升级期间的数据丢失
升级依赖 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 条目。
基础设施镜像更新
升级控制平面节点所使用的底层机器镜像可以带来安全补丁、性能改进以及更新后的系统组件。
操作步骤
-
创建更新后的机器模板
复制
KubeadmControlPlane引用的现有HCSMachineTemplate,并修改所需规格: -
修改模板规格
修改新模板:
- 将
metadata.name设置为<new-template-name> - 从复制的清单中删除由服务器生成的 metadata 和 status 字段。
- 保留运行时标识字段为空,包括
spec.template.spec.providerID和spec.template.spec.serverId。HCS provider 在创建实例时会分配这些值。 - 按需更新:
spec.template.spec.imageNamespec.template.spec.flavorNamespec.template.spec.rootVolume.sizespec.template.spec.dataVolumes
- 将
-
部署更新后的模板
应用新的机器模板:
-
更新控制平面引用
修改
KubeadmControlPlane资源,使其引用新模板: -
监控滚动更新
控制平面将自动执行滚动更新:
Kubernetes 版本升级
升级 Kubernetes 版本需要同时更新控制平面软件和配套的虚拟机镜像。
先决条件
- 验证目标 Kubernetes 版本与现有工作负载的兼容性
- 确保 VM 模板支持目标 Kubernetes 版本。有关版本映射,请参阅 OS Support Matrix。
- 审查 Kubernetes 升级路径和版本偏差策略
操作步骤
-
更新 VM 模板引用
更新所引用
HCSMachineTemplate中的spec.template.spec.imageName。新的 VM 模板必须与目标 Kubernetes 版本匹配。 -
更新控制平面版本
修改
KubeadmControlPlane资源中的spec.version字段(必需)。对于默认的静态 IP 控制平面路径,请保持spec.rolloutStrategy.rollingUpdate.maxSurge: 0。只有在将控制平面HCSMachineConfigPool扩展为包含额外的主机名和 IP 配额后,才应进一步调整滚动更新设置。 -
验证升级进度
监控滚动升级过程:
工作节点升级
工作节点升级通过 MachineDeployment 资源进行管理。
有关工作节点的详细操作步骤,请参阅 管理节点 部分。