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 中各配置模块之间的依赖关系与数据流向:

节点池配置模块关系图 节点池 YAML 元数据 (name/labels) 节点模板 (template) 自动缩放 (autoscaler) 基础设施引用 Kubernetes 版本 标签 & 污点 滚动更新策略 说明:节点模板中的基础设施引用、版本、标签/污点共同决定了节点池的实际运行规格,自动缩放与滚动策略控制其动态行为。

3.6 配置校验清单

在节点池迁移或版本升级前,建议按以下清单逐项校验配置一致性:

  1. 元数据一致性:检查 name、namespace、labels 是否与源集群对齐。
  2. 基础设施模板:比对 VM 规格、磁盘大小、网络配置是否一致。
  3. Kubernetes 版本:确认 spec.template.spec.version 与目标版本匹配。
  4. 标签与污点:逐条比对,确保调度约束无遗漏。
  5. 自动缩放参数:核对 minReplicas、maxReplicas 及缩容延迟时间。
  6. 滚动更新策略:确认 maxSurge 与 maxUnavailable 符合业务容忍度。
最佳实践: 将节点池配置以 Flux Kustomization 形式管理,每次变更前通过 flux diff ks --path ./node-pools 预览差异,确保配置可追溯、可回滚。