Huawei DCS 提供程序
目录
概述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 Resource Mapping存储概念:Datastore、Datastore Cluster 和 Volume网络概念:DVS、Port Group 和 IP 标识字段到概念的引用DCSCluster 字段DCSMachineTemplate / DCSMachine 字段DCSIpHostnamePool 字段要求文档概述
Huawei DCS Infrastructure Provider 使 Huawei Datacenter Virtualization Solution (DCS) 平台支持 Immutable Infrastructure。
DCS(Datacenter Virtualization Solution)是 Huawei 的虚拟化平台,提供企业级虚拟化能力。DCS Provider 与 DCS 集成,用于管理 Kubernetes 集群的虚拟机、网络和存储资源。
版本
池管理型持久化磁盘首次在 DCS provider v1.0.16 中得到支持。
在 v1.0.16 中,DCSIpHostnamePool.spec.pool[].persistentDisk 仅支持通过 YAML 管理;Web UI 不提供该配置项。
Alauda OS 与 Provider 兼容性
对于使用 Alauda OS 的 Huawei DCS 集群,请为集群上安装的 ACP 版本,从 OS Support Matrix 对应行中选择 Alauda OS 镜像。
对于 ACP v4.3.2 或更高版本,包括 ACP v4.4.0 及更高版本,请安装 DCS Provider v1.0.21 或更高版本。不要将 DCS Provider v1.0.21 或更高版本与早于 v4.3.2 的 ACP 版本所对应的 Alauda OS 镜像配对使用。
v1.0.21 的控制平面端点边界
DCS Provider v1.0.21 支持用于高可用控制平面端点的外部负载均衡器。它不支持 DCSCluster.spec.controlPlaneLoadBalancer.type: internal。请在 Plan the Control Plane Endpoint 中规划监听器、后端、健康检查和可达性。
主要功能
- 虚拟机管理:在 DCS 平台上创建和管理 VM
- 网络配置:支持多 NIC 配置,并可自定义网络设置
- 存储管理:灵活的磁盘配置,支持模板磁盘以及基于 IP-slot 的跨多个 datastore 的持久化磁盘
- 高可用性:内置对高可用控制平面部署的支持
- 滚动更新:自动执行滚动更新,实现零停机维护
- 升级数据保留:在滚动升级期间,可将声明的持久化磁盘从旧 VM 解绑并重新绑定到替代 VM,从而确保保留的节点本地数据不会随着系统盘丢失
集群管理能力
DCS Provider 始终通过 Cluster API manifest 支持 基于 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 的替换。此阶段 2 的 YAML 操作用 Huawei DCS 上的 Kubernetes 升级。通过 Fleet Essentials 进行的集群创建和常规 node pool 管理不受此边界影响。
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-slot 持久化磁盘仍然通过 YAML 管理 - Machine Templates - 定义 Control Plane 和 Worker Nodes 的 VM 规格,不包括池管理型持久化磁盘
集群生命周期:
- Create Clusters - 通过 5 步向导引导创建集群
- 通过 Overview、Nodes、Node Pools 和 Aligned Extensions 选项卡查看集群详情
- Upgrade Clusters - 两阶段升级:Distribution Version → Kubernetes
- 通过确认对话框销毁集群
Node Pool 管理:
- 查看 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)
- 管理 worker nodes(MachineDeployment、KubeadmConfigTemplate)
- 执行滚动更新和升级,同时在节点替换过程中保留已声明的持久化磁盘
有关基于 YAML 的说明,请参见 Creating Clusters on 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 custom resource 名称非常相似。其中有两个概念尤其需要注意,因为它们的名称完全重名:DCS Cluster(DCS 平台上的物理主机池)与 DCSCluster custom resource(表示运行在 DCS 之上的 Kubernetes 集群的 Cluster API infrastructure resource)并不是同一个对象。将二者视为同一概念会导致 DCSMachineTemplate 和 DCSCluster 配置错误。
本节列出了 provider 引用的 DCS 平台概念,将每个概念映射到引用它的 Cluster API resource 或 field,并说明网络与存储分层关系——这也是最常见的配置错误来源。
DCS 平台对象层级
DCS 平台以层级结构组织对象。provider 处理以下层(从上到下):
- DCS Site — 单个 DCS 部署的顶级范围。由如
EC1C108C这样的 site ID 标识。 - 在一个 site 内:
- DCS Clusters — 物理主机池。一个 site 包含一个或多个 DCS Clusters。
- DCS VM Folders 和 DCS Cluster Folders — 分别用于虚拟机和集群的组织标签(逻辑分组)。
- DCS Datastores 和 DCS Datastore Clusters — 存储容器及其分组。
- DCS Distributed Virtual Switches (DVS) — 跨越整个 site 的虚拟交换机。
- 在一个 DCS Cluster 内:
- DCS Hosts — 物理服务器(例如,
CNA-01、CNA-02)。
- DCS Hosts — 物理服务器(例如,
- 在一个 DCS DVS 内:
- DCS Port Groups — 虚拟机 NIC 连接到的网络配置项。
- 独立于 placement 层级:
- DCS VM Templates — 被标记为模板的虚拟机,用作克隆的源镜像。
- DCS Volumes — 在 DCS Datastores 上创建的持久化磁盘。
provider 不拥有这些对象中的任何一个。它通过 custom resource 字段按名称或 URN 引用它们。
DCS 平台概念
DCS Site
单个 DCS 部署的顶级容器。site ID 通过 DCSCluster.spec.site 提供,并且也存储在 cloud-credential Secret 中。provider 使用的所有 DCS API path 都包含该 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 Cluster 与 DCSCluster Cluster API custom resource 冲突。请参见下文的 Cluster API Resource Mapping。
DCS Host
在 DCS Cluster 中注册的单台物理服务器。名称遵循 DCS 平台上的本地约定(例如,CNA-01)。虚拟机运行在 host 上;DCS scheduler 根据 cluster 级别策略(DRS、anti-affinity 规则)和 host 容量来决定新虚拟机落在哪个 host 上。provider 不会将虚拟机固定到某个特定 DCS Host;DCSMachineTemplate resource 不暴露 host 绑定 field。
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.location 引用 VM Folders(type: 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);但不会覆盖磁盘的存储类型。默认情况下,克隆得到的虚拟机继承模板所属的 home DCS Cluster;有关跨集群使用,请参见 Infrastructure → Advanced: Multi-Cluster Deployment。
DCS Datastore
DCS 平台上的存储容器,用于保存虚拟机磁盘。Datastore 的后端可以是 SAN、IPSAN、NAS、FusionStorage 或本地磁盘。存储后端决定 datastore 是仅对一个 DCS Cluster 可见,还是对多个 DCS Clusters 可见:SAN、IPSAN、NAS 和 FusionStorage 通常支持跨集群访问;本地磁盘不支持。
disk specification 中可通过 datastoreName 或 datastoreUrn 引用 Datastore;provider 会先将名称解析为 URN,然后再发送克隆请求。
DCS Datastore Cluster
DCS Datastores 的分组。当 disk specification 通过 datastoreClusterName 引用 Datastore Cluster 时,DCS scheduler 会选择一个具有可用容量的成员 datastore。若 DCS administrator 已配置 datastore cluster,则这是声明存储的推荐方式,因为它能容忍单个 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,而 DCS 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)引用它们。
虚拟机 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 action 将该 volume 挂载到虚拟机。
DCS Volume 在概念上不同于 Kubernetes PersistentVolume。DCS Volume 是附着在 hypervisor 层的 DCS 平台存储对象;Kubernetes PersistentVolume 是表示可供 pod 使用的存储的 Kubernetes API object。provider 只管理 DCS Volumes;集群内的 PersistentVolume resources 由工作负载的 CSI driver 单独管理。
DCS Cloud Credential
provider 用于调用 DCS REST API 的认证材料。provider 通过向 POST /service/session 发送 X-Auth-User 和 X-Auth-Key headers 来获取 session token,并在后续请求中使用返回的 X-Auth-Token header。凭证以 Kubernetes Secret 的形式存储,并通过 DCSCluster.spec.credentialSecretRef 引用。该 Secret 包含 authUser、authKey、endpoint 和 site keys。
Cluster API Resource Mapping
下表用于区分那些名称与 Cluster API custom resource 相似的 DCS 平台概念。
下表中的概念不会与任何 Cluster API resource 冲突,但由于包含 “cluster” 一词,因此在内部容易混淆:
存储概念: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 会创建并将其挂载到虚拟机;它们会在虚拟机替换后继续存在。
三者之间的关系如下:
DCSMachineTemplate在vmConfig.dcsMachineDiskSpec[]下声明一个或多个磁盘。每个磁盘要么绑定到特定的datastoreName,要么绑定到datastoreClusterName。这些模板级磁盘会与虚拟机一起创建和销毁。DCSIpHostnamePool条目可以声明一个或多个persistentDisk[]项。每一项都绑定到特定的datastoreName或datastoreClusterName,并由 provider 创建一个对应的 DCS Volume,在虚拟机替换后仍然保留。
跨集群可见性由底层存储后端决定。SAN、IPSAN、NAS 和 FusionStorage datastores 通常对多个 DCS Clusters 可见;本地磁盘 datastores 仅对单个 DCS Cluster 可见。正是这种可见性决定了同一个 DCS VM Template 是否可以克隆到多个 DCS Clusters 中。
网络概念:DVS、Port Group 和 IP 标识
DCS 支持的 Kubernetes 集群网络配置分为两个层面:
- DCS 侧网络基础设施(Layer 2):虚拟机 NIC 必须连接到某个 DCS Port Group,而该 Port Group 隶属于某个 DCS Distributed Virtual Switch。DVS 和 Port Group 是 DCS 平台对象,在 DCS 侧创建和管理。provider 通过名称(
dvSwitchName、portGroupName)或 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 规划。二者通过
DCSIpHostnamePoolresource 协调:该资源一方面引用 DCS 侧的 port group,另一方面声明集群侧的 IP 标识。 - provider 不会调用任何 DCS API 来分配或预留 IP 地址。编写
DCSIpHostnamePool条目时,必须由集群 operator 避免地址冲突。
Cluster API resource DCSIpHostnamePool 与 DCS 平台的 port group 是不同对象。DCS 平台本身没有原生的 “IP pool” 概念;DCSIpHostnamePool resource 是唯一记录单个虚拟机网络标识的地方。
字段到概念的引用
下表将最常用的 custom resource 字段映射到其引用的 DCS 平台概念,以及该值的来源。
DCSCluster 字段
DCSMachineTemplate / DCSMachine 字段
DCSIpHostnamePool 字段
要求
-
具有 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 的详细说明,请参见: