在 Huawei Cloud Stack 上管理节点
本文档说明如何在 Huawei Cloud Stack 平台上使用 Cluster API Machine 资源管理 worker 节点。
目录
前提条件概述worker 节点部署步骤 1:配置 Machine Configuration Poolworker 的池管理持久化磁盘步骤 2:配置 Machine Template步骤 3:配置 Bootstrap Template步骤 4:配置 Machine Deployment节点管理操作扩容 worker 节点添加 worker 节点移除 worker 节点升级 Machine 基础设施升级 Kubernetes 版本验证故障排查查看 Controller 日志常见问题前提条件
重要前提条件
- 在执行节点操作之前,必须先部署控制平面。有关设置说明,请参见 创建集群。
- 确保您对 HCS 平台具有适当的访问权限和所需的权限。
使用本文档中的 YAML 示例时,仅替换 <> 中的值,使其与环境相关。除非集群策略要求不同的值,否则请保留其余字段不变。
概述
worker 节点通过 Cluster API Machine 资源进行管理,从而提供声明式和自动化的节点生命周期管理。部署过程包括:
- Machine Configuration Pool - worker 节点的网络设置
- Machine Template - VM 规格
- Bootstrap Configuration - 节点初始化设置
- Machine Deployment - 节点创建和管理编排
worker 节点部署
在准备 worker YAML 之前,请先完成 Huawei Cloud Stack 基础设施资源 中的 HCS 输入检查清单。特别是,要在 HCSCluster.spec.network.subnets 中列出每个 worker 子网,从规划好的空闲 IP 范围中分配 worker IP,并收集 provider 可识别的 flavorName 和 availabilityZone API 值。如果您要向现有 Ready 集群添加新的 worker 子网,请使用完整的子网对象更新 HCSCluster.spec.network.subnets,而不是仅添加子网名称。
步骤 1:配置 Machine Configuration Pool
HCSMachineConfigPool 定义 worker 节点 VM 的网络配置,以及由池管理的持久化磁盘。您必须在部署之前规划并配置 IP 地址、主机名、持久化磁盘槽位以及其他参数。
池大小要求
池中的条目数必须至少与您计划部署的 worker 节点数相同。条目不足将阻止节点部署。
每个 networks[] 条目使用一个子网选择器。对于新的 manifest,请设置 subnetName 或 subnetId 其中之一,但不要同时设置两者。现有 manifest 可以保留已弃用的 subenetName 字段;如果您在更新该 manifest 时同时添加 subnetName,其值必须与 subenetName 完全一致。不要在 subenetName、subnetName 和 subnetId 之间提供冲突的值。
如果您为 worker 节点使用 subnetName, 在创建或扩容 worker 池之前,请在父级 HCSCluster.spec.network.subnets 列表中包含相同的子网名称。对于现有的 Ready 集群,请追加完整的子网对象(包括子网 ID),而不是仅添加子网名称。
*对于新的 manifest,请设置 subnetName 或 subnetId 其中之一。现有 manifest 可以继续使用 subenetName,并且仅当两个字段使用相同值时才可添加 subnetName。不要提供冲突的子网选择器值。
当指定 persistentDisks 时,持久化磁盘字段为必填。
当节点本地状态必须在 worker 替换后仍然保留时,请使用 persistentDisks[]。不要在 HCSMachineTemplate.spec.template.spec.dataVolumes[] 中声明相同的挂载路径。
注意: CRD schema 将 subnetName、subenetName 和 subnetId 列为可选字段,但未表达它们允许的组合。编写 manifest 时,请遵循上述 provider 级别规则。
注意: 当 worker 节点需要多个 NIC 时,networks[] 可以包含多个条目。当前 provider 仅将每个条目用于附加一个带有子网选择器和静态 IP 的 NIC。不支持按 NIC 声明角色、默认网关选择、静态路由、路由度量或按 NIC 的 DNS 设置。
worker 的池管理持久化磁盘
将必须在替换后仍然保留的 worker 节点磁盘声明在匹配的 HCSMachineConfigPool.spec.configs[].persistentDisks[] 条目中。对于 /var/cpaas 以及在滚动替换期间必须保留的任何其他节点本地状态,请使用此模型。
- 将临时磁盘保留在
HCSMachineTemplate.spec.template.spec.dataVolumes[]中,这些磁盘可能会随每个 ECS 重新创建。 - 对于每个 hostname,保持槽位唯一且从
0开始连续。provider 使用(hostname, slot)作为持久化磁盘标识。 - 在 provider 接受条目后,将
slot、size、type、format和mountPath视为不可变。 - 您可以更新
mountOptions。该变更会在 worker 替换后生效。 - 您可以追加新的
persistentDisks[]条目。provider 会创建或认领该 EVS 磁盘,但不会在运行中的 ECS 中热挂载该磁盘。在您期望新磁盘在客户机操作系统内完成格式化并挂载之前,请通过MachineDeployment.spec.strategy.rollingUpdate.maxSurge: 0触发滚动替换。
要在 worker 操作期间检查持久化磁盘的运行时状态,请查看池状态:
步骤 2:配置 Machine Template
HCSMachineTemplate 定义 worker 节点的 VM 规格。
为 worker 节点配置系统卷和临时数据卷,用于那些可能会随每个 ECS 重新创建的路径,例如 /var/lib/kubelet 和 /var/lib/containerd。当平台状态必须在 worker 替换后仍然保留时,请将 /var/cpaas 放入 HCSMachineConfigPool.spec.configs[].persistentDisks[]。
在准备 worker 模板时,请使用 provider 可识别的 flavorName 和 availabilityZone API 值。这些值不是租户 UI 中显示的名称。
*在指定 dataVolumes 时必填。
dataVolumes[] 会随 ECS 一起重新创建。不要将其用于 /var/cpaas 或任何其他必须在滚动替换期间保留的路径。
注意: 不要在 HCSMachineTemplate manifest 中设置运行时标识字段,例如 providerID 或 serverId。provider 会在创建 HCS 实例时分配这些值。
注意: 租户管理员无法从 HCS UI 中检索 provider 可识别的 flavorName 和 availabilityZone 值。在应用 manifest 之前,请从 HCS 管理员处获取确切值。
步骤 3:配置 Bootstrap Template
KubeadmConfigTemplate 定义 worker 节点的引导配置。
HCS controller 在解析 worker cloud-init 数据时会注入 /etc/kubernetes/pki/kubelet.crt 和 /etc/kubernetes/pki/kubelet.key。上面的 kubelet patch 会配置 kubelet 使用这些由 controller 提供的证书文件。
步骤 4:配置 Machine Deployment
MachineDeployment 负责编排 worker 节点的创建和管理。
节点管理操作
本节介绍管理 worker 节点的常见操作任务。
扩容 worker 节点
worker 节点扩容允许您根据工作负载需求调整集群容量。
添加 worker 节点
增加 worker 节点数量以处理更高的工作负载。
操作步骤:
-
检查当前节点状态
-
扩展配置池
为新增节点向池中添加新的机器配置。如果新的 worker 需要保留节点本地状态,例如
/var/cpaas,请在每个新配置中包含匹配的persistentDisks[]条目。修改池以包含新的 IP 条目,然后应用:
编辑池时,请保持所有现有的
configs[]条目及其已接受的persistentDisks[]条目不变,除非您有意追加新的磁盘槽位。 -
扩容 MachineDeployment
将
replicas字段更新为所需的节点数量: -
监控扩容进度
移除 worker 节点
减少 worker 节点数量以降低集群容量。
数据丢失警告
缩容会移除 worker 节点及其 ECS 实例。由模板拥有的 dataVolumes[] 不会被保留。在 HCSMachineConfigPool.spec.configs[].persistentDisks[] 中声明的池管理持久化磁盘会继续由池跟踪,并且只要对应的 hostname 条目仍保留在池中,就可以复用。请确保:
- 工作负载能够通过适当的复制机制容忍节点丢失
- 没有关键数据仅存储在被移除的节点上
- 应用程序针对横向扩展进行了设计
操作步骤:
-
缩容 MachineDeployment
-
监控移除进度
Cluster API controller 将会:
- 排空选定节点(如果可能则驱逐 pod)
- 从 HCS 平台删除底层 VM
- 删除 machine 资源
升级 Machine 基础设施
要升级 worker machine 规格(CPU、内存、磁盘、VM 镜像),请按以下步骤操作:
注意: worker 基础设施升级依赖 Cluster API 的滚动替换。HCS dataVolumes[] 在替换期间不会被保留。若要保留诸如 /var/cpaas 之类的节点本地状态,请在 rollout 之前将其声明在 HCSMachineConfigPool.spec.configs[].persistentDisks[] 中,并保持 MachineDeployment.spec.strategy.rollingUpdate.maxSurge: 0。
-
创建新的 Machine Template
复制现有的
HCSMachineTemplate并修改所需值:imageName- VM 镜像flavorName- 实例类型rootVolume.size- 系统盘大小dataVolumes- 临时数据盘配置
如果您需要添加新的池管理持久化磁盘,请先将其追加到 worker
HCSMachineConfigPool中。provider 会创建或认领该 EVS 磁盘,但运行中的 ECS 不会挂载它,直到这次滚动替换创建出替代的 worker。然后在应用前编辑
new-template.yaml:- 将
metadata.name更改为<new-template> - 保留运行时标识字段为空,包括
spec.template.spec.providerID和spec.template.spec.serverId - 删除由 server 生成的字段,例如:
metadata.resourceVersionmetadata.uidmetadata.creationTimestampmetadata.managedFieldsstatus
-
部署新的 Template
-
更新 Machine Deployment
修改
MachineDeployment以引用新的 template: -
监控滚动更新
升级 Kubernetes 版本
Kubernetes 版本升级需要同时协调更新 MachineDeployment 和底层 VM template。
注意: 请确保 VM template 的 Kubernetes 版本与 MachineDeployment 中指定的版本一致。版本不匹配会导致节点加入失败。
操作步骤:
-
更新 Machine Template
创建一个新的
HCSMachineTemplate,并使用支持目标 Kubernetes 版本的更新后imageName。 -
更新 MachineDeployment
修改以下字段:
-
spec.template.spec.version- 目标 Kubernetes 版本 -
spec.template.spec.infrastructureRef.name- 新的 machine template 名称
-
-
监控升级
验证新节点是否以正确的 Kubernetes 版本加入集群:
验证
部署 worker 节点后,请验证部署结果:
故障排查
查看 Controller 日志
常见问题
节点无法加入集群
- 验证 VM template 是否与 Kubernetes 版本匹配
- 检查节点之间的网络连通性
- 确保配置池中有可用条目
Machine 卡在 provisioning 中
- 检查 HCS 平台的资源可用性
- 验证凭据和权限
- 查看 controller 日志中的错误消息