节点管理
本文档介绍如何使用 Cluster API 的 Machine 资源管理工作节点。
目录
前提条件概述工作节点部署步骤 1:配置 IP-Hostname 池步骤 2:配置 Machine 模板步骤 3:配置 Bootstrap 模板步骤 4:配置 Machine 部署节点管理操作扩容工作节点添加工作节点删除工作节点升级机器基础设施更新 Bootstrap 模板升级 Kubernetes 版本前提条件
重要前提条件
- 必须先部署控制平面,才能进行节点操作。请参见创建集群获取部署说明。
- 确保您拥有访问 DCS 平台的权限及所需操作权限。
配置指南 在使用本文档中的配置时:
- 仅修改用
<>括起来的值 - 将占位符替换为您环境的具体配置
- 除非明确要求,否则保留所有默认配置
概述
工作节点通过 Cluster API 的 Machine 资源进行管理,实现声明式和自动化的节点生命周期管理。部署流程包括:
- IP-Hostname 池配置 - 工作节点的网络设置
- Machine 模板配置 - 虚拟机规格定义
- Bootstrap 配置 - 节点初始化及加入设置
- Machine 部署 - 节点创建与管理的编排
工作节点部署
步骤 1:配置 IP-Hostname 池
IP-Hostname 池定义工作节点虚拟机的网络配置。部署前需规划并配置 IP 地址、主机名、DNS 服务器及其他网络参数。
池容量要求 池中条目数量必须不少于计划部署的工作节点数量。条目不足将导致节点无法部署。
示例:
创建名为 <worker-iphostname-pool-name> 的 DCSIpHostnamePool:
关键参数:
步骤 2:配置 Machine 模板
DCSMachineTemplate 定义工作节点虚拟机的规格,包括 VM 模板、计算资源、存储配置和网络设置。
必需的磁盘配置 以下磁盘挂载点为必需,禁止删除:
- 系统卷(
systemVolume: true) /var/lib/kubelet- Kubelet 数据目录/var/lib/containerd- 容器运行时数据目录/var/cpaas- 平台相关数据目录
可根据需要添加额外磁盘,但上述配置必须保留。
示例:
创建名为 <worker-dcs-machine-template-name> 的 DCSMachineTemplate:
关键参数:
* 当父对象存在时必填
步骤 3:配置 Bootstrap 模板
KubeadmConfigTemplate 定义工作节点的引导配置,包括用户账号、SSH 密钥、系统文件及 kubeadm 加入集群的设置。
模板优化 模板已预置安全和性能优化配置,仅需修改符合您环境需求的参数。
示例:
步骤 4:配置 Machine 部署
MachineDeployment 通过引用之前配置的 DCSMachineTemplate 和 KubeadmConfigTemplate 资源,编排工作节点的创建与管理,控制节点数量并支持滚动更新。
示例:
关键参数:
节点管理操作
本节介绍管理工作节点的常见操作,包括扩缩容、更新、升级及模板修改。
Cluster API 框架 节点管理操作基于 Cluster API 框架。详细信息请参阅官方 Cluster API 文档。
扩容工作节点
工作节点扩容允许根据负载需求调整集群容量。Cluster API 通过 MachineDeployment 资源自动管理节点生命周期。
添加工作节点
增加工作节点数量以应对更高负载或新增容量。
使用场景:扩容集群以增加计算资源
前提条件:
- 确认 IP 池有足够的可用 IP 地址供新增节点使用
- 确保 DCS 平台有足够资源创建新的虚拟机
操作步骤:
-
查看当前节点状态
查看集群中现有机器:
-
扩展 IP 池
扩容前需向池中添加新节点的 IP 配置。
INFOIP 池扩容说明 IP 池条目数必须不少于期望的副本数。请为每个新增工作节点添加对应 IP 条目。
向池中添加 IP 条目:
首先导出现有池配置,保留已有条目:
然后使用以下命令添加新 IP 配置。
pool数组必须包含所有现有条目及新增条目:WARNING重要说明
pool数组必须包含所有现有条目及新增条目- 请从导出的 YAML 中复制现有条目,避免数据丢失
- 确保每个新增条目的
ip、hostname和machineName唯一 - 网络参数(
mask、gateway、dns)一般与现有条目保持一致
示例:为已有 3 个节点的池添加 2 个新节点
-
验证 IP 池容量
扩展 IP 池后,确认池中条目数量满足期望副本数:
确认池中条目不少于期望副本数。
-
扩容 MachineDeployment
修改
replicas字段为期望节点数:示例:从 3 扩容到 5 个节点
-
监控扩容进度
观察机器创建过程:
Cluster API 控制器将根据 MachineDeployment 模板自动创建新机器。
-
验证节点加入集群
切换至目标集群上下文,确认新节点状态:
新节点应出现在列表中并处于
Ready状态。
滚动更新行为 扩容时,新节点会立即创建,不影响现有节点,实现零停机扩容。
删除工作节点
减少工作节点数量以缩减集群容量或释放资源。Cluster API 支持两种删除策略:
- 随机删除:直接减少副本数,平台随机选择并删除机器
- 指定删除:标记特定机器删除,再减少副本数(推荐用于 IP 回收)
IP 回收场景 当需要回收特定机器 IP(如重新分配或管理 IP 池)时,建议使用指定删除方式。删除注解确保平台删除标记的机器,而非随机机器。
数据丢失警告 缩容会删除节点及其关联磁盘。请确保:
- 工作负载具备容忍节点丢失的能力(如副本机制)
- 重要数据未仅存储于被删除节点
- 应用设计支持水平扩展
随机删除
使用场景:缩容时任意节点均可删除,无特定 IP 要求
操作步骤:
-
查看当前机器状态
查看指定 MachineDeployment 的机器:
-
缩容 MachineDeployment
修改
replicas字段减少节点数:示例:从 5 缩容到 3 个节点
Cluster API 控制器将随机选择机器删除以匹配目标副本数。
-
监控删除进度
观察机器删除过程:
Cluster API 控制器将:
- 驱逐选中节点上的 Pod(如可能)
- 从 DCS 平台删除对应虚拟机
- 删除机器资源
-
验证节点已删除
切换至目标集群上下文:
被删除节点应不再显示。
指定删除
使用场景:删除特定机器(如 IP 回收、替换异常节点)
操作步骤:
-
确认待删除机器
查看当前机器:
记录需要删除的
<machine-name>。 -
为机器添加删除注解
标记指定机器删除:
对每个待删除机器重复此操作。
示例:删除两个指定机器
-
缩容 MachineDeployment
注解机器后,减少副本数:
INFO副本数必须与注解机器数匹配 减少的副本数应与注解机器数量完全一致。
- 减少不足,部分注解机器不会被删除
- 减少过多,额外机器将被随机删除
示例:注解了 2 台机器,则副本数减少 2(如从 5 减到 3)
平台将删除注解的机器,而非随机机器。
-
监控删除进度
观察机器删除过程:
-
验证节点已删除
切换至目标集群上下文:
被删除节点应不再显示。
升级机器基础设施
升级工作节点机器规格(CPU、内存、磁盘、VM 模板)步骤:
-
创建新 Machine 模板
- 复制当前 MachineDeployment 引用的
DCSMachineTemplate - 修改所需参数(CPU、内存、磁盘、VM 模板等)
- 赋予新模板唯一名称
- 应用新模板到集群
- 复制当前 MachineDeployment 引用的
-
更新 MachineDeployment
- 修改
MachineDeployment资源 - 更新
spec.template.spec.infrastructureRef.name指向新模板 - 应用修改
- 修改
-
滚动更新
- 系统自动触发滚动更新
- 工作节点将逐步替换为新规格节点
- 通过 MachineDeployment 状态监控更新进度
更新 Bootstrap 模板
Bootstrap 模板(KubeadmConfigTemplate)被 MachineDeployment 和 MachineSet 使用。修改现有模板不会自动触发已有机器滚动更新,仅新建机器使用新模板。
更新流程:
-
导出现有模板
-
修改配置
- 编辑导出 YAML,更新所需字段
- 修改
metadata.name为新唯一名称 - 删除多余元数据字段(如
resourceVersion、uid、creationTimestamp等)
-
创建新模板
-
更新 MachineDeployment
- 修改
MachineDeployment资源 - 更新
spec.template.spec.bootstrap.configRef.name指向新模板 - 应用修改以触发滚动更新
- 修改
模板滚动更新行为 已有机器继续使用旧的引导配置,只有新创建的机器(扩容或滚动更新时)使用新模板。
升级 Kubernetes 版本
Kubernetes 版本升级需协调更新 MachineDeployment 和底层 VM 模板,确保兼容性。
版本兼容性 确保 VM 模板中的 Kubernetes 版本与 MachineDeployment 中指定版本一致。版本不匹配将导致节点加入失败。
升级流程:
-
更新 Machine 模板
- 创建新
DCSMachineTemplate,指定支持目标 Kubernetes 版本的vmTemplateName - 确保 VM 模板包含正确的 Kubernetes 二进制文件及依赖
- 创建新
-
更新 MachineDeployment
- 修改
MachineDeployment资源:- 更新
spec.template.spec.version为目标 Kubernetes 版本 - 更新
spec.template.spec.infrastructureRef.name指向新模板 - 如需更改引导配置,可更新
spec.template.spec.bootstrap.configRef.name
- 更新
- 修改
-
监控升级
- 系统执行工作节点滚动升级
- 验证新节点成功加入集群且 Kubernetes 版本正确
- 监控集群健康状态,确保升级过程顺利完成