华为 DCS Provider

概述

Huawei DCS Infrastructure Provider 使你可以在 Huawei Datacenter Virtualization Solution(DCS)平台上实现不可变基础设施。

DCS(Datacenter Virtualization Solution)是 Huawei 的虚拟化平台,提供企业级虚拟化能力。DCS Provider 与 DCS 集成,用于管理 Kubernetes 集群的虚拟机、网络和存储资源。

INFO

版本

池管理的持久磁盘首次在 DCS provider v1.0.16 中得到支持。 在 v1.0.16 中,DCSIpHostnamePool.spec.pool[].persistentDisk 仅通过 YAML 管理;Web UI 不公开此配置。

主要特性

  • 虚拟机管理:在 DCS 平台上创建并管理 VM
  • 网络配置:支持多 NIC 配置,并可自定义网络设置
  • 存储管理:灵活的磁盘配置,支持模板磁盘和基于 IP 槽位的持久磁盘,并可跨多个 datastore 使用
  • 高可用性:内置对高可用控制平面部署的支持
  • 滚动更新:自动执行滚动更新,实现零停机维护
  • 升级数据保留:在滚动升级期间,可将声明的持久磁盘从旧 VM 分离并重新挂载到替换后的 VM,以确保保留的节点本地数据不会随着系统磁盘一起丢失

集群管理能力

DCS Provider 始终支持通过 Cluster API manifest 进行 基于 YAML 的 集群管理。 当安装了 Fleet EssentialsAlauda Container Platform DCS Infrastructure Provider 版本为 1.0.13 或更高时,也支持 基于 UI 的 集群管理。如果 UI 工作流依赖池管理的持久磁盘,请使用 v1.0.16 或更高版本的 DCS provider。在 v1.0.16 中,DCSIpHostnamePool 上的持久磁盘声明仍然只能通过 YAML 管理。

基于 UI 的管理(Fleet Essentials)

WARNING

Fleet Essentials UI 不支持 ACP 4.3 集群升级

Fleet Essentials UI 工作流尚未适配 ACP 4.3 中引入的 Cluster Version Operator(CVO)机制。请勿使用 Fleet Essentials UI 在 ACP 4.3 上升级 DCS 集群。

两种受支持的替代方式:

通过 Fleet Essentials UI 进行集群创建和节点池管理不受此限制影响。

Fleet Essentials 提供 UI 扩展锚点,使 Alauda Container Platform DCS Infrastructure Provider 能够动态添加 DCS 专属页面。 当安装了 Fleet Essentials 且 provider 版本为 1.0.13 或更高时,你可以通过 Web UI 管理 DCS 集群。池管理的持久磁盘场景需要 DCS provider v1.0.16 或更高版本,但在 v1.0.16 中,DCSIpHostnamePool 上的 persistentDisk 声明仍必须通过 YAML manifest 管理:

基础设施资源管理

  • Cloud Credentials - 存储 DCS 平台访问凭证
  • IP Pools - 管理 IP 地址分配和多 NIC 设置。在 v1.0.16 中,诸如 /var/cpaas 之类的 IP 槽位持久磁盘仍由 YAML 管理
  • Machine Templates - 定义 Control Plane 和 Worker Nodes 的 VM 规格,不包括池管理的持久磁盘

集群生命周期

  • Create Clusters - 通过 5 步向导流程引导创建集群
  • 使用 Overview、Nodes、Node Pools 和 Aligned Extensions 选项卡查看集群详情
  • Upgrade Clusters - 两阶段升级:Distribution Version → Kubernetes
  • 通过确认对话框销毁集群

节点池管理

  • 查看 Control Plane 和 Worker Node Pools
  • 添加可配置副本数和滚动策略的 Worker Node Pools
  • 删除 Worker Node Pools
  • 按 Node Pool 升级 Kubernetes 版本
  • 查看 Control Plane Node Pool 的详细 Conditions

基于 YAML 的管理

对于自动化和 GitOps 工作流,你可以使用 YAML manifest 管理 DCS 集群。此工作流不依赖 Fleet Essentials:

  • 定义基础设施资源(Secret、DCSIpHostnamePool、DCSMachineTemplate)
  • 创建集群资源(KubeadmControlPlane、DCSCluster、Cluster)
  • 管理工作节点(MachineDeployment、KubeadmConfigTemplate)
  • 在节点替换过程中执行滚动更新和升级,并保留已声明的持久磁盘

有关基于 YAML 的说明,请参见 在 Huawei DCS 上创建集群

支持的 Kubernetes 版本

DCS Provider 支持 OS Support Matrix 中定义的 Kubernetes 版本。每个 Alauda OS 版本都包含特定的 Kubernetes 版本,且 VM 模板必须使用相应的 Alauda OS 镜像创建。

架构

DCS Provider 实现了 Cluster API infrastructure provider 规范:

  • DCSCluster:表示 DCS 基础设施集群
  • DCSMachine:表示单个虚拟机
  • DCSMachineTemplate:定义用于创建 machine 的 VM 模板
  • DCSIpHostnamePool:管理 machine 的 IP 和 hostname 分配

概念与术语

Huawei DCS 平台的多个概念名称与 Cluster API 自定义资源名称非常相似。其中有两个需要特别注意,因为名称完全重叠:DCS Cluster(DCS 平台的物理主机池)并不等同于 DCSCluster 自定义资源(表示运行在 DCS 之上的 Kubernetes 集群的 Cluster API infrastructure resource)。将这两者视为同一对象会导致 DCSMachineTemplateDCSCluster 配置错误。

本节列出 provider 所引用的 DCS 平台概念,将每个概念映射到引用它的 Cluster API resource 或字段,并说明网络与存储分层关系——这是最常见的配置错误来源。

DCS 平台对象层级

DCS 平台以层级结构组织对象。provider 处理以下层级(自上而下):

  • DCS Site — 单个 DCS 部署的顶层范围。使用类似 EC1C108C 的 site ID 标识。
  • 在一个 site 内:
    • DCS Clusters — 物理主机池。一个 site 包含一个或多个 DCS Clusters。
    • DCS VM FoldersDCS Cluster Folders — 分别用于虚拟机和集群的组织标签(逻辑分组)。
    • DCS DatastoresDCS Datastore Clusters — 存储容器及其分组。
    • DCS Distributed Virtual Switches (DVS) — 跨越整个 site 的虚拟交换机。
  • 在一个 DCS Cluster 内:
    • DCS Hosts — 物理服务器(例如 CNA-01CNA-02)。
  • 在一个 DCS DVS 内:
    • DCS Port Groups — 虚拟机 NIC 连接到的网络配置条目。
  • 不依赖于放置层级:
    • DCS VM Templates — 标记为模板的虚拟机,用作克隆的源镜像。
    • DCS Volumes — 在 DCS Datastores 上创建的持久磁盘。

provider 本身不拥有这些对象。它通过自定义资源字段按名称或 URN 引用这些对象。

DCS 平台概念

DCS Site

单个 DCS 部署的顶层容器。site ID 通过 DCSCluster.spec.site 提供,并同时存储在 cloud-credential Secret 中。provider 使用的所有 DCS API 路径都包含该 site ID(/service/sites/{siteId}/...)。

DCS Cluster

DCS 平台上的物理主机池。DCS scheduler 会将虚拟机放置到属于同一个 DCS Cluster 的主机上。一个 site 可以包含一个或多个 DCS Clusters;一个 DCS Cluster 包含一个或多个 DCS Hosts。DCS Cluster 名称可在 DCS portal 中查看,并由 GET /service/sites/{siteId}/clusters API 返回。

名称 DCS ClusterDCSCluster Cluster API 自定义资源冲突。请参见下方 Cluster API Resource Mapping

DCS Host

在 DCS Cluster 中注册的单台物理服务器。名称遵循 DCS 平台的本地约定(例如 CNA-01)。虚拟机运行在 host 上;DCS scheduler 会根据集群级策略(DRS、anti-affinity rules)和 host 容量决定新虚拟机落在哪个 host 上。provider 不会将虚拟机固定到特定的 DCS Host;DCSMachineTemplate resource 不暴露 host 绑定字段。

DCS VM Folder

DCS Site 内用于分组虚拟机的组织标签。VM Folder 不影响计算资源放置;被分组到 VM Folder foo 下的虚拟机仍然运行在某个 DCS Cluster 所属的 DCS Host 上。provider 通过 GET /service/sites/{siteId}/folder?type=1 查询 VM Folders。

在从 DCSMachineTemplate.spec.template.spec.locationtype: folder)引用之前,必须先在 DCS 平台上创建 VM Folders。

DCS Cluster Folder

用于分组 DCS Clusters 本身的组织标签,通过相同的 /folder endpoint 但使用不同的 type 参数返回。provider 不会查询或引用 DCS Cluster Folders。此概念仅在此列出,以避免与 DCS VM Folder 混淆。

DCS VM Template

DCS 平台上已标记为模板(isTemplate=true)的虚拟机。provider 从该模板克隆以创建集群节点。VM Template 通过名称标识(即 DCSMachine.spec.vmTemplateName 的值);provider 会通过列出 GET /service/sites/{siteId}/vms?isTemplate=true&name=<name> 将名称解析为 URN。

VM Template 自带位于 DCS Datastore 上的磁盘和自身的网络配置。provider 在克隆时会覆盖网络配置(NIC port group、customization);不会覆盖磁盘的存储类型。默认情况下,克隆出的虚拟机会继承模板所在的 DCS Cluster;有关跨集群使用,请参见 Infrastructure → Advanced: Multi-Cluster Deployment

DCS Datastore

DCS 平台上的存储容器,用于保存虚拟机磁盘。Datastore 可由 SAN、IPSAN、NAS、FusionStorage 或本地磁盘提供支持。存储后端决定一个 datastore 是仅对一个 DCS Cluster 可见,还是对多个 DCS Clusters 可见:SAN、IPSAN、NAS 和 FusionStorage 通常支持跨集群访问;本地磁盘不支持。

磁盘规格可以通过 datastoreNamedatastoreUrn 引用 Datastore;provider 会先将名称解析为 URN,然后再发送克隆请求。

DCS Datastore Cluster

DCS Datastores 的一个分组。当磁盘规格引用 Datastore Cluster(通过 datastoreClusterName)时,DCS scheduler 会选择一个有剩余容量的成员 datastore。对于已经配置 datastore cluster 的 DCS administrator,推荐使用这种方式声明存储,因为它可以容忍单个 datastore 耗尽容量的情况。

DCS Datastore Cluster 不是 DCS Cluster。之所以名称重叠,是因为两者都使用“cluster”一词,但底层概念不同:DCS Cluster 是主机池,而 DCS Datastore Cluster 是 datastore 池。在阅读平台文档或与 DCS administrator 沟通时,请注意这种混淆。

DCS Distributed Virtual Switch (DVS)

DCS 平台上的虚拟交换机,跨越一个或多个 DCS Hosts。虚拟机 NIC 连接到 DCS Port Group,而 Port Group 又隶属于某个 DCS DVS。provider 通过 GET /service/sites/{siteId}/dvswitchs 查询 DVS。

DCS Port Group

DCS DVS 上的网络配置条目。每个 port group 都包含 VLAN 配置、安全策略和其他网络设置。provider 通过 GET {dvSwitchUri}/portgroups(使用父级 DVS URI)查询 port groups,并通过名称(portGroupName)或 URN(portGroupUrn)引用它们。

虚拟机 NIC 必须且只能连接到一个 DCS Port Group。额外的 NIC 需要额外的 port-group 引用。

DCS Volume

DCS 平台上的持久磁盘。Volume 位于 DCS Datastore 上,并通过类似 urn:sites:EC1C108C:volumes:9841 的 URN 标识。当 DCSIpHostnamePool.spec.pool[].persistentDisk[] 声明必须在虚拟机替换后仍然保留的磁盘时,provider 会通过 POST /service/sites/{siteId}/volumes 创建这些 volume,并通过 attachvol 动作将其附加到虚拟机。

DCS Volume 与 Kubernetes PersistentVolume 在概念上不同。DCS Volume 是附加在 hypervisor 层面的 DCS 平台存储对象;Kubernetes PersistentVolume 是表示 pod 可用存储的 Kubernetes API 对象。provider 只管理 DCS Volumes;集群内的 PersistentVolume 资源由工作负载的 CSI driver 单独管理。

DCS Cloud Credential

provider 用于调用 DCS REST API 的认证材料。provider 通过向 POST /service/session 发送 X-Auth-UserX-Auth-Key headers 获取 session token,并在后续请求中使用返回的 X-Auth-Token header。凭证以 Kubernetes Secret 的形式存储,并由 DCSCluster.spec.credentialSecretRef 引用。该 Secret 包含 authUserauthKeyendpointsite 键。

Cluster API Resource Mapping

下表用于区分那些名称与 Cluster API 自定义资源相似的 DCS 平台概念。

DCS 平台概念名称相似的 Cluster API resource为什么它们不是同一个对象
DCS ClusterDCSCluster (CRD)DCS Cluster 是 DCS 平台上的物理主机池。DCSCluster 是一个 Cluster API 自定义资源,表示运行在 DCS 平台之上的 Kubernetes 集群的基础设施侧。一个 DCS Cluster 可以承载一个或多个 Kubernetes 集群的虚拟机。
DCS HostKubernetes NodeDCS Host 是在 DCS 平台上注册的物理服务器。Kubernetes Node 是运行 kubelet 的 Kubernetes 集群内工作负载主机。provider 不会将 DCS Hosts 暴露给 Kubernetes;Kubernetes Node 与其所运行的 DCS Host 之间的关系由 DCS scheduler 决定,并不会体现在任何自定义资源中。
DCS VM TemplateDCSMachineTemplate (CRD)DCS VM Template 是由 DCS administrator 在 DCS 平台上准备好的 OS 镜像模板。DCSMachineTemplate 是一个 Cluster API resource,它按名称引用该模板,并添加 Kubernetes 特定配置(CPU、memory、disks、network)。DCSMachineTemplate 不包含镜像数据;它通过 vmTemplateName 指向一个 DCS VM Template。
DCS VolumeKubernetes PersistentVolumeDCS Volume 是在 hypervisor 层面附加的 DCS 平台存储对象。Kubernetes PersistentVolume 是表示 pod 可用存储的 Kubernetes API 对象。provider 创建 DCS Volumes(由 DCSIpHostnamePool.spec.pool[].persistentDisk[] 驱动);Kubernetes PersistentVolume 资源由工作负载的 CSI driver 独立管理。
DCS Cloud CredentialKubernetes Secret (referenced by DCSCluster.spec.credentialSecretRef)DCS Cloud Credential 是由 DCS platform administrator 签发的 user/key 对。它作为 Kubernetes Secret 提供给 provider,包含 authUserauthKeyendpointsite 键。

下表中的概念不会与任何 Cluster API resource 冲突,但由于包含“cluster”一词,在内部仍然容易混淆:

DCS 平台概念容易混淆的对象为什么它们不是同一个对象
DCS Datastore ClusterDCS ClusterDCS Datastore Cluster 是 DCS Datastores(存储)的分组。DCS Cluster 是 DCS Hosts(计算)的主机池。这两个对象都包含“cluster”一词,但属于 DCS 平台的不同层。

存储概念:Datastore、Datastore Cluster 和 Volume

DCS 平台暴露了三个与存储相关且由 provider 分别引用的概念:

  • DCS Datastore 是单个存储容器。虚拟机磁盘会固定到某一个 DCS Datastore。
  • DCS Datastore Cluster 是 DCS Datastores 的分组。引用 DCS Datastore Cluster 的虚拟机磁盘会放置到一个有空闲容量的成员 datastore 上;由 DCS scheduler 选择成员。
  • DCS Volume 是位于 DCS Datastore(或 DCS Datastore Cluster 的成员 datastore)上的持久磁盘对象。当 DCSIpHostnamePool 声明持久磁盘时,provider 会创建并将其附加到虚拟机;虚拟机替换后它们仍然保留。

三者之间的关系如下:

  • DCSMachineTemplatevmConfig.dcsMachineDiskSpec[] 下声明一个或多个磁盘。每个磁盘绑定到某个具体的 datastoreNamedatastoreClusterName。这些模板级磁盘会与虚拟机一起创建和销毁。
  • DCSIpHostnamePool 条目可以声明一个或多个 persistentDisk[] 项。每个项绑定到某个具体的 datastoreNamedatastoreClusterName,provider 会创建相应的 DCS Volume,并在虚拟机替换后继续保留。

跨集群可见性由底层存储后端决定。SAN、IPSAN、NAS 和 FusionStorage datastores 通常对多个 DCS Clusters 可见;本地磁盘 datastores 仅对单个 DCS Cluster 可见。是否能够将单个 DCS VM Template 克隆到多个 DCS Cluster,取决于这种可见性。

网络概念:DVS、Port Group 和 IP 标识

DCS 支持的 Kubernetes 集群网络配置分为两层:

  • DCS 侧网络连线(Layer 2):虚拟机 NIC 必须连接到属于某个 DCS Distributed Virtual Switch 的 DCS Port Group。DVS 和 Port Group 都是 DCS 平台对象,在 DCS 侧创建和管理。provider 通过名称(dvSwitchNameportGroupName)或 URN(portGroupUrn)引用它们。
  • 集群侧网络标识(Layer 3):分配给虚拟机的 IP 地址、子网掩码、网关、DNS server 和 hostname 不是 DCS 平台对象。它们在 DCSIpHostnamePool.spec.pool[] 条目中声明(由集群 operator 拥有的 Cluster API resource),并在引导阶段通过 cloud-init 或 Ignition 写入虚拟机。

这种拆分带来两个实际后果:

  • DCS 平台团队负责 DVS 和 Port Group 的定义。集群 operator 负责 IP 和 hostname 规划。两者通过 DCSIpHostnamePool resource 协调:该资源引用 DCS 侧的 port group,同时声明集群侧的 IP 标识。
  • provider 不会调用任何 DCS API 来分配或保留 IP 地址。地址冲突必须由集群 operator 在编写 DCSIpHostnamePool 条目时避免。

Cluster API resource DCSIpHostnamePool 与 DCS 平台的 port group 是不同对象。DCS 平台没有原生的“IP pool”概念;DCSIpHostnamePool resource 是唯一记录单个虚拟机网络标识的地方。

字段到概念的映射

下表将最常用的自定义资源字段映射到其引用的 DCS 平台概念以及该值的来源。

DCSCluster 字段

字段DCS 平台概念值来源
spec.siteDCS Site由 DCS platform administrator 提供的 site ID。
spec.credentialSecretRefDCS Cloud Credential同一 namespace 中的 Kubernetes Secret 名称,包含 DCS user、key、endpoint 和 site。

DCSMachineTemplate / DCSMachine 字段

字段DCS 平台概念值来源
spec.template.spec.vmTemplateNameDCS VM Template在 DCS 平台上注册的模板名称(可在 DCS portal 中查看)。
spec.template.spec.locationtype: folderDCS VM FolderDCS 平台上现有 VM Folder 的名称。该 folder 必须先在 DCS 侧创建。
spec.template.spec.locationtype: clusterDCS Cluster现有 DCS Cluster 的名称。仅当模板所在的 home cluster 与目标 cluster 不同时使用。参见 Infrastructure → Advanced: Multi-Cluster Deployment
spec.template.spec.vmConfig.dvSwitchNameDCS DVS现有 DCS Distributed Virtual Switch 的名称。
spec.template.spec.vmConfig.portGroupNameDCS Port Group所引用 DCS DVS 所属的 port group 名称。
spec.template.spec.vmConfig.portGroupUrnDCS Port Group现有 DCS Port Group 的 URN。与 portGroupName 互斥。
spec.template.spec.vmConfig.dcsMachineDiskSpec[].datastoreNameDCS Datastore某个具体 DCS Datastore 的名称。
spec.template.spec.vmConfig.dcsMachineDiskSpec[].datastoreClusterNameDCS Datastore Cluster包含一个或多个 datastore 的 DCS Datastore Cluster 名称。与 datastoreName 互斥。
spec.template.spec.vmConfig.dcsMachineDiskSpec[].datastoreUrnDCS Datastore现有 DCS Datastore 的 URN。由 datastoreName 在内部解析得到。
spec.template.spec.vmConfig.cdRomDatastoreNameDCS Datastore用于存放 Ignition ISO 的 DCS Datastore 名称。
spec.template.spec.vmConfig.cdRomDatastoreClusterNameDCS Datastore Cluster用于选择 Ignition ISO datastore 的 DCS Datastore Cluster 名称。

DCSIpHostnamePool 字段

字段DCS 平台概念值来源
spec.pool[].ip / mask / gateway / dns / hostname集群侧网络标识(非 DCS 平台概念)由集群 operator 声明;通过 cloud-init 或 Ignition 写入虚拟机。
spec.pool[].dvSwitchNameDCS DVS为额外 NIC 覆盖所使用的 DVS。若省略,则回退到模板级 DVS。
spec.pool[].portGroupName / portGroupUrnDCS Port Group为额外 NIC 覆盖所使用的 port group。
spec.pool[].persistentDisk[].datastoreNameDCS Datastore将存放持久磁盘的 DCS Datastore 名称。
spec.pool[].persistentDisk[].datastoreClusterNameDCS Datastore Cluster创建持久磁盘所使用的 DCS Datastore Cluster 名称。与 datastoreName 互斥。
spec.pool[].persistentDisk[](条目本身)创建 DCS VolumeDCS Volume 由 provider 通过 POST /service/sites/{siteId}/volumes 创建,并通过 attachvol 动作附加到虚拟机。

要求

  • 具有 API 访问权限的 DCS 平台

  • 具有 DCS administrator 角色的用户,以下任一类型:

    • Interface interconnection user(默认),或
    • Domain user(基于 LDAP/AD;需要由 DCS administrator 配置 DCS domain authentication)。

    有关选择标准和 DCS 侧要求,请参见 Credential User Types

  • 使用 Alauda OS 镜像的虚拟机模板

  • 在使用池管理的持久磁盘时,DCS VM templates 版本必须为 4.2.1 或更高,因为安全关机和磁盘分离依赖 guest tools

  • 具有跨 host 访问能力的共享存储

文档

有关如何使用 DCS Provider 的详细说明,请参见: