在 Huawei Cloud Stack 上管理节点

本文介绍如何使用 Cluster API Machine 资源在 Huawei Cloud Stack 平台上管理工作节点。

INFO

要升级节点的 Kubernetes 版本,请参阅在 Huawei Cloud Stack 上升级 Kubernetes。

先决条件

WARNING

重要先决条件

  • 执行节点操作前,必须先部署控制平面。有关设置说明,请参阅创建集群。
  • 确保您拥有 HCS 平台的适当访问权限和所需权限。
  • 要管理 global 集群本身的节点,必须先在 global 上安装 provider;请参阅管理 Alauda OS 集群上的节点。

使用本文档中的 YAML 示例时,仅将 <> 中的值替换为特定于环境的值。除非集群策略要求使用其他值,否则请保留其余字段。

概述

工作节点通过 Cluster API Machine 资源进行管理,从而以声明式和自动化的方式管理节点生命周期。一个工作节点池由以下四个资源构成:

  1. Machine Configuration Pool - 工作节点的网络设置
  2. Machine Template - VM 规格
  3. Bootstrap Configuration - 节点初始化设置
  4. Machine Deployment - 节点创建和管理的编排

您可以通过 Web UI 或 YAML 清单管理这些资源。Web UI 提供引导式体验,并且需要 Fleet Essentials;无需 Fleet Essentials 即可使用 YAML。

使用 Web UI

要求:此工作流需要 Fleet Essentials 1.0.2 或更高版本。没有该功能时,请使用使用 YAML部分中的 YAML 工作流管理节点池。

Node Pools 选项卡可用于查看控制平面和工作节点池、添加或删除工作节点池,以及编辑现有节点池的预留 IP 地址。

INFO

导航:Clusters → Clusters → 选择集群 → Node Pools 选项卡

查看节点池

Node Pools 选项卡以卡片形式显示 Control Plane Node Pool 和每个 Worker Node Pool。两种卡片类型包含相同的字段:

字段描述
Name资源名称。链接到基础 KubeadmControlPlane(控制平面)或 MachineDeployment(工作节点)。控制平面卡片带有 Control Plane 标签。
Status显示节点池运行状况的徽章。
Conditions状态条件的数量;单击可查看条件列表。
Ready Replicas已就绪节点数与期望节点数之比(例如 3 / 3)。
Kubernetes Version节点池当前的 Kubernetes 版本。
Machine Template关联的 HCSMachineTemplate;单击可打开。
Config Pool关联的 HCSMachineConfigPool;单击可打开。
SSH Authorized Keys已配置公钥的数量。
Update Strategy对于控制平面,节点会逐个替换,并且每个节点都会保留其节点 IP。对于工作节点,则根据节点池的 Max Surge 和 Max Unavailable 值执行滚动更新。

添加工作节点池

单击 Add Worker Node Pool 并完成对话框。字段与创建向导的第 5 步相同:节点池名称(带有 <cluster-name>- 前缀)、Flavor、Availability Zone、Machine Configs(主机名、网络、持久磁盘)、System Disk、Data Volumes、Replicas、Rollout Strategy 和 SSH Authorized Keys。节点池创建后,新节点会显示在 Nodes 选项卡中。

所选 Availability Zone 适用于新工作节点池中的每个节点。要将工作节点放置在其他区域,请创建单独的工作节点池并选择该区域;一个节点池不会自动将其副本分散到多个区域。下拉列表会禁用 HCS 报告为不可用的区域。有关自动选择、持久磁盘和控制平面放置限制,请参阅Availability Zone 放置。

管理节点 IP 地址

HCS 节点池中的每个节点都使用其子网中的一个预留静态 IP 地址。要更改节点池预留的地址(例如,在扩容节点池之前增加容量),请打开节点池卡片的操作菜单,然后选择 Update Config Pool 以打开 Manage IPs 对话框。

此对话框用于编辑节点池的 HCSMachineConfigPool 的机器配置。对于每个节点,您可以设置主机名、网络(每个网络包含一个从其子网中选择的 IP 地址以及该子网)和持久磁盘。IP 选择遵循与创建向导相同的规则:先选择子网,然后从列表中选择可分配的地址;已在使用的地址不会显示。

WARNING

HCS 集群使用静态 IP 地址,不使用 DHCP。在扩容节点池之前,请在节点池中预留足够的地址——除非节点池为新节点提供地址,否则新节点无法启动。

删除工作节点池

打开 Worker Node Pool 卡片的操作菜单,选择 Delete,然后确认。

WARNING

删除工作节点池会永久删除其中的所有节点以及底层 ECS 实例。请确保工作负载通过适当的副本机制能够承受这些节点的丢失。Control Plane Node Pool 无法删除。

使用 YAML

使用 Cluster API 清单管理工作节点。要使用 YAML 添加另一个工作节点池,请在集群创建页面按照部署工作节点中的步骤操作。

扩缩工作节点

工作节点扩缩允许您根据工作负载需求调整集群容量。

添加工作节点

增加工作节点数量以处理增加的工作负载。

操作步骤:

  1. 检查当前节点状态

    # List all machines in the cluster
    kubectl get machines -n cpaas-system
    
    # List machines for a specific MachineDeployment
    kubectl get machines -n cpaas-system -l cluster.x-k8s.io/deployment-name=<cluster-name>-md-0
  2. 扩展配置池

    为其他节点向池中添加新的机器配置。如果新工作节点需要保留节点本地状态(例如 /var/cpaas),请在每个新配置中包含匹配的 persistentDisks[] 条目。

    kubectl get hcsmachineconfigpool <cluster-name>-worker-pool -n cpaas-system -o yaml

    修改节点池以包含新的 IP 条目,然后应用更改:

    kubectl apply -f <updated-pool-config.yaml>

    编辑节点池时,请保持所有现有的 configs[] 条目及其已接受的 persistentDisks[] 条目不变,除非您有意追加新的磁盘插槽。

  3. 扩容 MachineDeployment

    将 replicas 字段更新为所需的节点数:

    kubectl patch machinedeployment <cluster-name>-md-0 -n cpaas-system \
      --type='json' -p='[{"op": "replace", "path": "/spec/replicas", "value": <new-replica-count>}]'
  4. 监控扩容进度

    # Watch machines being created
    kubectl get machines -n cpaas-system -w
    
    # Check MachineDeployment status
    kubectl get machinedeployment <cluster-name>-md-0 -n cpaas-system

移除工作节点

减少工作节点数量以降低集群容量。

WARNING

数据丢失警告

缩容会移除工作节点及其 ECS 实例。模板拥有的 dataVolumes[] 不会保留。在 HCSMachineConfigPool.spec.configs[].persistentDisks[] 中声明的、由节点池管理的持久磁盘仍由节点池跟踪;只要相应的主机名条目仍保留在节点池中,这些磁盘就可以重复使用。请确保:

  • 工作负载能够通过适当的副本机制承受节点丢失
  • 未将关键数据仅存储在要移除的节点上
  • 应用程序按照水平扩展方式设计

操作步骤:

  1. 缩容 MachineDeployment

    kubectl patch machinedeployment <cluster-name>-md-0 -n cpaas-system \
      --type='json' -p='[{"op": "replace", "path": "/spec/replicas", "value": <new-replica-count>}]'
  2. 监控移除进度

    kubectl get machines -n cpaas-system -w

    Cluster API 控制器将:

    • 排空选定的节点(如果可能则驱逐 Pod)
    • 从 HCS 平台删除底层 VM
    • 移除机器资源

更改机器基础设施

要更改工作节点机器规格(CPU、内存、磁盘和 VM 镜像),请创建新的机器模板,并将 MachineDeployment 指向该模板。随后,工作节点会逐个替换。请按照以下步骤操作:

注意:HCS dataVolumes[] 在替换期间不会保留。要保留节点本地状态(例如 /var/cpaas),请在发布更新前将其声明在 HCSMachineConfigPool.spec.configs[].persistentDisks[] 中,并保留 MachineDeployment.spec.strategy.rollingUpdate.maxSurge: 0。如果您的集群仍在 HCSMachineTemplate.spec.template.spec.dataVolumes[] 中保留这些磁盘,请先完成将现有 Huawei Cloud Stack 集群迁移到由节点池管理的持久磁盘。

  1. 创建新的机器模板

    复制现有的 HCSMachineTemplate 并修改所需的值:

    • imageName - VM 镜像
    • flavorName - 实例类型
    • rootVolume.size - 系统磁盘大小
    • dataVolumes - 临时数据磁盘配置

    如果需要添加新的、由节点池管理的持久磁盘,请先将其追加到工作节点的 HCSMachineConfigPool 中。Provider 会创建或声明 EVS 磁盘,但运行中的 ECS 不会挂载该磁盘,直到滚动替换创建出替代工作节点。

    kubectl get hcsmachinetemplate <current-template> -n cpaas-system -o yaml > new-template.yaml

    然后在应用前编辑 new-template.yaml:

    • 将 metadata.name 更改为 <new-template>
    • 不设置运行时身份字段,包括 spec.template.spec.providerID 和 spec.template.spec.serverId
    • 移除服务器生成的字段,例如:
      • metadata.resourceVersion
      • metadata.uid
      • metadata.creationTimestamp
      • metadata.managedFields
      • status
  2. 部署新模板

    kubectl apply -f new-template.yaml -n cpaas-system
  3. 更新 MachineDeployment

    修改 MachineDeployment 以引用新模板:

    kubectl patch machinedeployment <cluster-name>-md-0 -n cpaas-system \
      --type='merge' -p='{"spec":{"template":{"spec":{"infrastructureRef":{"name":"<new-template>"}}}}}'
  4. 监控滚动更新

    kubectl get machines -n cpaas-system -w

要更改控制平面节点的机器规格,请执行相同的步骤,并改为修补 KubeadmControlPlane.spec.machineTemplate.infrastructureRef.name。

更新引导模板

要更改工作节点的引导配置(例如 kubelet 设置或节点加入时运行的命令),请创建新的 KubeadmConfigTemplate,并将 MachineDeployment 指向该模板。就地修改现有模板不会发布到现有机器;只有新创建的机器会应用此更改。

  1. 导出现有模板

    kubectl get kubeadmconfigtemplate <cluster-name>-worker-kct -n cpaas-system -o yaml > new-bootstrap-template.yaml
  2. 修改模板

    编辑 new-bootstrap-template.yaml:

    • 将 metadata.name 设置为新的唯一名称 <new-bootstrap-template>
    • 移除服务器生成的元数据(resourceVersion、uid、creationTimestamp、managedFields、kubectl.kubernetes.io/last-applied-configuration 注解)以及整个 status 字段
    • 编辑要更改的字段。保留 kubelet 修补文件 /etc/kubernetes/patches/kubeletconfiguration0+strategic.json 的现有条目(包括证书路径),仅更改所需内容
    • 对于 Kubernetes 1.35 或更高版本,将所需的 kubelet 修补设置添加到该文件中
  3. 应用新模板

    kubectl apply -f new-bootstrap-template.yaml -n cpaas-system
  4. 更新 MachineDeployment

    kubectl patch machinedeployment <cluster-name>-md-0 -n cpaas-system \
      --type='merge' -p='{"spec":{"template":{"spec":{"bootstrap":{"configRef":{"name":"<new-bootstrap-template>"}}}}}}'

    随后开始滚动替换工作节点:

    kubectl get machines -n cpaas-system -w

验证

部署工作节点后,验证部署:

# Check machine status
kubectl get machines -n cpaas-system

# Verify nodes are Ready
kubectl get nodes

# Check MachineDeployment status
kubectl get machinedeployment -n cpaas-system

故障排除

查看控制器日志

# View HCS controller logs
kubectl logs -n cpaas-system deployment/hcs-controller-manager

# View machine details
kubectl describe hcsmachine <machine-name> -n cpaas-system

常见问题

节点无法加入集群

  • 验证 VM 模板与 Kubernetes 版本匹配
  • 检查节点之间的网络连接
  • 确保配置池中有可用条目

Machine 卡在预配阶段

  • 检查 HCS 平台是否有可用资源
  • 验证凭据和权限
  • 查看控制器日志中的错误消息