Huawei Cloud Stack 基础设施资源
目录
概述编写 YAML 之前凭证 Secret 输入计算值可用区放置版本和组件基线网络清单多网卡约束控制平面 ELB 地址规划操作约束控制平面 HA 放置规划静态 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 端点使用 http 而不是默认的 https 时,才设置 schema。
注意:租户管理员无法从 HCS UI 获取 region。在对 Secret 进行编码之前,请从 HCS 管理员处获取 Provider 识别的准确值。
计算值
在编写 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 支持矩阵 用于其中明确列出的组件版本,例如受支持的 Alauda OS 镜像对应的 Kubernetes、coredns、etcd 和 pause 版本。
OS 支持矩阵并非所有 HCS 清单值的完整来源。在编写 YAML 之前,还需要获取已批准的发布基线,以确定容器镜像仓库、DNS 镜像仓库、Kube-OVN 版本、Kube-OVN join CIDR、Pod CIDR 和 Service CIDR 等值。如果你的发布版本尚未提供完整的基线来源,请使用平台或发布负责人针对你的环境验证过的值。
通过 Web UI 创建集群而非编写 YAML 时,无需手动输入这些组件版本。向导会从你为 OS 镜像注册的 OS-release ConfigMap 中读取这些版本。注册步骤和字段来源请参阅 OS 发布注册。
网络清单
在编写 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 保留在清单中,以确保集群子网列表完整。
多网卡约束
在 HCSMachineConfigPool.spec.configs[].networks[] 中声明多个网卡。每个 networks[] 条目仅用于为一个网卡选择子网和静态 IP。
当前 Provider 不支持声明:
- 每个网卡的角色或用途,例如管理、服务或存储流量
- 特定网卡的默认网关
- 静态路由或路由度量值
- 每个网卡单独的 DNS 设置
请将当前的多网卡功能视为网卡挂载,以及子网和静态 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 就绪后,控制器会填充该字段。
控制平面 HA 放置规划
对于多从节点控制平面,可以将 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 和 验证控制平面 HA。
静态 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 上管理节点添加或修改 worker 节点