华为云 Stack 基础设施资源

概述

在为华为云 Stack(HCS)集群编写 YAML 之前,请先准备好所有必需的 HCS 输入。本页列出了在填写任何 SecretHCSMachineConfigPoolHCSMachineTemplateKubeadmControlPlaneHCSCluster 清单之前必须就绪的值、来源和约束。

请将本页作为准备检查清单。完成后,请继续阅读 在华为云 Stack 上创建集群在华为云 Stack 上管理节点,了解清单编写流程。

INFO

命名空间要求

所有 HCS 基础设施资源都必须部署在 cpaas-system 命名空间中,以确保作为业务集群与平台正确集成。

在编写 YAML 之前

在创建或编辑任何集群清单之前,请准备以下输入:

输入由以下项使用来源YAML 之前是否必需备注
集群名称ClusterKubeadmControlPlaneHCSCluster、模板、池你的集群命名方案在所有相关资源中始终使用相同的集群名称
Kubernetes 版本和组件基线ClusterKubeadmControlPlane已批准的发布基线;OS 支持矩阵 仅适用于其列出的组件版本准备已验证的 Kubernetes 版本、镜像仓库、DNS 镜像仓库和标签、etcd 镜像标签、Kube-OVN 版本、Pod CIDR、Service CIDR 以及 Kube-OVN join CIDR
accessKeysecretKeyHCS 凭证 SecretHCS 我的设置 > Access Keys在应用 Secret 之前,请先对这些值进行 Base64 编码
projectIDHCS 凭证 SecretHCS 我的设置 > Resource Spaces使用资源空间 ID,而不是显示名称
externalGlobalDomainHCS 凭证 SecretHCS 平台访问域使用提供程序应调用的 HCS 平台域
schemaHCS 凭证 SecretHCS 管理员HCS IAM 端点的可选 API scheme。如果省略,提供程序将使用 https
regionHCS 凭证 SecretHCS 管理员租户管理员无法从 HCS UI 中检索此值
imageNameHCSMachineTemplateHCS 镜像库存使用所选 Alauda OS 镜像经验证的 HCS 镜像名称
flavorNameHCSMachineTemplateHCS 管理员使用与 Flavor.Name 匹配、由提供程序识别的 HCS API 值,而不是租户 UI 显示名称
availabilityZoneHCSMachineTemplateHCS 管理员使用与 ZoneName 匹配、由提供程序识别的 HCS API 值,而不是租户 UI 显示名称
根卷、临时数据卷和持久化磁盘布局HCSMachineTemplateHCSMachineConfigPool集群存储方案在编写模板和池之前,请先规划磁盘大小和挂载点。将可随 VM 一起重建的磁盘放入 HCSMachineTemplate.spec.template.spec.dataVolumes[]。将必须在 VM 替换后仍然保留的磁盘(例如 /var/cpaas)放入 HCSMachineConfigPool.spec.configs[].persistentDisks[]
VPC 名称和安全组名称HCSClusterHCS 网络库存确认引用的 VPC 和安全组已存在且可用
集群子网库存HCSClusterHCSMachineConfigPool、控制平面 ELBHCS 网络库存为集群将使用的每个子网准备子网名称、子网 ID、与 ELB 相关的子网元数据、CIDR、网关、DNS 值以及计划的空闲 IP 范围
控制平面和工作节点主机名及静态 IPHCSMachineConfigPoolHCS 子网规划对静态 IP 工作流为必需至少为每个计划的从节点准备一条记录
vipAddressvipSubnetNameHCSCluster.spec.controlPlaneLoadBalancerHCS ELB 地址规划vipAddress 必须属于 vipSubnetName
elbVirsubnetL4IpselbVirsubnetL7IpsHCSCluster.spec.controlPlaneLoadBalancerHCS ELB 地址规划每个 L4 或 L7 条目必须恰好包含两个 IP
vipDomainNameHCSCluster.spec.controlPlaneLoadBalancerHCS Cloud DNS Private Zones推荐配置该域名,使其已解析到 vipAddress
controlPlaneEndpointCluster.status / 派生的集群端点控制器管理在创建清单中不要准备或写入此字段;控制器会在 ELB 就绪后填充它

凭证 Secret 输入

只有在收集到所有必需值之后,才创建 HCS 凭证 Secret

Secret 键含义获取位置
accessKeyHCS access key IDHCS 我的设置 > Access Keys
secretKeyHCS secret access keyHCS 我的设置 > Access Keys
projectIDResource Space IDHCS 我的设置 > Resource Spaces
externalGlobalDomainHCS 平台访问域用于 API 访问的 HCS 平台域
region提供程序使用的 HCS 地域 API 值HCS 管理员
schemaHCS IAM 端点的可选 API scheme。如果省略,提供程序将使用 httpsHCS 管理员

对于未包含 schema 的现有凭证 Secret,可以不做任何更改并继续正常使用。只有当你的 HCS IAM 端点使用 http 而不是默认的 https 时,才设置 schema

注意: 租户管理员无法从 HCS UI 中检索 region。在对 Secret 进行编码之前,请从 HCS 管理员处获取提供程序可识别的精确值。

计算值

在编写 HCSMachineTemplateHCSMachineConfigPool 之前,请准备 VM 镜像、Flavor、可用区、临时数据卷布局以及持久化磁盘布局。

输入指导
imageName使用要部署的 Alauda OS 镜像对应的、已验证的 HCS 镜像名称
flavorName使用与 Flavor.Name 匹配、由提供程序识别的 HCS API 值。不要使用租户 UI 显示名称
availabilityZone使用与 ZoneName 匹配、由提供程序识别的 HCS API 值。不要使用租户 UI 显示名称
根卷和临时数据卷提前规划系统盘和临时数据盘。控制平面模板通常将临时数据卷用于 /var/lib/etcd/var/lib/kubelet/var/lib/containerd。工作节点模板通常将临时数据卷用于 /var/lib/kubelet/var/lib/containerd
池管理的持久化磁盘提前规划在 VM 替换后必须保留的磁盘。将此模型用于 /var/cpaas 以及在滚动替换期间必须保留的其他节点本地状态。

注意: 租户管理员无法从 HCS UI 中检索提供程序可识别的 flavorNameavailabilityZone 值。在编写清单之前,请从 HCS 管理员处获取精确的 API 值。

版本和组件基线

仅将 OS 支持矩阵 用于其明确列出的组件版本,例如受支持的 Alauda OS 镜像的 Kubernetes、coredns、etcd 和 pause 版本。

OS 支持矩阵并不是所有 HCS 清单值的完整来源。在编写 YAML 之前,还应获取已批准的发布基线,例如容器镜像仓库、DNS 镜像仓库、Kube-OVN 版本、Kube-OVN join CIDR、Pod CIDR 和 Service CIDR 等值。如果你的版本尚未发布完整的基线来源,则应使用平台或版本负责人为你的环境验证过的值。

网络库存

在编写 HCSClusterHCSMachineConfigPool 资源之前,请准备完整的集群网络库存。

你的网络规划必须包括:

  • 目标 VPC 名称
  • 目标安全组名称
  • 集群将使用的每个子网名称
  • 每个子网的子网 ID 和与 ELB 相关的子网元数据
  • 每个子网的 CIDR
  • 每个子网的网关和 DNS 值
  • 控制平面节点、工作节点、ELB VIP 以及 ELB L4/L7 虚拟子网 IP 的计划空闲 IP 范围

如果单个集群使用多个子网,则这些子网必须属于同一个 VPC,并且必须允许集群节点彼此通信。

重要: HCSCluster.spec.network.subnets 是集群子网库存。HCSMachineConfigPoolvipSubnetNameelbVirsubnetL4Ips[].subnetNameelbVirsubnetL7Ips[].subnetName 引用的每个 subnetName 都必须已存在于该列表中。

对于初始集群创建流程,控制器可以在集群变为 Ready 之前按名称解析现有子网。对于已处于 Ready 的现有集群,不要只附加一个子网名称。请添加完整的子网对象,至少包含 nameid,以及当该子网被控制平面 ELB 使用时的 neutronSubnetId。同时还要在库存中保留 cidrgatewayIpprimaryDNSsecondaryDNS,以确保集群子网列表保持完整。

多 NIC 约束

多个 NIC 在 HCSMachineConfigPool.spec.configs[].networks[] 中声明。每个 networks[] 条目只为一个 NIC 选择一个子网和一个静态 IP。

当前提供程序不允许你声明:

  • 每个 NIC 的角色或用途,例如管理、服务或存储流量
  • 特定 NIC 的默认网关
  • 静态路由或路由度量
  • 按 NIC 配置的 DNS 设置

请将当前的多 NIC 能力视为 NIC 连接以及子网和静态 IP 选择。

控制平面 ELB 地址规划

HCS 提供程序会自动创建控制平面 Elastic Load Balance(ELB)。在编写 HCSCluster 之前,请先规划 ELB 输入。

本文档使用固定地址 ELB 工作流。在编写 HCSCluster 之前,请准备所有与 ELB 相关的地址:

  • vipSubnetName
  • vipAddress
  • 恰好两个 L4 IP 的 elbVirsubnetL4Ips
  • 恰好两个 L7 IP 的 elbVirsubnetL7Ips
  • 可选的 vipDomainName

如果设置了 vipDomainName,请配置 HCS Cloud DNS Private Zones,使该域名已解析到 vipAddress

操作约束

  • 提供程序会创建 ELB,并启用 Hybrid Load Balancing,使集群节点能够通过 ELB 地址访问 API server。
  • 集群创建后,不要在 HCS ELB 上禁用 Hybrid Load Balancing。
  • 不要在创建清单中写入 spec.controlPlaneEndpoint。控制器会在 ELB 就绪后填充该字段。

静态 IP 池规划

本页重点介绍计划中的静态 IP 工作流。

在创建 HCSMachineConfigPool 资源之前,请准备以下内容:

  • 控制平面主机名和静态 IP
  • 工作节点主机名和静态 IP(如果会创建工作节点)
  • 足以覆盖初始副本数的条目
  • 必须绑定到每个固定主机名的任何池管理持久化磁盘

对于至少有三个副本的静态 IP 控制平面,推荐的升级路径使用 KubeadmControlPlane.spec.rolloutStrategy.rollingUpdate.maxSurge: 0。这种先缩容再扩容的方式通常不需要额外的控制平面 IP。如果你计划的是单控制平面、仅创建型拓扑(replicas: 1),不要把该 rollout 设置复制到创建清单中。对于使用持久化磁盘的池,请保持 maxSurge: 0,因为每个磁盘都绑定到一个固定主机名和一个槽位。

池管理的持久化磁盘

HCSMachineConfigPool.spec.configs[].persistentDisks[] 中声明必须在 VM 删除后重建时仍然保留的 HCS 磁盘。

将此模型用于 /var/cpaas、监控数据、日志数据或其他必须在滚动替换期间保留的节点本地状态。将 HCSMachineTemplate.spec.template.spec.dataVolumes[] 保留给可在每次新 ECS 创建时重建的临时磁盘。

hcs-machine-config-pool-with-persistent-disk.yaml
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: HCSMachineConfigPool
metadata:
  name: <cluster-name>-cp-pool
  namespace: cpaas-system
  labels:
    cluster.x-k8s.io/cluster-name: <cluster-name>
spec:
  configs:
    - hostname: <node-hostname>
      networks:
        - subnetName: <subnet-name>
          ipAddress: <node-ip>
      persistentDisks:
        - slot: 0
          size: 100
          type: SSD
          mountPath: /var/cpaas
          format: xfs
          mountOptions:
            - defaults
            - noatime

持久化磁盘字段说明:

字段说明
slot单个机器配置中的磁盘位置。同一主机名下,槽位必须唯一,并且从 0 开始连续。
sizeEVS 磁盘大小,单位为 GB。对于新创建的 EVS 数据盘,请使用 1032768 GB。已存在并已声明的磁盘必须与其当前大小一致。
type在目标可用区中可用的 EVS 磁盘类型名称。
mountPath来宾操作系统内的挂载路径。对于必须在 VM 替换后仍然保留的平台状态,请使用 /var/cpaas。应为该磁盘规划平台监控、日志和插件数据大小。
format新磁盘初始化时使用的文件系统。如果省略,提供程序将使用 xfs。重新附加时不会重新格式化现有文件系统。
mountOptions替换 VM 挂载磁盘时应用的挂载选项。如果省略,提供程序将使用 defaults,noatime

更新规则:

  • 不要在 HCSMachineConfigPool.spec.configs[].persistentDisks[]HCSMachineTemplate.spec.template.spec.dataVolumes[] 中同时声明相同的 mountPath
  • 你可以向现有机器配置中追加新的 persistentDisks[] 条目。提供程序会创建或认领 EVS 磁盘,但不会将该磁盘热挂载到运行中的 ECS。在你期望新磁盘在来宾操作系统内被格式化并挂载之前,请使用 maxSurge: 0 触发滚动替换。
  • 在提供程序接受持久化磁盘条目后,不要删除或更改 slotsizetypeformatmountPath。这些字段定义了磁盘标识和认领契约。
  • 你可以更新 mountOptions。该更改会在节点被替换且替换后的 VM 渲染其磁盘挂载时生效。
  • 对于使用持久化磁盘的池,请保持 KubeadmControlPlane.spec.rolloutStrategy.rollingUpdate.maxSurge: 0MachineDeployment.spec.strategy.rollingUpdate.maxSurge: 0

值到 YAML 的映射

完成准备检查清单后,请使用以下映射:

已准备的输入YAML 字段
accessKeysecretKeyprojectIDexternalGlobalDomainregion、可选的 schemaSecret.data.*
imageNameflavorNameavailabilityZone、根卷和临时数据卷布局HCSMachineTemplate.spec.template.spec.*
控制平面和工作节点主机名、静态 IP,以及池管理的持久化磁盘HCSMachineConfigPool.spec.configs[]
VPC 名称、子网库存、安全组名称HCSCluster.spec.network.*
vipAddressvipSubnetNamevipDomainNameelbVirsubnetL4IpselbVirsubnetL7IpsHCSCluster.spec.controlPlaneLoadBalancer.*
Kubernetes 版本和组件基线KubeadmControlPlane.spec.versionCluster.spec.clusterNetwork.*、集群注解以及相关引导设置

下一步

完成准备检查清单后: