华为 DCS Provider
目录
概述Alauda OS 与 Provider 兼容性主要功能集群管理能力基于 UI 的管理(Fleet Essentials)基于 YAML 的管理支持的 Kubernetes 版本架构概念与术语DCS 平台对象层次结构DCS 平台概念DCS SiteDCS ClusterDCS HostDCS VM FolderDCS Cluster FolderDCS VM TemplateDCS DatastoreDCS Datastore ClusterDCS Distributed Virtual Switch (DVS)DCS Port GroupDCS VolumeDCS Cloud CredentialCluster API 资源映射存储概念:Datastore、Datastore Cluster 和 Volume网络概念:DVS、Port Group 和 IP 身份字段到概念的对照DCSCluster 字段DCSMachineTemplate / DCSMachine 字段DCSIpHostnamePool 字段要求文档概述
华为 DCS Infrastructure Provider 可在华为数据中心虚拟化解决方案(DCS)平台上实现不可变基础设施(Immutable Infrastructure)。
DCS(Datacenter Virtualization Solution)是华为的虚拟化平台,提供企业级虚拟化能力。DCS Provider 与 DCS 集成,用于管理 Kubernetes 集群的虚拟机、网络和存储资源。
版本
池管理的持久磁盘自 DCS Provider v1.0.16 起首次支持。
在 v1.0.16 中,DCSIpHostnamePool.spec.pool[].persistentDisk 仅可通过 YAML 进行管理;Web UI 不提供此配置。
Alauda OS 与 Provider 兼容性
对于使用 Alauda OS 的华为 DCS 集群,请选择与集群上已安装的 ACP 发行版对应发布的 Alauda OS 镜像。请参阅 下载 Alauda OS。
对于 ACP v4.3.2 或更高版本(包括 ACP v4.4.0 及更高版本),请安装 DCS Provider v1.0.21 或更高版本。请勿将 DCS Provider v1.0.21 或更高版本与 ACP v4.3.2 之前发行版的 Alauda OS 镜像搭配使用。
v1.0.22 的控制平面端点边界
DCS Provider v1.0.22 在与 ACP v4.4 或更高版本搭配使用时,支持外部负载均衡器以及由 Provider 管理的 DCSCluster.spec.controlPlaneLoadBalancer.type: internal 自建 VIP。对于 type: internal,请在控制平面的二层网络中预留一个 IPv4 VIP,并使用 在华为 DCS 上创建集群 中的 YAML 工作流。DCS Provider v1.0.21 及更早版本仅支持外部负载均衡器路径。
主要功能
- 虚拟机管理:在 DCS 平台上置备和管理虚拟机
- 网络配置:支持多网卡配置及可自定义的网络设置
- 存储管理:灵活的磁盘配置,支持模板磁盘以及跨多个 Datastore 的基于 IP 槽位的持久磁盘
- 高可用性:内置对高可用控制平面部署的支持
- 自建 VIP:在 DCS Provider
v1.0.22+与 ACPv4.4+上,通过aliveruntime 由 Provider 管理控制平面 VIP - 滚动更新:自动化滚动更新,实现零停机维护
- 升级数据保留:在滚动升级期间,已声明的持久磁盘可以从旧虚拟机卸载并重新挂载到替换虚拟机,从而确保节点本地数据不会随系统盘一起丢失
集群管理能力
DCS Provider 始终支持通过 Cluster API 清单进行 基于 YAML 的集群管理。
在已安装 Fleet Essentials 且 Alauda Container Platform DCS Infrastructure Provider 为 1.0.13 或更高版本时,还支持 基于 UI 的集群管理。如果 UI 工作流依赖池管理的持久磁盘,请使用 DCS Provider v1.0.16 或更高版本。在 v1.0.16 中,DCSIpHostnamePool 上的持久磁盘声明仍仅支持 YAML。
基于 UI 的管理(Fleet Essentials)
Fleet Essentials 升级边界
Fleet Essentials 1.0.4 及更高版本可通过 CVO 请求 ACP 4.3 及更高版本的 Distribution Version 升级。它不会执行 DCS Kubernetes 和 Alauda OS 的替换。请使用 在华为 DCS 上升级 Kubernetes 完成该第 2 阶段的 YAML 操作步骤。通过 Fleet Essentials 进行的集群创建和日常节点池管理不受此边界影响。
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 清单进行管理:
基础设施资源管理:
- 云凭证 - 存储 DCS 平台访问凭证
- IP 池 - 管理 IP 地址分配和多网卡设置。在
v1.0.16中,诸如/var/cpaas等 IP 槽位持久磁盘仍通过 YAML 管理 - 机器模板 - 定义控制平面和 Worker 节点的虚拟机规格,不包括池管理的持久磁盘
集群生命周期:
- 创建集群 - 5 步向导工作流,用于引导式集群创建
- 通过 Overview、Nodes、Node Pools 和 Aligned Extensions 选项卡查看集群详情
- 升级集群 - 两阶段升级:Distribution Version → Kubernetes
- 通过确认对话框销毁集群
节点池管理:
- 查看控制平面和 Worker 节点池
- 添加 Worker 节点池,可配置副本数和滚动策略
- 删除 Worker 节点池
- 按节点池升级 Kubernetes 版本
- 查看控制平面节点池的详细 Conditions
基于 YAML 的管理
对于自动化和 GitOps 工作流,您可以使用 YAML 清单管理 DCS 集群。此工作流不依赖 Fleet Essentials:
- 定义基础设施资源(Secret、DCSIpHostnamePool、DCSMachineTemplate)
- 创建集群资源(KubeadmControlPlane、DCSCluster、Cluster)
- 管理 Worker 节点(MachineDeployment、KubeadmConfigTemplate)
- 执行滚动更新和升级,已声明的持久磁盘在节点替换过程中得以保留
有关基于 YAML 的说明,请参阅 在华为 DCS 上创建集群。
支持的 Kubernetes 版本
DCS Provider 支持 OS 支持矩阵 中定义的 Kubernetes 版本。每个 Alauda OS 发行版包含特定的 Kubernetes 版本,虚拟机模板必须使用相应的 Alauda OS 镜像创建。
架构
DCS Provider 实现了 Cluster API infrastructure provider 规范:
- DCSCluster:表示 DCS 基础设施集群
- DCSMachine:表示单个虚拟机
- DCSMachineTemplate:定义用于创建机器的虚拟机模板
- DCSIpHostnamePool:管理机器的 IP 和主机名分配
概念与术语
若干华为 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)标识。 - 在一个 Site 内:
- DCS Cluster — 物理主机池。一个 Site 包含一个或多个 DCS Cluster。
- DCS VM Folder 和 DCS Cluster Folder — 分别用于虚拟机和集群的组织标签(逻辑分组)。
- DCS Datastore 和 DCS Datastore Cluster — 存储容器以及存储容器组。
- DCS Distributed Virtual Switch (DVS) — 跨越整个 Site 的虚拟交换机。
- 在一个 DCS Cluster 内:
- DCS Host — 物理服务器(例如
CNA-01、CNA-02)。
- DCS Host — 物理服务器(例如
- 在一个 DCS DVS 内:
- DCS Port Group — 虚拟机网卡所连接的网络配置条目。
- 独立于放置层次结构:
- 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 的主机上。一个 Site 可以包含一个或多个 DCS Cluster;一个 DCS Cluster 包含一个或多个 DCS Host。DCS Cluster 名称可在 DCS 门户中查看,并由 GET /service/sites/{siteId}/clusters API 返回。
名称 DCS Cluster 与 DCSCluster Cluster API 自定义资源发生冲突。请参阅下方的 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 会覆盖网络配置(网卡端口组、自定义配置);不会覆盖磁盘的存储类型。克隆的虚拟机默认继承模板的归属 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 的组。当磁盘规格引用 Datastore Cluster(通过 datastoreClusterName)时,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 的虚拟交换机。虚拟机网卡连接到 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 Group,并通过名称(portGroupName)或 URN(portGroupUrn)引用它们。
虚拟机网卡必须恰好连接到一个 DCS Port Group。额外的网卡需要额外的 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 操作将生成的 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 平台概念。
以下概念不与任何 Cluster API 资源冲突,但由于使用了 "cluster" 一词,在内部容易混淆:
存储概念: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 并将其挂载到虚拟机;它们在虚拟机替换后仍然保留。
三者之间的关系:
DCSMachineTemplate在vmConfig.dcsMachineDiskSpec[]下声明一个或多个磁盘。每个磁盘绑定到特定的datastoreName或datastoreClusterName。这些模板级磁盘与虚拟机一起创建和销毁。DCSIpHostnamePool条目可以声明一个或多个persistentDisk[]项。每项绑定到特定的datastoreName或datastoreClusterName,Provider 会创建相应的 DCS Volume,该 Volume 在虚拟机替换后仍然保留。
跨集群可见性由底层存储后端决定。SAN、IPSAN、NAS 和 FusionStorage Datastore 通常对多个 DCS Cluster 可见;本地磁盘 Datastore 仅对单个 DCS Cluster 可见。这种可见性决定了单个 DCS VM Template 是否可以克隆到多个 DCS Cluster。
网络概念:DVS、Port Group 和 IP 身份
DCS 支撑的 Kubernetes 集群上的网络配置分为两层:
- DCS 侧网络连接(二层):虚拟机网卡必须连接到 DCS Port Group,而 Port Group 属于 DCS Distributed Virtual Switch。DVS 和 Port Group 是 DCS 平台对象,在 DCS 侧创建和管理。Provider 通过名称(
dvSwitchName、portGroupName)或 URN(portGroupUrn)引用它们。 - 集群侧网络身份(三层):分配给虚拟机的 IP 地址、子网掩码、网关、DNS 服务器和主机名不是 DCS 平台对象。它们在
DCSIpHostnamePool.spec.pool[]条目中声明(由集群 operator 拥有的 Cluster API 资源),并在引导期间通过 cloud-init 或 Ignition 写入虚拟机。
这种分层有两个实际影响:
- DCS 平台团队拥有 DVS 和 Port Group 的定义。集群 operator 拥有 IP 和主机名规划。二者通过
DCSIpHostnamePool资源进行协调,该资源在声明集群侧 IP 身份的同时引用 DCS 侧的 Port Group。 - Provider 不会调用任何 DCS API 来分配或预留 IP 地址。集群 operator 在编写
DCSIpHostnamePool条目时必须避免地址冲突。
Cluster API 资源 DCSIpHostnamePool 与 DCS 平台的 Port Group 是不同的对象。DCS 平台没有原生的 "IP 池" 概念;DCSIpHostnamePool 资源是记录每台虚拟机网络身份的唯一位置。
字段到概念的对照
以下表格将最常用的自定义资源字段映射到它们所引用的 DCS 平台概念以及取值来源。
DCSCluster 字段
DCSMachineTemplate / DCSMachine 字段
DCSIpHostnamePool 字段
要求
-
具有 API 访问权限的 DCS 平台
-
具有 DCS 管理员角色的用户,可以是:
Interface interconnection user(默认),或Domain user(LDAP/AD 后端;需要由 DCS 管理员配置 DCS 域身份验证)。
有关选择标准和 DCS 侧要求,请参阅 凭证用户类型。
-
带有 Alauda OS 镜像的虚拟机模板
-
使用池管理的持久磁盘时,DCS VM 模板需为
4.2.1或更高版本,因为安全关机和磁盘卸载依赖于 guest tools -
具有跨主机访问能力的共享存储
文档
有关使用 DCS Provider 的详细说明,请参阅: