节点自动预配简介


本页面介绍节点自动预配功能在 Standard Google Kubernetes Engine (GKE) 集群中的工作原理。借助节点自动预配,节点会自动扩缩以满足工作负载的要求。

使用 Autopilot 集群时,您无需手动预配节点或管理节点池,因为 GKE 会自动管理节点扩缩和预配。

为何要使用节点自动预配

节点自动预配功能可代表用户自动管理和扩缩一组节点池。如果没有节点自动预配功能,GKE 集群自动扩缩器只会根据用户创建的节点池创建节点。启用节点自动预配功能后,GKE 会自动创建和删除节点池。

不支持的功能

节点自动预配功能不会创建使用以下任何功能的节点池create。但集群自动扩缩器会扩缩具有以下功能的现有节点池中的节点:

节点自动预配的工作原理

节点自动预配是集群自动扩缩器的一种机制,集群自动扩缩器仅扩缩现有节点池。启用节点自动预配后,集群自动扩缩器可以根据无法调度的 Pod 的规范自动创建节点池。

节点自动预配功能会根据以下信息创建节点池:

资源限制

节点自动预配功能和集群自动扩缩器在以下级层具有限制:

  • 节点池级层:自动预配的节点池中的节点数不得超过 1000 个。
  • 集群级层
    • 您定义的任何自动预配限制都根据所有节点池中使用的 CPU 和内存资源总量强制执行,而不仅仅针对自动预配的节点池。
    • 如果创建新节点会导致超出定义的某个限制,那么集群自动扩缩器不会执行此操作。如果已超出限制,GKE 不会删除节点。

工作负载分离

如果待处理 Pod 使用节点相似性和容忍设置,则节点自动预配功能可以为节点预配匹配的标签和污点。

如果满足以下所有条件,则节点自动预配功能可能会创建带有标签和污点的节点池:

  • 待处理 Pod 需要具有特定标签键和值的节点。
  • Pod 对具有相同键的污点使用容忍设置。
  • 容忍设置适用于 NoSchedule 效果、NoExecute 效果或全部效果。

如需了解相关说明,请参阅在 GKE 中配置工作负载隔离

删除自动预配的节点池

当自动预配的节点池中没有节点时,GKE 会删除该节点池。GKE 不会删除并非自动预配的节点池。

支持的机器类型

节点自动预配功能会考虑集群中的 Pod 要求,以确定这些 Pod 最适合使用哪种类型的节点。

默认情况下,GKE 使用 E2 机器系列,除非以下任何条件适用:

  • 工作负载请求 E2 机器系列不提供的功能。例如,如果工作负载请求 GPU,则 N1 机器系列将用于新节点池。
  • 工作负载请求 TPU 资源。如需详细了解 TPU,请参阅 Cloud TPU 简介
  • 工作负载使用 machine-family 标签。如需了解详情,请参阅使用自定义机器系列

如果 Pod 请求 GPU,节点自动预配功能会分配足够大的机器类型,以支持 Pod 请求的 GPU 数量。GPU 的数量限制了节点可以具有的 CPU 和内存。如需了解详情,请参阅 GPU 平台

支持的节点映像

节点自动预配功能会使用以下节点映像之一来创建节点池:

  • Container-Optimized OS (cos_containerd)。
  • Ubuntu (ubuntu_containerd)。

受支持的机器学习加速器

节点自动预配功能可以使用硬件加速器(例如 GPU 和 Cloud TPU)创建节点池。节点自动预配功能支持 GKE 1.28 及更高版本中的 TPU。

GPU

如果 Pod 请求 GPU,节点自动预配功能会分配足够大的机器类型,以支持 Pod 请求的 GPU 数量。GPU 的数量限制了节点可以具有的 CPU 和内存。如需了解详情,请参阅 GPU 平台

Cloud TPU

GKE 支持张量处理单元 (TPU) 来加速机器学习工作负载。单主机 TPU 切片节点池多主机 TPU 切片节点池都支持自动扩缩和自动预配。

通过在 GKE 集群上使用 --enable-autoprovisioning 标志,GKE 可以创建或删除具有 TPU 版本和拓扑的单主机或多主机 TPU 切片节点池,以满足待处理工作负载的要求。

使用 --enable-autoscaling 时,GKE 会根据节点池的类型扩缩节点池,如下所示:

  • 单主机 TPU 切片节点池:GKE 会在现有节点池中添加或移除 TPU 节点。节点池可以包含零到节点池最大大小(由 --max-nodes--total-max-nodes 标志确定)之间的任意数量的 TPU 节点。当节点池扩缩时,节点池中的所有 TPU 节点具有相同的机器类型和拓扑。如需详细了解如何创建单主机 TPU 切片节点池,请参阅创建节点池

  • 多主机 TPU 切片节点池:GKE 以原子方式将节点池从零扩容到满足 TPU 拓扑所需的节点数。例如,对于机器类型为 ct5lp-hightpu-4t 且拓扑为 16x16 的 TPU 节点池,节点池包含 64 个节点。GKE 自动扩缩器可确保此节点池正好包含 0 个或 64 个节点。缩容时,GKE 会逐出所有调度的 Pod,并将整个节点池排空为零。如需详细了解如何创建多主机 TPU 切片节点池,请参阅创建节点池

如果特定 TPU 切片没有正在运行或待安排的 Pod,则 GKE 会缩减节点池。多主机 TPU 切片节点池以原子方式缩减。单主机 TPU 切片节点池通过移除单独的单主机 TPU 切片来进行缩减。

使用 TPU 启用节点自动预配功能时,GKE 会根据 Pod 请求中定义的值做出扩缩决策。以下清单是 Deployment 规范的示例,它生成一个节点池,其中包含一个具有 2x2x2 拓扑和两个 ct4p-hightpu-4t 机器的 TPU v4 切片:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tpu-workload
      labels:
        app: tpu-workload
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx-tpu
      template:
        metadata:
          labels:
            app: nginx-tpu
        spec:
          nodeSelector:
            cloud.google.com/gke-tpu-accelerator: tpu-v4-podslice
            cloud.google.com/gke-tpu-topology: 2x2x2
            cloud.google.com/reservation-name: my-reservation
          containers:
          - name: nginx
            image: nginx:1.14.2
            resources:
              requests:
                google.com/tpu: 4
              limits:
               google.com/tpu: 4
            ports:
            - containerPort: 80

其中:

  • cloud.google.com/gke-tpu-accelerator:TPU 版本和类型。 例如,tpu-v4-podslice 的 TPU v4 或 tpu-v5-lite-podslice 的 TPU v5e。
  • cloud.google.com/gke-tpu-topology:TPU 切片中 TPU 芯片的数量和物理排列方式。创建节点池并启用节点自动预配功能时,请选择 TPU 拓扑。如需详细了解 Cloud TPU 拓扑,请参阅 TPU 配置
  • limit.google.com/tpu:TPU 虚拟机上的 TPU 芯片数量。 大多数配置只有一个正确的值。但是,tpu-v5-lite-podslice 具有 2x4 拓扑配置:
    • 如果指定 google.com/tpu = 8,节点自动预配功能会添加一个 ct5lp-hightpu-8t 机器,扩容单主机 TPU 切片节点池。
    • 如果指定 google.com/tpu = 4,节点自动预配功能会创建一个包含两个 ct5lp-hightpu-4t 机器的多主机 TPU 切片节点池。
  • cloud.google.com/reservation-name:工作负载使用的预留的名称。如果省略,则工作负载不使用任何预留。

如果您设置了 tpu-v4-podslice,则节点自动预配功能会做出以下决策:

在 Pod 清单中设置的值 由节点自动预配决定
gke-tpu-topology limit.google.com/tpu 节点池类型 节点池大小 机器类型
2x2x1 4 单主机 TPU 切片 灵活 ct4p-hightpu-4t
{A}x{B}x{C} 4 多主机 TPU 切片 {A}x{B}x{C}/4 ct4p-hightpu-4t

{A}x{B}x{C} 的乘积定义了节点池中的芯片数。例如,您可以定义一个具有 64 个芯片的小型拓扑,其中包含 4x4x4 等组合。如果您使用多于 64 个芯片的拓扑,则分配给 {A}、{B} 和 {C} 的值必须满足以下条件:

  • {A}、{B} 和 {C} 均小于或等于 4,或者为 4 的倍数。
  • 支持的最大拓扑为 12x16x16
  • 分配的值保持 A ≤ B ≤ C 模式。例如,2x2x42x4x4(适用于小型拓扑)。

如果您设置了 tpu-v5-lite-podslice,则节点自动预配功能会做出以下决策:

在 Pod 清单中设置的值 由节点自动预配决定
gke-tpu-topology limit.google.com/tpu 节点池类型 节点池大小 机器类型
1x1 1 单主机 TPU 切片 灵活 ct5lp-hightpu-1t
2x2 4 单主机 TPU 切片 灵活 ct5lp-hightpu-4t
2x4 8 单主机 TPU 切片 灵活 ct5lp-hightpu-8t
2x41 4 多主机 TPU 切片 2 (8/4) ct5lp-hightpu-4t
4x4 4 多主机 TPU 切片 4 (16/4) ct5lp-hightpu-4t
4x8 4 多主机 TPU 切片 8 (32/4) ct5lp-hightpu-4t
4x8 4 多主机 TPU 切片 16 (32/4) ct5lp-hightpu-4t
8x8 4 多主机 TPU 切片 16 (64/4) ct5lp-hightpu-4t
8x16 4 多主机 TPU 切片 32 (128/4) ct5lp-hightpu-4t
16x16 4 多主机 TPU 切片 64 (256/4) ct5lp-hightpu-4t
  1. 机器类型依赖于您在 google.com/tpu 限制字段中定义的值的特殊情况。

如果您将加速器类型设置为 tpu-v5-lite-device,则节点自动预配功能会做出以下决策:

在 Pod 清单中设置的值 由节点自动预配决定
gke-tpu-topology limit.google.com/tpu 节点池类型 节点池大小 机器类型
1x1 1 单主机 TPU 切片 灵活 ct5l-hightpu-1t
2x2 4 单主机 TPU 切片 灵活 ct5l-hightpu-4t
2x4 8 单主机 TPU 切片 灵活 ct5l-hightpu-8t

如需了解如何设置节点自动预配功能,请参阅配置 TPU

对 Spot 虚拟机的支持

节点自动预配功能支持基于 Spot 虚拟机创建节点池。

仅当存在容忍 cloud.google.com/gke-spot="true":NoSchedule 污点的不可调度的 Pod 时,才考虑基于 Spot 虚拟机创建节点池。污点会自动应用于基于 Spot 虚拟机的自动预配节点池中的节点。

您可以将容忍设置与 cloud.google.com/gke-spot="true"cloud.google.com/gke-provisioning=spot(对于运行 GKE 1.25.5-gke.2500 或更高版本的节点)节点标签的 nodeSelector 或节点亲和性规则结合使用,以确保您的工作负载仅在基于 Spot 虚拟机的节点池上运行。

对请求临时存储的 Pod 的支持

当 Pod 请求临时存储时,节点自动预配功能支持创建节点池。对于所有新的自动预配节点池,在节点池中预配的启动磁盘的大小都是不变的。此启动磁盘的大小可自定义

默认值为 100 GiB。不支持由本地 SSD 提供支持的临时存储

只有当具有指定启动磁盘的节点的可分配临时存储大于或等于待处理 Pod 的临时存储请求时,节点自动预配才会预配节点池。如果临时存储请求高于可分配的存储,则节点自动预配功能不会预配节点池。节点的磁盘大小不会根据待处理 Pod 的临时存储请求动态配置。

可扩缩性限制

节点自动预配功能不但具有与集群自动扩缩器相同的限制,还具有以下其他限制:

对分离的工作负载数量的限制
节点自动预配功能支持最多 100 个不同的分离的工作负载。
对节点池数量的限制
在集群中的池数量接近 100 时,节点自动预配功能不再优先创建新的节点池。您可以创建超过 100 个节点池,但仅在创建节点池是计划待处理 Pod 的唯一选择时才采用此做法。

后续步骤