Huawei DCS Provider

概述

Huawei DCS Infrastructure Provider 可在 Huawei Datacenter Virtualization Solution (DCS) 平台上创建和管理 Alauda OS 集群。

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

主要功能

  • 虚拟机管理:在 DCS 平台上配置和管理 VM
  • 网络配置:支持多 NIC 配置,并可自定义网络设置
  • 存储管理:支持灵活的磁盘配置,可在多个数据存储上使用模板磁盘和基于 IP 槽位的持久磁盘
  • 高可用性:内置对高可用控制平面部署的支持
  • 自建 VIP:通过 alive 运行时和 ACP v4.4+ 管理控制平面 VIP(DCSCluster.spec.controlPlaneLoadBalancer.type: internal)。在控制平面 Layer 2 网络中预留 IPv4 VIP,并使用 在 Huawei DCS 上创建集群 中的 YAML 工作流
  • 滚动更新:自动执行滚动更新,实现零停机维护
  • 升级数据保留:在滚动升级期间,可将声明的持久磁盘从旧 VM 分离,并重新连接到替换 VM,从而避免保留的节点本地数据随系统磁盘丢失

集群管理能力

DCS Provider 始终支持通过 Cluster API 清单进行基于 YAML 的集群管理。 当安装 Fleet Essentials 后,它还支持基于 UI 的集群管理。DCSIpHostnamePool 上的持久磁盘声明仍仅支持 YAML。

基于 UI 的管理(Fleet Essentials)

INFO

Fleet Essentials 升级边界

Fleet Essentials 1.0.4 及更高版本可以通过 CVO 请求 ACP 4.3 及更高版本的 Distribution Version 升级。它不会执行 DCS Kubernetes 和 Alauda OS 替换。有关第 2 阶段的 YAML 操作步骤,请参阅在 Huawei DCS 上升级 Kubernetes。Fleet Essentials 中的集群创建和常规节点池管理不受此边界影响。

Fleet Essentials 提供 UI 扩展锚点,使 Alauda Container Platform Infrastructure Provider for Huawei DCS 能够动态添加 DCS 专属页面。 安装 Fleet Essentials 后,您可以通过 Web UI 管理 DCS 集群。DCSIpHostnamePool 上的 persistentDisk 声明仍必须通过 YAML 清单管理:

基础设施资源管理:

  • Cloud Credentials - 存储 DCS 平台访问凭证
  • IP Pools - 管理 IP 地址分配和多 NIC 设置。/var/cpaas 等基于 IP 槽位的持久磁盘仍通过 YAML 管理
  • Machine Templates - 定义控制平面和工作节点的 VM 规格,但不包括由池管理的持久磁盘

集群生命周期:

  • 创建集群 - 用于引导式集群创建的 5 步向导工作流
  • 通过 Overview、Nodes、Node Pools 和 Aligned Extensions 选项卡查看集群详细信息
  • 升级集群 - 两阶段升级:Distribution Version → Kubernetes
  • 通过确认对话框销毁集群

节点池管理:

  • 查看控制平面和工作节点池
  • 添加工作节点池,并配置副本数和发布策略
  • 删除工作节点池
  • 按节点池升级 Kubernetes 版本
  • 查看控制平面节点池的详细 Conditions

基于 YAML 的管理

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

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

有关基于 YAML 的操作步骤,请参阅在 Huawei DCS 上创建集群。

支持的 Kubernetes 版本

DCS Provider 支持的 Kubernetes 版本以 OS 支持矩阵 中的定义为准。每个 Alauda OS 版本都包含特定的 Kubernetes 版本,必须使用对应的 Alauda OS 镜像创建 VM 模板。

架构

DCS Provider 实现了 Cluster API 基础设施提供程序规范:

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

概念和术语

多个 Huawei DCS 平台概念的名称与 Cluster API 自定义资源名称十分相似。其中两个需要特别注意,因为它们的名称完全相同:DCS Cluster(DCS 平台上的物理主机池)与 DCSCluster 自定义资源(表示在 DCS 上运行的 Kubernetes 集群的 Cluster API 基础设施资源)并非同一对象。若将二者视为同一对象,会导致 DCSMachineTemplate 和 DCSCluster 配置错误。

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

DCS 平台对象层级

DCS 平台以层级结构组织对象。该 provider 使用以下层级(从上到下):

  • DCS Site — 单个 DCS 部署的顶层范围。通过站点 ID 标识,例如 EC1C108C。
  • 在站点内:
    • DCS Cluster — 物理主机池。一个站点包含一个或多个 DCS Cluster。
    • DCS VM Folder 和 DCS Cluster Folder — 分别用于对虚拟机和集群进行逻辑分组的组织标签。
    • DCS Datastore 和 DCS Datastore Cluster — 存储容器及存储容器组。
    • DCS Distributed Virtual Switch (DVS) — 覆盖整个站点的虚拟交换机。
  • 在 DCS Cluster 内:
    • DCS Host — 物理服务器(例如 CNA-01、CNA-02)。
  • 在 DCS DVS 内:
    • DCS Port Group — 虚拟机 NIC 所连接的网络配置项。
  • 与放置层级无关:
    • DCS VM Template — 标记为模板的虚拟机,用作克隆的源镜像。
    • DCS Volume — 在 DCS Datastore 上创建的持久磁盘。

该 provider 不拥有这些对象,而是通过自定义资源字段中的名称或 URN 引用它们。

DCS 平台概念

DCS Site

单个 DCS 部署的顶层容器。站点 ID 通过 DCSCluster.spec.site 提供,也存储在云凭证 Secret 中。该 provider 使用的所有 DCS API 路径都包含站点 ID(/service/sites/{siteId}/...)。

DCS Cluster

DCS 平台上的物理主机池。DCS 调度程序会将虚拟机放置到属于单个 DCS Cluster 的主机上。一个站点可以包含一个或多个 DCS Cluster;一个 DCS Cluster 包含一个或多个 DCS Host。DCS Cluster 名称在 DCS 门户中可见,并由 GET /service/sites/{siteId}/clusters API 返回。

名称 DCS Cluster 与 Cluster API 自定义资源 DCSCluster 冲突。请参阅下文的Cluster API 资源映射。

DCS Host

在 DCS Cluster 中注册的单台物理服务器。名称遵循 DCS 平台上的本地约定(例如 CNA-01)。虚拟机在主机上运行;DCS 调度程序会根据集群级策略(DRS、反亲和规则)和主机容量,选择承载新虚拟机的主机。该 provider 不会将虚拟机固定到特定的 DCS Host;DCSMachineTemplate 资源不提供主机绑定字段。

DCS VM Folder

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

必须先在 DCS 平台上创建 VM Folder,才能在 DCSMachineTemplate.spec.template.spec.location(使用 type: folder)中引用它们。

DCS Cluster Folder

用于对 DCS Cluster 本身分组的组织标签,由同一个 /folder 端点返回,但使用不同的 type 参数。该 provider 不会查询或引用 DCS Cluster Folder。此处列出这一概念,仅为避免与 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 端口组、自定义配置),但不会覆盖磁盘的存储类型。默认情况下,克隆出的虚拟机会继承模板所在的 DCS Cluster;有关跨集群使用,请参阅基础设施 → 高级:多集群部署。

DCS Datastore

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

磁盘规格通过 datastoreName 或 datastoreUrn 引用 Datastore;该 provider 会在发送克隆请求前将名称解析为 URN。

DCS Datastore Cluster

一组 DCS Datastore。磁盘规格通过 datastoreClusterName 引用 Datastore Cluster 时,DCS 调度程序会选择其中有可用容量的成员 datastore。如果 DCS 管理员已配置 datastore cluster,建议以这种方式声明存储,因为它能够应对单个 datastore 空间耗尽的情况。

DCS Datastore Cluster 不是 DCS Cluster。两者的名称都包含“cluster”,但底层概念不同:DCS Cluster 是主机池,DCS Datastore Cluster 是 datastore 池。阅读平台文档或与 DCS 管理员交流时,请注意这一区别。

DCS Distributed Virtual Switch (DVS)

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

DCS Port Group

DCS DVS 上的网络配置项。每个端口组都包含 VLAN 配置、安全策略及其他网络设置。该 provider 使用父 DVS URI,通过 GET {dvSwitchUri}/portgroups 查询端口组,并通过名称(portGroupName)或 URN(portGroupUrn)引用它们。

虚拟机 NIC 必须恰好连接到一个 DCS Port Group。其他 NIC 需要引用其他端口组。

DCS Volume

DCS 平台上的持久磁盘。Volume 位于 DCS Datastore 上,通过 URN 标识,例如 urn:sites:EC1C108C:volumes:9841。当 DCSIpHostnamePool.spec.pool[].persistentDisk[] 声明了在虚拟机替换后仍需保留的磁盘时,该 provider 会通过 POST /service/sites/{siteId}/volumes 创建 Volume,并通过 attachvol 操作将生成的 Volume 挂载到虚拟机。

DCS Volume 在概念上不同于 Kubernetes PersistentVolume。DCS Volume 是在 hypervisor 层挂载的 DCS 平台存储对象;Kubernetes PersistentVolume 是表示可供 pod 使用的存储的 Kubernetes API 对象。该 provider 仅管理 DCS Volume;集群内的 PersistentVolume 资源由工作负载的 CSI 驱动程序单独管理。

DCS Cloud Credential

该 provider 用于调用 DCS REST API 的身份验证材料。该 provider 会向 POST /service/session 发送 X-Auth-User 和 X-Auth-Key 标头以获取会话令牌,并在后续请求中使用返回的 X-Auth-Token 标头。凭证存储在 Kubernetes Secret 中,并由 DCSCluster.spec.credentialSecretRef 引用。Secret 包含 authUser、authKey、endpoint 和 site 键。

Cluster API 资源映射

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

DCS 平台概念名称相似的 Cluster API 资源两者为何不同
DCS ClusterDCSCluster (CRD)DCS Cluster 是 DCS 平台上的物理主机池。DCSCluster 是 Cluster API 自定义资源,表示运行在 DCS 平台之上的 Kubernetes 集群的基础设施侧。单个 DCS Cluster 可以承载一个或多个 Kubernetes 集群的虚拟机。
DCS HostKubernetes NodeDCS Host 是在 DCS 平台上注册的物理服务器。Kubernetes Node 是运行 kubelet 的 Kubernetes 集群内的工作负载主机。该 provider 不会向 Kubernetes 暴露 DCS Host;Kubernetes Node 与其运行所在的 DCS Host 之间的关系由 DCS 调度程序决定,不会在任何自定义资源中表示。
DCS VM TemplateDCSMachineTemplate (CRD)DCS VM Template 是由 DCS 管理员在 DCS 平台上准备的 OS 镜像模板。DCSMachineTemplate 是引用该模板名称并添加 Kubernetes 专用配置(CPU、内存、磁盘、网络)的 Cluster API 资源。DCSMachineTemplate 不包含镜像数据;它通过 vmTemplateName 指向 DCS VM Template。
DCS VolumeKubernetes PersistentVolumeDCS Volume 是在 hypervisor 层挂载的 DCS 平台存储对象。Kubernetes PersistentVolume 是表示可供 pod 使用的存储的 Kubernetes API 对象。该 provider 创建 DCS Volume(由 DCSIpHostnamePool.spec.pool[].persistentDisk[] 驱动);Kubernetes PersistentVolume 资源由工作负载的 CSI 驱动程序独立管理。
DCS Cloud CredentialKubernetes Secret(由 DCSCluster.spec.credentialSecretRef 引用)DCS Cloud Credential 是由 DCS 平台管理员签发的用户/密钥对。它以 Kubernetes Secret 的形式提供给该 provider,其中包含 authUser、authKey、endpoint 和 site 键。

以下概念与任何 Cluster API 资源都不冲突,但由于名称中包含“cluster”,在内部容易混淆:

DCS 平台概念容易混淆的概念两者为何不同
DCS Datastore ClusterDCS ClusterDCS Datastore Cluster 是一组 DCS Datastore(存储)。DCS Cluster 是一组 DCS Host(计算)。两者都包含“cluster”一词,但属于 DCS 平台的不同层级。

存储概念:Datastore、Datastore Cluster 和 Volume

DCS 平台提供了三个由该 provider 分别引用的存储相关概念:

  • DCS Datastore 是单个存储容器。虚拟机磁盘固定到一个 DCS Datastore。
  • DCS Datastore Cluster 是一组 DCS Datastore。引用 DCS Datastore Cluster 的虚拟机磁盘会放置在其中一个有可用容量的成员 datastore 上;成员由 DCS 调度程序选择。
  • DCS Volume 是位于 DCS Datastore(或 DCS Datastore Cluster 的成员 datastore)上的持久磁盘对象。当 DCSIpHostnamePool 声明持久磁盘时,该 provider 会创建 Volume 并将其挂载到虚拟机;这些 Volume 在虚拟机替换后仍会保留。

三者之间的关系:

  • DCSMachineTemplate 在 vmConfig.dcsMachineDiskSpec[] 下声明一个或多个磁盘。每个磁盘绑定到特定的 datastoreName 或 datastoreClusterName。这些模板级磁盘会随虚拟机一同创建和销毁。
  • DCSIpHostnamePool 条目可以声明一个或多个 persistentDisk[] 项。每一项绑定到特定的 datastoreName 或 datastoreClusterName,该 provider 会创建相应的 DCS Volume,使其在虚拟机替换后仍然保留。

跨集群可见性由底层存储后端决定。SAN、IPSAN、NAS 和 FusionStorage datastore 通常对多个 DCS Cluster 可见;本地磁盘 datastore 仅对单个 DCS Cluster 可见。此可见性决定单个 DCS VM Template 是否可以克隆到多个 DCS Cluster。

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

基于 DCS 的 Kubernetes 集群的网络配置分为两个层级:

  • DCS 侧网络配置(第 2 层):虚拟机 NIC 必须连接到 DCS Port Group,而该 Port Group 属于 DCS Distributed Virtual Switch。DVS 和 Port Group 是 DCS 平台对象,由 DCS 侧创建和管理。provider 通过名称(dvSwitchName、portGroupName)或 URN(portGroupUrn)引用它们。
  • 集群侧网络标识(第 3 层):分配给虚拟机的 IP 地址、子网掩码、网关、DNS 服务器和主机名不是 DCS 平台对象。它们在 DCSIpHostnamePool.spec.pool[] 条目中声明(这是由集群 operator 所拥有的 Cluster API 资源),并在引导期间通过 cloud-init 或 Ignition 写入虚拟机。

这种划分有两个实际影响:

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

Cluster API 资源 DCSIpHostnamePool 和 DCS 平台的 Port Group 是不同的对象。DCS 平台没有原生的“IP 池”概念;DCSIpHostnamePool 资源是记录每台虚拟机网络标识的唯一位置。

字段与概念参考

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

DCSCluster 字段

字段DCS 平台概念值来源
spec.siteDCS SiteDCS 平台管理员提供的 Site ID。
spec.credentialSecretRefDCS Cloud Credential同一命名空间中的 Kubernetes Secret 名称,其中保存 DCS 用户、密钥、端点和站点信息。

DCSMachineTemplate / DCSMachine 字段

字段DCS 平台概念值来源
spec.template.spec.vmTemplateNameDCS VM Template在 DCS 平台上注册的模板名称(可在 DCS 门户中查看)。
spec.template.spec.location(与 type: folder 配合使用)DCS VM FolderDCS 平台上现有 VM Folder 的名称。必须先在 DCS 侧创建该文件夹。
spec.template.spec.location(与 type: cluster 配合使用)DCS Cluster现有 DCS Cluster 的名称。仅当模板的归属集群与目标集群不同时使用。请参阅基础设施 → 高级:多集群部署。
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 覆盖值(按 IP 设置)。未指定时回退到模板级 DVS。
spec.pool[].portGroupName / portGroupUrnDCS Port Group用于额外 NIC 的 Port Group 覆盖值(按 IP 设置)。
spec.pool[].persistentDisk[].datastoreNameDCS Datastore用于存放持久磁盘的 DCS Datastore 名称。
spec.pool[].persistentDisk[].datastoreClusterNameDCS Datastore Cluster用于创建持久磁盘的 DCS Datastore Cluster 名称。不能与 datastoreName 同时使用。
spec.pool[].persistentDisk[](条目本身)创建 DCS Volumeprovider 通过 POST /service/sites/{siteId}/volumes 创建 DCS Volume,并通过 attachvol 操作将其挂载到虚拟机。

要求

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

  • 具有 DCS administrator 角色的用户,可以是:

    • Interface interconnection user(默认),或
    • Domain user(由 LDAP/AD 支持;需要由 DCS 管理员配置 DCS 域身份验证)。

    有关选择标准和 DCS 端要求,请参阅凭证用户类型。

  • 包含 Alauda OS 镜像的虚拟机模板。使用集群上安装的 ACP 版本所发布的 Alauda OS 镜像;请参阅下载 Alauda OS。

  • 使用由池管理的持久磁盘时,需要使用 4.2.1 或更高版本的 DCS VM 模板,因为安全关机和磁盘分离依赖 guest tools

  • 具备跨主机访问能力的共享存储

文档

有关使用 DCS Provider 的详细说明,请参阅: