Huawei Cloud Stack 的基础设施资源
目录
概述编写 YAML 之前凭证 Secret 输入Compute 值可用区放置版本和组件基线网络清单多 NIC 约束控制平面 ELB 地址规划运行约束控制平面高可用放置规划静态 IP 池规划池管理持久磁盘值到 YAML 的映射后续步骤概述
在为 Huawei Cloud Stack (HCS) 集群编写 YAML 之前,请先准备好所有必需的 HCS 输入。本页列出了填写任何 Secret、HCSMachineConfigPool、HCSMachineTemplate、KubeadmControlPlane 或 HCSCluster 清单前必须准备好的值、来源和约束。
请将本页用作准备清单。完成准备后,请继续阅读在 Huawei Cloud Stack 上创建集群和在 Huawei Cloud Stack 上管理节点,了解清单工作流。
命名空间要求
所有 HCS 基础设施资源都必须部署在 cpaas-system 命名空间中,以确保它们能够作为工作负载集群与平台正确集成。
编写 YAML 之前
创建或编辑任何集群清单之前,请准备以下输入:
凭证 Secret 输入
收集所有必需值后,再创建 HCS 凭证 Secret。
在未设置 schema 的情况下创建的现有凭证 Secret 将继续正常工作。仅当 HCS IAM endpoint 使用 http 而不是默认值 https 时,才设置 schema。
注意:租户管理员无法从 HCS UI 获取 region。在对 Secret 进行编码之前,请从 HCS 管理员处获取 Provider 可识别的准确值。
Compute 值
在编写 HCSMachineTemplate 和 HCSMachineConfigPool 之前,准备好 VM 镜像、flavor、可用区、临时数据卷布局和持久磁盘布局。
注意:ACP Web UI 通过所选 HCS 凭证加载 flavor 和可用区。编写 YAML 时,请从 HCS 管理员处获取准确的、Provider 可识别的 Flavor.Name 和 ZoneName 值,因为原生 HCS 租户控制台可能不会显示这些值。
可用区放置
HCSMachineTemplate 会为从该模板创建的每台机器选择一个可用区。ACP Web UI 会为控制平面节点池创建一个模板,并为每个工作节点池创建一个模板。因此:
- 所有控制平面节点使用同一个可用区。
- 一个工作节点池中的所有从节点使用同一个可用区。
- 不同的工作节点池可以选择不同的可用区。
- 单个节点池不会自动将从节点分散到多个可用区。
为实现可预测的放置,请明确选择可用区。如果省略 HCSMachineTemplate.spec.template.spec.availabilityZone,Provider 会查询 HCS,并选择 HCS 报告为可用的第一个可用区。该列表的顺序由 HCS 控制。
使用 ACP Web UI 时,可用区下拉列表通过所选 HCS 凭证加载,使用 HCS API ZoneName,并禁用 HCS 报告为不可用的可用区。编写 YAML 时,请使用 Provider 可识别的 ZoneName,而不是原生 HCS 租户控制台中的显示名称。Provider 会拒绝 HCS 未返回的名称。对于已存在但当前不可用的指定可用区,ECS 配置仍可能访问 HCS 并在那里失败,因此在应用清单之前,请确认该可用区可用。
池管理的持久磁盘和控制平面高可用会增加放置约束:
- 现有池管理的持久磁盘会将其替换后的 ECS 实例锁定到该磁盘所在的可用区。如果模板明确选择了不同的可用区,替换操作将因可用区冲突而失败。
- 控制平面高可用通过使用 HCS 服务器组,将控制平面 ECS 实例分散到物理主机上。它不会将控制平面分散到多个可用区;所有控制平面节点仍位于控制平面
HCSMachineTemplate所选择的可用区中。
版本和组件基线
仅将 OS Support Matrix 用于其中明确列出的组件版本,例如受支持 Alauda OS 镜像的 Kubernetes、coredns、etcd 和 pause 版本。
OS Support Matrix 并不是所有 HCS 清单值的完整来源。在编写 YAML 之前,还应获取已批准的发布基线,用于确定容器镜像仓库、DNS 镜像仓库、Kube-OVN 版本、Kube-OVN 加入 CIDR、Pod CIDR 和 Service CIDR 等值。如果你的发布版本尚未提供完整的基线来源,请使用平台或发布负责人针对你的环境验证过的值。
通过 Web UI 而不是 YAML 创建集群时,无需手动输入这些组件版本。向导会从你为 OS 镜像注册的 OS-release ConfigMap 中读取这些版本。有关注册步骤和字段来源,请参阅 OS Release Registration。
网络清单
在编写 HCSCluster 或 HCSMachineConfigPool 资源之前,准备完整的集群网络清单。
网络规划必须包括:
- 目标 VPC 名称
- 目标安全组名称
- 集群将使用的每个子网名称
- 每个子网的子网 ID 和与 ELB 相关的子网元数据
- 每个子网的 CIDR
- 每个子网的网关和 DNS 值
- 控制平面节点、工作节点、ELB VIP 以及 ELB L4/L7 虚拟子网 IP 的计划可用 IP 范围
如果单个集群使用多个子网,这些子网必须属于同一个 VPC,并且必须允许集群节点彼此通信。
重要:HCSCluster.spec.network.subnets 是集群子网清单。HCSMachineConfigPool、vipSubnetName、elbVirsubnetL4Ips[].subnetName 和 elbVirsubnetL7Ips[].subnetName 引用的每个 subnetName 都必须已存在于该列表中。
对于初始集群创建流程,控制器可以在集群变为 Ready 之前按名称解析现有子网。对于现有的 Ready 集群,请勿仅追加子网名称。添加完整的子网对象,至少包括 name、id,以及在子网供控制平面 ELB 使用时包括 neutronSubnetId。同时保留清单中的 cidr、gatewayIp、primaryDNS 和 secondaryDNS,以确保集群子网列表保持完整。
多 NIC 约束
在 HCSMachineConfigPool.spec.configs[].networks[] 中声明多个 NIC。每个 networks[] 条目只为一个 NIC 选择一个子网和一个静态 IP。
当前 Provider 不允许声明:
- 每个 NIC 的角色或用途,例如管理、服务或存储流量
- 特定 NIC 的默认网关
- 静态路由或路由度量值
- 每个 NIC 的 DNS 设置
将当前的多 NIC 功能视为 NIC 附加,以及子网和静态 IP 的选择。
控制平面 ELB 地址规划
HCS Provider 会自动创建控制平面 Elastic Load Balance(ELB)。请在编写 HCSCluster 之前规划 ELB 输入。
本文档使用固定地址 ELB 工作流。请在编写 HCSCluster 之前准备所有与 ELB 相关的地址:
vipSubnetNamevipAddresselbVirsubnetL4Ips,恰好包含两个 L4 IPelbVirsubnetL7Ips,恰好包含两个 L7 IP
保持 vipDomainName 未设置:不支持通过域名访问集群(API server 证书只能由集群自身的 CA 签发),并且 Provider 仅使用该字段回填派生的 controlPlaneEndpoint。
运行约束
- Provider 会创建 ELB 并启用 Hybrid Load Balancing,使集群节点可以通过 ELB 地址访问 API server。
- 集群创建后,请勿在 HCS ELB 上禁用 Hybrid Load Balancing。
- 请勿在创建清单中填写
spec.controlPlaneEndpoint。ELB 就绪后,控制器会填充该字段。
控制平面高可用放置规划
对于多从节点控制平面,可以将 HCS Provider 配置为创建并维护一个由 Provider 管理的服务器组,用于控制平面 ECS 放置。在编写集群清单时,通过 HCSCluster.spec.controlPlaneHA 启用此功能。
启用此功能前,请规划放置策略:
此功能作用于集群范围,仅适用于控制平面计算机。它不会配置工作节点池。Provider 会创建服务器组,将控制平面 ECS 创建请求关联到该组,在 HCSCluster.status.controlPlaneHA 中记录服务器组,并通过 ControlPlaneHAReady 条件报告进度。
对于现有集群,启用 HCSCluster.spec.controlPlaneHA 会创建并记录由 Provider 管理的服务器组,但不会将已在运行的控制平面 ECS 实例追溯添加到该组。服务器组放置会在使用 os:scheduler_hints.group 创建控制平面 ECS 时应用。要使现有集群达到目标状态,请启用 controlPlaneHA,等待 HCSCluster.status.controlPlaneHA.id,然后触发控制平面滚动替换,以便使用该服务器组创建替换 ECS 实例。在当前控制平面 ECS 成员完成替换并在该组中被观测到之前,ControlPlaneHAReady 可能仍为 False,原因是 ControlPlaneHAPending。
有关清单示例和验证命令,请参阅配置 HCSCluster和验证控制平面高可用。
静态 IP 池规划
本页重点介绍规划的静态 IP 工作流。
创建 HCSMachineConfigPool 资源前,请准备以下内容:
- 控制平面主机名和静态 IP
- 工作节点主机名和静态 IP(如果创建工作节点)
- 足够覆盖初始从节点数的条目
- 必须绑定到每个固定主机名的池管理持久磁盘
对于至少包含三个从节点的静态 IP 控制平面,推荐使用 KubeadmControlPlane.spec.rolloutStrategy.rollingUpdate.maxSurge: 0 升级路径。这种先缩容再扩容的方法通常不需要额外的控制平面 IP。如果计划采用单控制平面、仅创建拓扑(replicas: 1),请勿将该滚动更新设置复制到创建清单中。对于使用持久磁盘的池,请保留 maxSurge: 0,因为每个磁盘都绑定到一个固定主机名和槽位。
池管理持久磁盘
在 HCSMachineConfigPool.spec.configs[].persistentDisks[] 中声明必须在 VM 删除并重新创建替换过程中保留的 HCS 磁盘。
对于 /var/cpaas、监控数据、日志数据或其他必须在滚动替换期间保留的节点本地状态,请使用此模型。对于可以随每个新 ECS 重新创建的临时磁盘,请保留 HCSMachineTemplate.spec.template.spec.dataVolumes[]。
持久磁盘字段说明:
更新规则:
- 不要在
HCSMachineConfigPool.spec.configs[].persistentDisks[]和HCSMachineTemplate.spec.template.spec.dataVolumes[]中同时声明相同的mountPath。 - 可以向现有机器配置追加新的
persistentDisks[]条目。Provider 会创建或声明 EVS 磁盘,但不会将磁盘热挂载到正在运行的 ECS 中。在期望新磁盘于客户机 OS 内完成格式化和挂载之前,请使用maxSurge: 0触发滚动替换。 - Provider 接受持久磁盘条目后,不要移除或更改
slot、size、type、format或mountPath。这些字段定义磁盘身份和声明契约。 - 可以更新
mountOptions。更改会在节点替换且替换 VM 渲染其磁盘挂载时生效。 - 对于使用持久磁盘的池,请保留
KubeadmControlPlane.spec.rolloutStrategy.rollingUpdate.maxSurge: 0和MachineDeployment.spec.strategy.rollingUpdate.maxSurge: 0。
值到 YAML 的映射
完成准备检查清单后,使用以下映射:
后续步骤
完成准备检查清单后:
- 按照在 Huawei Cloud Stack 上创建集群编写控制平面和基础设施清单
- 按照在 Huawei Cloud Stack 上管理节点添加或修改工作节点