3. 节点池配置基础:节点池YAML结构、节点规格、标签、污点、自动缩放配置
节点池(NodePool)是 Cluster API 与 Flux 集成后管理一组同质化工作节点的核心抽象。在迁移、回滚与版本校验场景中,节点池的 YAML 结构决定了集群的最终状态。理解其字段含义与配置逻辑,是后续进行自动化巡检与版本比对的前提。
3.1 节点池 YAML 核心结构
一个标准的节点池定义通常包含 元数据、节点模板、自动缩放 与 拓扑约束 四个部分。以下是一个基于 Azure 基础设施的典型示例:
apiVersion: cluster.x-k8s.io/v1beta1
kind: MachineDeployment
metadata:
name: prod-node-pool-x86
namespace: flux-system
labels:
pool-type: worker
arch: amd64
spec:
clusterName: prod-cluster
replicas: 3
template:
spec:
bootstrap:
configSource:
apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
kind: KubeadmConfigTemplate
name: prod-node-bootstrap
infrastructureRef:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: AzureMachineTemplate
name: prod-node-machine-x86
version: v1.28.3
nodeDrainTimeout: 5m
nodeVolumeDetachTimeout: 5m
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
pool-type: worker
关键字段说明:
spec.replicas:节点池期望节点数,与自动缩放联动。spec.template.spec.version:节点运行的 Kubernetes 版本,是版本校验的核心比对字段。spec.strategy.rollingUpdate:滚动更新策略,直接影响迁移过程中的节点替换行为。
3.2 节点规格与基础设施模板
节点规格通过 infrastructureRef 引用的基础设施模板定义。以 Azure 为例,AzureMachineTemplate 中定义了 VM 大小、磁盘类型、网络配置等。下表对比了三种常见工作负载的规格配置:
| 工作负载类型 | VM Size | OS Disk (GB) | Data Disk (GB) | 加速网络 |
|---|---|---|---|---|
| 通用计算 | Standard_D4s_v5 | 128 | — | 启用 |
| 内存密集 | Standard_E8s_v5 | 256 | 512 | 启用 |
| GPU 推理 | Standard_NC6s_v3 | 256 | — | 启用 |
迁移风险提示: 当节点池迁移到新集群时,
infrastructureRef 引用的模板名称或 API 版本可能发生变化。务必在迁移前通过 flux diff 比对基础设施模板的字段差异,避免节点规格降级。
3.3 标签与污点配置
标签(Labels)和污点(Taints)是控制 Pod 调度到特定节点池的核心机制。在节点池 YAML 中,它们通常定义在 spec.template.spec 下:
spec:
template:
spec:
labels:
node.kubernetes.io/instance-type: "standard-d4s-v5"
topology.kubernetes.io/zone: "eastus-1"
taints:
- key: "dedicated"
value: "gpu-workload"
effect: "NoSchedule"
标签与污点的配置差异直接影响 Pod 调度行为。下表总结了常见场景下的配置策略:
| 场景 | 标签示例 | 污点示例 | 调度效果 |
|---|---|---|---|
| GPU 专用池 | accelerator: nvidia-tesla |
nvidia.com/gpu: true:NoSchedule |
仅容忍该污点的 Pod 可调度 |
| 高内存池 | pool-type: highmem |
— | 通过节点亲和性选择 |
| 系统组件池 | pool-type: system |
CriticalAddonsOnly: true:NoExecute |
仅系统组件可运行 |
巡检要点: 在版本校验过程中,需检查新旧集群节点池的标签与污点是否完全一致。即使一个标签的缺失,也可能导致关键 Pod 无法调度,引发服务中断。
3.4 自动缩放配置
节点池的自动缩放通过 spec.autoscaler 字段(部分实现)或外部 Cluster Autoscaler 集成实现。在 Flux 管理的节点池中,自动缩放配置通常包含以下参数:
- minReplicas / maxReplicas:节点数的最小与最大限制。
- scaleDownDelayAfterAdd:节点加入后等待缩容的时间。
- scaleDownUnneededTime:节点被标记为不需要后的等待时间。
- maxNodeProvisionTime:节点创建超时时间。
以下是一个典型的自动缩放配置片段:
spec:
replicas: 3
autoscaler:
minReplicas: 2
maxReplicas: 10
scaleDownDelayAfterAdd: 10m
scaleDownUnneededTime: 5m
maxNodeProvisionTime: 15m
迁移回滚影响: 自动缩放配置的差异可能导致新集群在负载波动时无法正确扩缩容。建议在迁移前将目标集群的自动缩放参数与源集群对齐,并在回滚时恢复原始配置。
3.5 节点池配置关系图
下图展示了节点池 YAML 中各配置模块之间的依赖关系与数据流向:
3.6 配置校验清单
在节点池迁移或版本升级前,建议按以下清单逐项校验配置一致性:
- 元数据一致性:检查
name、namespace、labels是否与源集群对齐。 - 基础设施模板:比对 VM 规格、磁盘大小、网络配置是否一致。
- Kubernetes 版本:确认
spec.template.spec.version与目标版本匹配。 - 标签与污点:逐条比对,确保调度约束无遗漏。
- 自动缩放参数:核对
minReplicas、maxReplicas及缩容延迟时间。 - 滚动更新策略:确认
maxSurge与maxUnavailable符合业务容忍度。
最佳实践: 将节点池配置以 Flux
Kustomization 形式管理,每次变更前通过 flux diff ks --path ./node-pools 预览差异,确保配置可追溯、可回滚。