管理 Huawei DCS 上的节点
本文介绍如何使用 Cluster API Machine 资源管理工作节点。
如需升级节点的 Kubernetes 版本,请参阅在 Huawei DCS 上升级 Kubernetes。
目录
前提条件概述节点管理操作扩缩工作节点添加工作节点移除工作节点更改 Machine 基础设施更新 Bootstrap 模板使用 Web UI 管理节点池查看节点池添加工作节点池删除工作节点池查看 Conditions(仅限控制平面)故障排查新工作节点Machine 一直处于 Provisioning 状态,且 DCS VM 一直处于 creating 状态后续步骤前提条件
重要前提条件
- 执行节点操作前,必须先部署控制平面。有关设置说明,请参阅创建集群。
- 确保您拥有 DCS 平台的适当访问权限和所需权限。
- 要管理
global集群本身的节点,必须先在global上安装 provider;请参阅管理 Alauda OS 集群上的节点。
配置指南 使用本文档中的配置时:
- 仅修改
<>括号内的值 - 将占位值替换为特定于您环境的设置
- 除非明确要求,否则保留所有其他默认配置
概述
工作节点通过 Cluster API Machine 资源进行管理,从而以声明式和自动化的方式管理节点生命周期。一个工作节点池由以下四种资源构成:
- IP-主机名池配置 - 工作节点的网络设置
- Machine 模板设置 - VM 规格
- Bootstrap 配置 - 节点初始化和加入设置
- MachineDeployment - 节点创建和管理的编排
要使用 YAML 添加另一个工作节点池,请按照集群创建页面中的部署工作节点操作。
节点管理操作
本节介绍管理工作节点时的常见操作任务,包括扩缩容、Machine 基础设施变更以及 Bootstrap 模板更新。
Cluster API 框架 节点管理操作基于 Cluster API 框架。有关详细信息,请参阅 Cluster API 官方文档。
扩缩工作节点
工作节点扩缩容可根据工作负载需求调整集群容量。Cluster API 通过 MachineDeployment 资源自动管理节点生命周期。
添加工作节点
增加工作节点数量,以处理增加的工作负载或添加新容量。
使用场景:扩展集群以添加更多计算资源
前提条件:
- 确认 IP 池有足够的可用 IP 地址供新节点使用
- 确保 DCS 平台有足够的资源来创建新 VM
操作步骤:
-
检查当前节点状态
查看集群中的当前 Machine:
-
扩展 IP 池
扩容前,将新的 IP 配置添加到池中,以供新增节点使用。
INFOIP 池扩展 IP 池中的条目数必须至少等于所需的副本数。为计划部署的每个新增工作节点添加新的 IP 条目。
向池中添加 IP 条目:
首先,导出当前池配置以保留现有条目:
然后使用以下命令添加新的 IP 配置。
pool数组必须包含所有现有条目以及新条目:WARNING重要说明
pool数组必须包含所有现有条目以及要添加的新条目- 从导出的 YAML 中复制现有条目,以避免数据丢失
kubectl patch --type='merge'会替换整个spec.pool数组,因此请原样复制每个现有的persistentDisk块,包括其中存在的isThin,除非您确实要添加新磁盘- 确保每个新条目具有唯一的
ip、hostname和machineName值 - 如果新工作节点也需要平台要求的
/var/cpaas磁盘,请在每个新条目的persistentDisk中声明该磁盘 - 网络参数(
mask、gateway、dns)通常与现有条目一致
示例:向包含 3 个节点的现有池中添加 2 个新节点
-
验证 IP 池容量
扩展 IP 池后,验证其条目数足以满足所需的副本数:
检查池中的条目数是否至少等于所需的副本数。
-
扩展 MachineDeployment
将
replicas字段更新为所需的节点数:示例:从 3 个节点扩展到 5 个节点
-
监控扩容进度
查看 Machine 创建过程:
Cluster API 控制器将根据 MachineDeployment 模板自动创建新的 Machine。
-
验证节点已加入集群
切换到目标集群上下文并验证新节点:
新节点应出现在列表中,并转换为
Ready状态。
滚动更新行为 扩容时,新节点会立即创建,不会影响现有节点,从而确保扩容期间零停机。
移除工作节点
减少工作节点数量,以降低集群容量或移除未充分利用的资源。Cluster API 支持两种移除策略:
- 随机移除:减少副本数,由平台随机选择并删除 Machine
- 定向移除:标记要删除的特定 Machine,然后减少副本数(推荐用于 IP 回收)
IP 回收场景 需要回收特定 Machine 的 IP(例如重新分配或管理 IP 池)时,请使用定向移除方法。删除注解可确保平台删除已标记的 Machine,而不是随机删除 Machine。
数据丢失警告 缩容会移除节点及其关联的 VM。请确保:
- 工作负载通过适当的副本机制能够容忍节点丢失
- 要移除的节点上没有仅存储一份的关键数据
- 应用程序设计为支持水平扩展
仅仅因为替换 Machine,不会删除 DCSIpHostnamePool.spec.pool[].persistentDisk 中声明的持久化磁盘。在相应 IP 槽位仍保留在池中时,这些磁盘仍可供重复使用。从池中移除 IP 槽位、删除池或删除集群,都可能触发持久卷清理。
随机移除
使用场景:缩小集群,任意节点均可移除(无特定 IP 要求)
操作步骤:
-
确定当前 Machine 状态
查看 MachineDeployment 中的当前 Machine:
-
缩小 MachineDeployment
更新
replicas字段以减少节点数:示例:从 5 个节点缩小到 3 个节点
Cluster API 控制器将随机选择并删除 Machine,使其达到所需的副本数。
-
监控移除进度
查看 Machine 删除过程:
Cluster API 控制器将:
- 排空选定的节点(如果可能则驱逐 Pod)
- 从 DCS 平台删除底层 VM
- 移除 Machine 资源
-
验证节点已移除
切换到目标集群上下文:
已移除的节点不应再出现在列表中。
定向移除
使用场景:移除特定 Machine(例如回收 IP、替换运行状况不佳的节点)
操作步骤:
-
确定要移除的 Machine
查看当前 Machine:
记录要移除的 Machine 的
<machine-name>。 -
为 Machine 添加删除注解
标记要删除的特定 Machine:
对要移除的每个 Machine 重复此操作。
示例:移除两个特定的 Machine
-
缩小 MachineDeployment
为 Machine 添加注解后,减少副本数:
INFO副本数必须与已添加注解的 Machine 数量一致 副本数必须恰好减少已添加注解的 Machine 数量。
- 如果减少的数量较少,则不会移除所有已添加注解的 Machine
- 如果减少的数量较多,则会随机选择其他 Machine 进行删除
示例:如果为 2 个 Machine 添加了注解,则副本数必须恰好减少 2(例如从 5 减少到 3)
平台将删除已添加注解的 Machine,而不是随机选择的 Machine。
-
监控移除进度
查看 Machine 删除过程:
-
验证节点已移除
切换到目标集群上下文:
已移除的节点不应再出现在列表中。
更改 Machine 基础设施
要更改工作节点的 Machine 规格(CPU、内存、磁盘、VM 模板),请创建新的 Machine 模板,然后将 MachineDeployment 指向该模板。工作节点会逐个替换。
-
创建新的 Machine 模板
将
MachineDeployment引用的DCSMachineTemplate导出到新文件:在新文件中:
- 将
metadata.name设置为唯一名称 - 修改所需的值(
spec.template.spec.vmTemplateName、spec.template.spec.vmConfig.dcsMachineCpuSpec.quantity、spec.template.spec.vmConfig.dcsMachineMemorySpec.quantity、spec.template.spec.vmConfig.dcsMachineDiskSpec) - 移除服务器生成的元数据(
resourceVersion、uid、generation、creationTimestamp、managedFields、kubectl.kubernetes.io/last-applied-configuration注解)以及整个status字段 - 不设置
spec.template.spec.providerID
将池管理的持久化磁盘(包括
/var/cpaas)保留在DCSIpHostnamePool.spec.pool[].persistentDisk中,并将其他 NIC 保留在DCSIpHostnamePool.spec.pool[].additionNic[]中。仅将dcsMachineDiskSpec用于系统磁盘和模板本地磁盘。应用新模板:
- 将
-
更新 MachineDeployment
将
MachineDeployment指向新模板: -
监控滚动更新
-
工作节点将使用新规格逐个替换
-
DCSIpHostnamePool.spec.pool[].persistentDisk中声明的任何磁盘都会从旧 VM 分离,并重新连接到替换 VM。如果池使用持久化磁盘,请在MachineDeployment上将spec.strategy.rollingUpdate.maxSurge保持为0 -
监控进度:
-
要更改控制平面节点的 Machine 规格,请使用相同的步骤,并改为修补 KubeadmControlPlane.spec.machineTemplate.infrastructureRef.name。
要将节点迁移到新 Kubernetes 版本的 Alauda OS 镜像,请改为按照在 Huawei DCS 上升级 Kubernetes操作。
如果要将现有集群从旧的模板磁盘布局迁移到池管理的持久化磁盘,请在依赖升级期间的数据保留功能之前,按照将现有 Huawei DCS 集群迁移到池管理的持久化磁盘操作。
更新 Bootstrap 模板
Bootstrap 模板(KubeadmConfigTemplate)由 MachineDeployment 和 MachineSet 资源使用。更改现有模板不会自动触发现有 Machine 的滚动更新;只有新 Machine 会使用更新后的模板。
更新流程:
-
导出现有模板
-
修改配置
- 更新导出 YAML 中所需的字段
- 对于 Kubernetes 1.35 或更高版本,将所需的 kubelet 修补设置添加到
/etc/kubernetes/patches/kubeletconfiguration0+strategic.json - 将
metadata.name更改为新的唯一名称 - 移除多余的元数据字段(
resourceVersion、uid、creationTimestamp等)
-
创建新模板
-
更新 MachineDeployment
- 修改 MachineDeployment 资源
- 更新
spec.template.spec.bootstrap.configRef.name以引用新模板 - 应用更改以触发滚动更新
模板滚动更新行为 现有 Machine 继续使用旧的 Bootstrap 配置。只有新创建的 Machine(在扩缩容或滚动更新期间)会使用更新后的模板。
使用 Web UI 管理节点池
通过 Fleet Essentials 添加、删除和查看节点池不受《Fleet Essentials 限制》中所述升级限制的影响。
节点池提供了一种声明式方式,用于管理具有相同配置的节点组。您可以通过 Web UI 查看、添加和删除工作节点池。
要求:此操作流程需要 Fleet Essentials。persistentDisk 上的 DCSIpHostnamePool 声明仍仅支持 YAML,未在节点池 UI 中提供。
如果节点池依赖池管理的持久磁盘,请在使用此处的 Web UI 操作流程之前,使用 YAML 准备或更新相应的 DCSIpHostnamePool 条目。
导航:集群 → 集群 → 选择集群 → 节点池选项卡
查看节点池
节点池选项卡显示集群中的所有节点池:
控制平面节点池:
- 固定为 3 个从节点,以实现高可用性
- 显示 Kubernetes 版本;如果有可用升级,则显示升级指示器
- 显示“Conditions”链接以查看详细状态
工作节点池:
- 可自定义从节点数量
- 可单独管理 Kubernetes 版本
- 支持扩缩容和升级操作
节点池卡片信息:
添加工作节点池
导航:节点池选项卡 → 单击添加工作节点池
表单字段:
验证:
- 池名称在集群内必须唯一
- IP Pool 必须有足够的可用 IP 地址(≥ 从节点数量)
- 必须满足 maxSurge/maxUnavailable 约束
- 如果节点池依赖持久磁盘,请保留
maxSurge = 0,以便逐个替换 Machine
提示:将集群名称后接连字符作为池名称前缀(例如 mycluster-worker-1),以避免名称冲突。
创建后,新节点会显示在节点选项卡中。节点数量等于配置的从节点数量值。
删除工作节点池
操作步骤:
- 单击工作节点池卡片上的删除图标
- 在对话框中确认删除
删除工作节点池会永久移除所有关联的节点和 Machine。请通过适当的副本机制,确保工作负载能够承受这些节点的丢失。
查看 Conditions(仅限控制平面)
单击控制平面节点池卡片上的Conditions链接,查看详细状态信息。
Conditions 列表:
故障排查
新工作节点 Machine 一直处于 Provisioning 状态,且 DCS VM 一直处于 creating 状态
控制平面和工作节点 Machine 对象的诊断流程相同:当 DCSMachine 达到 Provisioning,且已设置 status.cdRomFile(DCS API 身份验证和 ISO 上传均已成功),但底层 DCS VM 始终无法调度到主机时,故障出在 DCS 平台侧,而非控制器。
有关完整的诊断步骤,请参阅基础设施 → 故障排查:VM 卡在 creating,其中包括:
- 确认问题是放置停滞(而非启动缓慢)。
- 检查数据存储的可用空间。
- 检查主机 CPU / 内存利用率和超额分配比率。
- 当单个 DCS Host 负载饱和时,与 DCS 平台团队协调以重新平衡负载。
- 部署任务确实陷入死锁时的升级处理路径。
有关跨多个物理主机实现控制平面高可用性的信息,请参阅基础设施 → 控制平面跨主机高可用性。
无论停滞的节点是新集群的第一个控制平面节点、通过 MachineDeployment 扩容添加的新工作节点,还是滚动更新期间创建的替换工作节点,诊断方法都相同。