3. 节点池概念:节点池定义、节点池与集群升级的关系、节点池版本管理

3.1 节点池定义

节点池(Node Pool)是 Kubernetes 集群中一组具有相同配置的节点集合。在托管集群(如 AKS、EKS、GKE)或基于 Cluster API 的自建集群中,节点池是管理节点生命周期、扩缩容和升级的核心抽象单元。

节点池的核心属性包括:

  • 计算规格:实例类型(如 ecs.g7.xlarge)、vCPU、内存、GPU 型号。
  • 镜像:节点操作系统及预装组件版本(如 containerd、kubelet)。
  • 磁盘:系统盘与数据盘类型、大小、加密配置。
  • 网络:安全组规则、子网、弹性 IP 策略。
  • 标签与污点:用于工作负载调度隔离。
  • 伸缩配置:最小/最大节点数、扩缩容策略。
关键认知:节点池是“节点模板 + 弹性伸缩组”的组合体。升级节点池本质上是替换模板并滚动更新底层节点实例。

3.2 节点池与集群升级的关系

集群升级通常分为两个层面:控制面升级和节点池升级。节点池升级是集群升级中耗时最长、风险最高的环节。

升级层面 操作对象 影响范围 回退难度
控制面升级 API Server、Controller Manager、Scheduler、etcd 全集群 API 可用性 高(需 etcd 快照恢复)
节点池升级 kubelet、kube-proxy、节点操作系统 节点上运行的工作负载 中(可回退节点池版本)

节点池升级的典型流程:

  1. 控制面升级完成:确保 API Server 版本 ≥ 目标节点池版本。
  2. 节点池版本更新:修改节点池的 kubelet 版本或镜像版本。
  3. 滚动更新节点:逐批驱逐 Pod → 创建新节点 → 加入集群。
  4. 验证与回退:通过 Version Skew 快照确认兼容性,异常时回退节点池版本。
Version Skew 约束:kubelet 版本不能高于 API Server 版本,且不能低于 API Server 版本超过 2 个次要版本。节点池升级必须遵守此偏移量限制。
节点池升级与集群升级关系图 节点池升级与集群升级关系 集群控制面 API Server / etcd 节点池 A kubelet v1.28 节点池 B kubelet v1.29 升级顺序:控制面先升级 → 节点池逐池升级(遵守 Version Skew 约束) 节点池之间允许存在版本差异,但每个节点池的 kubelet 必须与 API Server 兼容 Version Skew 快照支持节点池回退 升级前创建节点池版本快照 → 升级后异常 → 回退节点池版本 → 滚动重建节点 回退时自动校验 Version Skew 约束,确保 kubelet 版本与当前控制面兼容

3.3 节点池版本管理

节点池版本管理是集群运维的核心能力,涉及版本定义、版本约束、版本快照和版本回退四个维度。

3.3.1 版本定义

每个节点池包含两个关键版本标识:

版本标识 说明 示例
kubelet 版本 节点上 kubelet 组件的语义化版本 v1.28.3
镜像版本 节点操作系统及预装组件的镜像标识 aliyun_2_1903_x64_20G_alibase_20240101.vhd

3.3.2 版本约束

节点池版本必须满足以下约束:

  • Version Skew 约束:kubelet 版本 ≤ API Server 版本,且 ≥ API Server 版本 - 2。
  • 镜像兼容性:节点镜像必须包含与 kubelet 版本匹配的容器运行时(containerd/Docker)。
  • 组件依赖:节点池内所有节点必须使用相同的 kubelet 版本和镜像版本。

3.3.3 版本快照

Version Skew 快照是节点池升级回退的关键支撑技术。快照内容包含:

# 节点池版本快照示例(YAML 格式)
apiVersion: nodeupgrade.example.com/v1
kind: NodePoolVersionSnapshot
metadata:
  name: nodepool-a-snapshot-20240101
  namespace: cluster-system
spec:
  nodePoolName: nodepool-a
  kubeletVersion: v1.28.3
  imageVersion: aliyun_2_1903_x64_20G_alibase_20240101.vhd
  instanceType: ecs.g7.xlarge
  createdAt: "2024-01-01T00:00:00Z"
  checksum: sha256:a1b2c3d4e5f6...
status:
  phase: Active
  nodeCount: 5
  nodeList:
    - ip-10-0-1-10
    - ip-10-0-1-11
    - ip-10-0-1-12
    - ip-10-0-1-13
    - ip-10-0-1-14

3.3.4 版本回退流程

基于 Version Skew 快照的节点池回退流程:

  1. 触发回退:检测到节点池升级后工作负载异常或 kubelet 版本不兼容。
  2. 选择快照:从快照列表中选择目标版本快照(通常为升级前的最新快照)。
  3. 校验约束:自动校验回退版本与当前控制面版本的 Version Skew 兼容性。
  4. 执行回退:将节点池版本修改为快照中的版本,触发滚动更新。
  5. 验证恢复:确认节点池内所有节点版本一致,工作负载恢复正常。
最佳实践:在每次节点池升级前自动创建 Version Skew 快照,保留至少最近 3 个快照。回退时优先选择与当前控制面版本偏移量 ≤ 2 的快照版本。
节点池版本快照与回退流程 节点池版本快照与回退流程 1 升级前 创建快照 A v1.28.3 2 升级中 滚动更新节点 v1.29.0 3 异常检测 工作负载异常 触发回退 4 回退完成 恢复快照 A v1.28.3 回退操作 Version Skew 快照存储 快照 A(当前) v1.28.3 | 5 节点 快照 B(历史) v1.27.6 | 5 节点 快照 C(历史) v1.26.9 | 5 节点

3.4 节点池版本管理最佳实践

实践项 建议 说明
快照策略 每次升级前自动创建快照 确保回退时有可用的版本基线
快照保留 保留最近 3-5 个快照 支持多级回退,避免存储膨胀
版本偏移 节点池版本 ≤ 控制面版本 遵守 Kubernetes Version Skew 策略
回退验证 回退后执行全量工作负载验证 确保回退不会引入新的兼容性问题
灰度升级 先升级非关键节点池 降低升级风险,积累验证经验
课程关联:本章的节点池版本管理知识是后续《Version Skew 快照创建与存储》《节点池升级回退演练》的基础。理解节点池版本约束和快照机制,才能正确执行升级回退操作。