使用节点自动预配功能


本页面介绍如何在标准 Google Kubernetes Engine (GKE) 集群中使用节点自动预配功能。 您应该已经熟悉节点自动预配这一概念。

须知事项

在开始之前,请确保您已执行以下任务:

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行 gcloud components update 以获取最新版本。

使用要求

以下 GKE 版本中提供节点自动预配功能:

  • 1.11.2-gke.25 及更高版本,适用于区域级集群。
  • 1.12.x 及更高版本,适用于区域级集群。
  • 1.27.6 及更高版本或 1.28 及更高版本,适用于 Cloud TPU v4 和 v5e。
  • 1.28.7-gke.1020000 或更高版本和 1.29.2-gke.1035000 或更高版本,适用于 Cloud TPU v5p。

启用节点自动预配功能

您可以通过 gcloud CLI 或 Google Cloud 控制台在集群上启用节点自动预配功能。

节点自动预配功能具有以下资源限制:

您必须仔细规划节点 IP 地址范围。您可以在创建集群后扩展节点 IP 地址范围。但是,我们建议您在创建集群后不要扩展节点 IP 地址范围,因为您必须更新防火墙规则以将新范围包含在来源中。您可以使用节点自动预配功能和不连续的多 Pod CIDR 来扩展 Pod IP 地址范围。

gcloud

如需启用节点自动预配功能,请运行以下命令:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --min-cpu MINIMUM_CPU \
    --min-memory MIMIMUM_MEMORY \
    --max-cpu MAXIMUM_CPU \
    --max-memory MAXIMUM_MEMORY \
    --autoprovisioning-scopes=https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring,https://www.googleapis.com/auth/devstorage.read_only

请替换以下内容:

  • CLUSTER_NAME:要启用节点自动预配功能的集群的名称。
  • MINIMUM_CPU:集群中的核心数下限。
  • MINIMUM_MEMORY:集群中的内存量下限 (GB)。
  • MAXIMUM_CPU:集群中的核心数上限。
  • MAXIMUM_MEMORY:集群中的内存量上限 (GB)。

以下示例在 dev-cluster 上启用节点自动预配功能,并允许集群总大小在 1 个 CPU 和 1 GB 内存到 10 个 CPU 和 64 GB 内存(最大值)这一范围内扩缩:

gcloud container clusters update dev-cluster \
    --enable-autoprovisioning \
    --min-cpu 1 \
    --min-memory 1 \
    --max-cpu 10 \
    --max-memory 64

控制台

如需启用节点自动预配功能,请执行以下步骤:

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    前往 Google Kubernetes Engine

  2. 点击集群的名称。

  3. 自动化部分的节点自动预配中,点击 修改

  4. 选中启用节点自动预配功能复选框。

  5. 设置所需的集群 CPU 和内存使用量最小值和最大值。

  6. 点击保存更改

使用自动预配配置文件

可以使用 YAML 配置文件来配置节点自动预配功能。如果配置文件用于更改单个设置,则其中只能有一行。可以在单个配置文件中指定多个设置。在这种情况下,在应用配置文件后,系统将更改所有这些设置。

部分高级配置只能通过使用配置文件指定。

示例 1:应用以下配置文件可为节点自动预配功能创建的所有新节点池启用节点自动修复和自动升级功能

management:
  autoRepair: true
  autoUpgrade: true

示例 2:应用以下配置文件将会更改以下设置:

  • 为 CPU、内存和 GPU 设置资源限制。如果集群的总大小超过指定的资源限制,则节点自动预配将不会创建节点。
  • 为节点自动预配功能创建的所有新节点池启用节点自动修复和自动升级功能
  • 为节点自动预配功能创建的所有新节点池启用安全启动和完整性监控功能
  • 针对节点自动预配功能创建的所有新节点池,将启动磁盘大小设置为 100 GB。
resourceLimits:
  - resourceType: 'cpu'
    minimum: 4
    maximum: 10
  - resourceType: 'memory'
    maximum: 64
  - resourceType: 'nvidia-tesla-k80'
    maximum: 4
management:
  autoRepair: true
  autoUpgrade: true
shieldedInstanceConfig:
  enableSecureBoot: true
  enableIntegrityMonitoring: true
diskSizeGb: 100

如需使用自动预配配置文件,请执行以下操作:

  1. 在 gcloud CLI 能够访问的位置创建具有所需配置的文件。

  2. 运行以下命令,将配置应用于您的集群:

    gcloud container clusters update CLUSTER_NAME \
       --enable-autoprovisioning \
       --autoprovisioning-config-file FILE_NAME

    请替换以下内容:

    • CLUSTER_NAME:集群的名称。
    • FILE_NAME:配置文件的名称。

    如需了解详情,请参阅 gcloud container clusters update 文档。

自动预配默认值

节点自动预配功能会查看集群中的 Pod 要求,以确定这些 Pod 最适合使用哪种类型的节点。但是,某些节点池设置并非由 Pod 直接指定(例如,与节点升级相关的设置)。您可以为这些设置设置默认值,这些默认值将应用于所有新创建的节点池。

设置默认节点映像类型

您可以使用 gcloud CLI 或配置文件指定要用于所有自动预配的新节点池的节点映像类型。此设置仅适用于 GKE 集群 1.20.6-gke.1800 及更高版本。

gcloud

要设置默认节点映像类型,请运行以下命令:

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning \
  --autoprovisioning-image-type IMAGE_TYPE

请替换以下内容:

  • CLUSTER_NAME:集群的名称。
  • IMAGE_TYPE节点映像类型,可以是以下值之一:

    • cos_containerd:带有 containerd 的 Container-Optimized OS。
    • ubuntu_containerd:带有 containerd 的 Ubuntu。

文件

对于所有自动预配的新节点池,您可以使用配置文件指定要使用的节点映像类型。以下 YAML 配置指定对于自动预配的新节点池,映像类型为 cos_containerd,并且具有 CPU 和内存的相关资源限制。您必须指定 CPU 和内存的最大值才能启用自动预配。

  1. 保存 YAML 配置:

    resourceLimits:
      - resourceType: 'cpu'
        minimum: 4
        maximum: 10
      - resourceType: 'memory'
        maximum: 64
    imageType: 'cos_containerd'
    
  2. 应用配置:

    gcloud container clusters update CLUSTER_NAME \
      --enable-autoprovisioning \
      --autoprovisioning-config-file FILE_NAME
    

    请替换以下内容:

    • CLUSTER_NAME:集群的名称。
    • FILE_NAME:配置文件的名称。

为自动预配的节点池设置身份默认值

Google Cloud 资源的权限由身份提供。

您可以使用 gcloud CLI 或通过配置文件为自动预配的新节点池指定默认身份(服务账号或一个或多个范围)。

gcloud

如需指定节点自动预配功能使用的默认 IAM 服务账号,请运行以下命令:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning --autoprovisioning-service-account=SERVICE_ACCOUNT

请替换以下内容:

  • CLUSTER_NAME:集群的名称。
  • SERVICE_ACCOUNT:默认服务账号的名称。

以下示例将 test-service-account@google.com 设置为 dev-cluster 集群的默认服务账号:

gcloud container clusters update dev-cluster \
    --enable-autoprovisioning --autoprovisioning-service-account=test-service-account@google.com

如需指定节点自动预配功能使用的默认范围,请运行以下命令:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning --autoprovisioning-scopes=SCOPE

请替换以下内容:

  • CLUSTER_NAME:集群的名称。
  • SCOPE:自动预配的节点池使用的 Google Cloud 范围。如需指定多个范围,请用英文逗号分隔这些范围(例如 SCOPE1, SCOPE2,...)。

以下示例将 dev-cluster 集群的默认范围设置为 devstorage.read_only

gcloud container clusters update dev-cluster \
    --enable-autoprovisioning \
    --autoprovisioning-scopes=https://www.googleapis.com/auth/pubsub,https://www.googleapis.com/auth/devstorage.read_only

文件

您可以使用配置文件指定节点自动预配功能使用的默认身份。以下 YAML 配置可设置 IAM 服务账号:

  serviceAccount: SERVICE_ACCOUNT

SERVICE_ACCOUNT 替换为默认服务账号的名称。

或者,您也可以使用以下 YAML 配置指定节点自动预配功能使用的默认范围:

  scopes: SCOPE

SCOPE 替换为自动预配的节点池使用的 Google Cloud 范围。如需指定多个范围,请用英文逗号分隔这些范围(例如 SCOPE1, SCOPE2,...)。

如需使用自动预配配置文件,请执行以下操作:

  1. 在 gcloud CLI 能够访问的位置创建一个文件,指定身份默认设置。

  2. 运行以下命令,将配置应用于您的集群:

    gcloud container clusters update CLUSTER_NAME \
       --enable-autoprovisioning \
       --autoprovisioning-config-file FILE_NAME

请替换以下内容:

  • CLUSTER_NAME:集群的名称。
  • FILE_NAME:配置文件的名称。

客户管理的加密密钥 (CMEK)

您可以指定新的自动预配节点池使用的客户管理的加密密钥 (CMEK)

您可以使用配置文件为启动磁盘启用客户管理的加密。以下 YAML 配置可设置 CMEK 密钥:

  bootDiskKmsKey: projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME

请替换以下内容:

  • KEY_PROJECT_ID:您的密钥项目 ID。
  • LOCATION:密钥环的位置。
  • KEY_RING:密钥环的名称。
  • KEY_NAME:密钥的名称。

如需使用自动预配配置文件,请执行以下操作:

  1. 在 gcloud CLI 能够访问的位置创建一个配置文件,指定 CMEK 密钥。

  2. 运行以下命令,将配置应用于您的集群:

    gcloud container clusters update CLUSTER_NAME \
       --enable-autoprovisioning \
       --autoprovisioning-config-file FILE_NAME

    请替换以下内容:

    • CLUSTER_NAME:集群的名称。
    • FILE_NAME:配置文件的名称。

节点完整性

节点自动预配功能支持在启用安全启动和完整性监控功能的情况下创建节点池。

您可以使用配置文件启用“安全启动和完整性监控功能”。以下 YAML 配置可启用安全启动并停用完整性监控功能:

  shieldedInstanceConfig:
    enableSecureBoot: true
    enableIntegrityMonitoring: false

如需使用自动预配配置文件,请执行以下操作:

  1. 将以上配置复制到 gcloud CLI 可以访问的某个位置的文件内。修改 enableSecureBootenableIntegrityMonitoring 的值。保存文件。

  2. 运行以下命令,将配置应用于您的集群:

    gcloud container clusters update CLUSTER_NAME \
       --enable-autoprovisioning \
       --autoprovisioning-config-file FILE_NAME

    请替换以下内容:

    • CLUSTER_NAME:集群的名称。
    • FILE_NAME:配置文件的名称。

节点自动修复和自动升级

节点自动预配功能支持创建启用了节点自动修复和节点自动升级的节点池。

gcloud

如需为所有自动预配的新节点池启用自动修复和自动升级,请运行以下命令:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning --enable-autoprovisioning-autorepair \
    --enable-autoprovisioning-autoupgrade

CLUSTER_NAME 替换为您的集群的名称。

如需为所有自动预配的节点池停用自动修复和自动升级功能,请运行以下命令:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning --no-enable-autoprovisioning-autorepair \
    --no-enable-autoprovisioning-autoupgrade

CLUSTER_NAME 替换为您的集群的名称。

文件

您可以使用配置文件启用或停用节点自动修复和自动升级功能。以下 YAML 配置会启用自动修复并停用自动升级:

  management:
    autoRepair: true
    autoUpgrade: false

如需使用自动预配配置文件,请执行以下操作:

  1. 将以上配置复制到 gcloud CLI 可以访问的某个位置的文件内。修改 autoUpgradeautoRepair 的值。保存文件。

  2. 运行以下命令,将配置应用于您的集群:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --autoprovisioning-config-file FILE_NAME

请替换以下内容:

  • CLUSTER_NAME:集群的名称。
  • FILE_NAME:配置文件的名称。

对新的自动配置的节点池使用超额配置升级

您可以使用 gcloud CLI 或配置文件为所有新的自动配置的节点池指定超额配置升级设置。默认情况下,GKE 会将节点升级策略设置为超额配置升级

gcloud

如需为所有自动预配的新节点池指定超额配置升级设置,请运行以下命令:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --autoprovisioning-max-surge-upgrade MAX_SURGE \
    --autoprovisioning-max-unavailable-upgrade MAX_UNAVAILABLE

请替换以下内容:

  • CLUSTER_NAME:集群的名称。
  • MAX_SURGE:升级期间可以添加到节点池的节点数上限。
  • MAX_UNAVAILABLE:升级期间在节点池中可能同时无法使用的节点数上限。

文件

您可以使用如下所示的配置文件为所有自动预配的新节点池指定超额配置升级设置。

  upgradeSettings:
    maxSurgeUpgrade: 1
    maxUnavailableUpgrade: 2

如需使用自动预配配置文件,请执行以下操作:

  1. 将以上配置复制到 gcloud 可以访问的某个位置中的文件内。修改 maxSurgeUpgrademaxUnavailableUpgrade 的值。 保存文件。

  2. 运行以下命令,将配置应用于您的集群:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --autoprovisioning-config-file FILE_NAME

请替换以下内容:

  • CLUSTER_NAME:集群的名称。
  • FILE_NAME:配置文件的名称。

如需了解详情,请参阅 gcloud container clusters update 文档。

如需切换回为新的自动配置的节点池使用超额配置升级,请运行以下命令:

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning \
  --enable-autoprovisioning-surge-upgrade

CLUSTER_NAME 替换为您的集群的名称。

您可以像在之前的命令中一样为特定设置添加标志。GKE 会重复使用先前的升级策略配置(如果已设置)。

对新的自动配置的节点池使用蓝绿升级

您可以使用 gcloud CLI 为所有新的自动配置的节点池使用蓝绿升级。通过蓝绿升级,您可以使用默认设置,或对其进行调整以针对您的环境进行优化。如需详细了解蓝绿升级,请参阅蓝绿升级

如需更新任何现有自动配置的节点的节点池升级策略,请参阅为现有节点池启用或停用超额配置升级更新现有节点池的蓝绿升级策略

以下变量将用于下文所列的命令:

  • CLUSTER_NAME:节点池的集群名称。
  • COMPUTE_ZONE:集群的区域。
  • NODE_POOL_NAME:节点池的名称。
  • NUMBER_NODES:每个集群的区域的节点池中的节点数。
  • BATCH_NODE_COUNT:蓝色池排空阶段要批量排空的蓝色节点的数量。默认值为 1。如果设置为零,则将跳过蓝色池排空阶段。
  • BATCH_PERCENT:蓝色池排空阶段要批量排空的蓝色节点的百分比。必须介于 [0.0, 1.0] 之间。
  • BATCH_SOAK_DURATION:每次批量排空后要等待的时长(以秒为单位)。默认值为零。
  • NODE_POOL_SOAK_DURATION:完成所有批量排空后要等待的时长(以秒为单位)。默认值为 3600 秒。

蓝绿升级的默认设置如下:

  • BATCH_NODE_COUNT = 1
  • BATCH_SOAK_DURATION = 0 秒
  • NODE_POOL_SOAK_DURATION = 3600 秒(1 小时)

更新集群以将蓝绿升级用于新的自动配置的节点池

以下命令使用 gcloud container clusters update 更新自动配置的新节点池的节点升级策略。

在以下情况下,您还可以使用这些标志:

如需更新集群,以使用具有新的自动配置的节点池默认设置的蓝绿升级,请使用以下命令:

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning \
  --enable-autoprovisioning-blue-green-upgrade

您可以更新集群,以使用具有新的自动配置的节点池特定设置的蓝绿升级。您也可以在不使用 --enable-autoprovisioning-blue-green-upgrade 标志的情况下使用这些命令来更新设置。

以下命令使用 BATCH_NODE_COUNT 设置绝对节点数计数批次大小:

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning \
  --enable-autoprovisioning-blue-green-upgrade \
  --autoprovisioning-node-pool-soak-duration=NODE_POOL_SOAK_DURATION \
  --autoprovisioning-standard-rollout-policy=batch-node-count=BATCH_NODE_COUNT,batch-soak-duration=BATCH_SOAK_DURATION

您还可以使用 BATCH_PERCENT 设置基于百分比的批次大小,将最后一个命令中的 batch-node-count 替换为 batch-percent,并使用 0 到 1 之间的小数(例如 25% 是 0.25)。如需了解如何设置基于百分比的批量大小,请参阅使用基于百分比的批量大小更新蓝绿部署

自定义启动磁盘

节点自动预配功能支持使用自定义启动磁盘创建节点池。

您可以使用配置文件自定义启动磁盘设置。 GKE 会为 kubelet 函数预留一部分节点启动磁盘。如需了解详情,请参阅由节点启动磁盘支持的临时存储空间

以下 YAML 配置会促使节点自动预配功能创建包含 100 GB SSD 磁盘的节点池:

  diskSizeGb: 100
  diskType: pd-ssd

指定下列内容:

  • diskSizeGb:磁盘的大小(以 GB 为单位)。
  • diskType:磁盘的类型,可以是以下值之一:
    • pd-balanced(默认)
    • pd-standard
    • pd-ssd。在 GKE 1.22 版及更早版本中,如果您指定 pd-ssd,则在创建节点池时,节点自动预配功能仅考虑 N1 机器类型

如需使用自动预配配置文件,请执行以下操作:

  1. 在 gcloud CLI 能够访问的位置创建具有所需启动磁盘配置的文件。

  2. 运行以下命令,将配置应用于您的集群:

    gcloud container clusters update CLUSTER_NAME \
       --enable-autoprovisioning \
       --autoprovisioning-config-file FILE_NAME

    请替换以下内容:

    • CLUSTER_NAME:集群的名称。
    • FILE_NAME:配置文件的名称。

kube-system Pod 与工作负载分离

作为集群管理员,您可能需要将 kube-system Pod 与工作负载分离。此配置可防止您的集群在运行 kube-system Pod 的未充分利用节点上发生缩容问题。

以下示例展示了如何组合使用节点自动预配和污点容忍功能,将 kube-system Pod 与集群工作负载分离。

  1. 创建一个具有默认 e2-standard-2 虚拟机节点池的集群:

    gcloud container clusters create test --machine-type=e2-standard-2
    
  2. 将污点应用于 default-pool 节点池:

    kubectl taint nodes -l cloud.google.com/gke-nodepool=default-pool CriticalAddonsOnly=true:NoSchedule
    

    输出类似于以下内容:

    node/gke-test-default-pool-66fd7aed-7xbd tainted
    node/gke-test-default-pool-66fd7aed-kg1x tainted
    node/gke-test-default-pool-66fd7aed-ljc7 tainted
    
  3. 为集群启用节点自动预配功能:

    gcloud container clusters update test \
        --enable-autoprovisioning \
        --min-cpu 1 \
        --min-memory 1 \
        --max-cpu 10 \
        --max-memory 64 \
        --autoprovisioning-scopes= \
          https://www.googleapis.com/auth/logging.write,\
          https://www.googleapis.com/auth/monitoring, \
          https://www.googleapis.com/auth/devstorage.read_only
    

    对于总集群大小,您的集群可以在 1 个 CPU 和 1 GB 内存与 10 个 CPU 和 64 GB 内存之间进行扩缩。

  4. 将以下示例清单保存为 nginx.yaml,对此配置进行测试:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        env: test
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
      tolerations:
      - key: dedicated
        operator: Equal
        value: ui-team
        effect: NoSchedule
      nodeSelector:
        dedicated: ui-team
    

    此清单会在集群中部署一个测试工作负载 Pod,其中包含 nodeSelector 标签和 dedicated: ui-team 节点污点。如果没有节点自动预配功能,则无法安排此工作负载 Pod,因为没有节点池具有相应的标签和污点。

  5. 将清单应用于集群:

    kubectl apply -f nginx.yaml
    

    输出类似于以下内容:

    pod/nginx created
    
  6. 查看新节点池是否具有 ui-team 标签:

    kubectl get node --selector=dedicated=ui-team
    

    输出类似于以下内容:

    NAME                                            STATUS   ROLES    AGE   VERSION
    gke-test-nap-e2-medium-14b723z1-19f89fa8-jmhr   Ready    <none>   14s   v1.21.11-gke.900
    

有了节点自动预配和污点容忍功能,您的集群就可以将 kube-system 与工作负载 Pod 分离。

将加速器用于新的自动预配节点池

您可以启用节点自动预配,并将 GKE 配置为自动预配 GPU 或 Cloud TPU 加速器,以确保安排 AI/ML 工作负载时具有所需的容量。

配置 GPU 限制

将节点自动预配功能与 GPU 搭配使用时,您可以使用 gcloud CLI 或 Google Cloud 控制台为集群中的每种 GPU 类型设置上限。GPU 限制计数是 GPU 的最大数量。例如,出于此限制目的,具有 16 个 GPU 的虚拟机计为 16 个,而不是 1 个。如需配置多种类型的 GPU,您必须使用配置文件。

如需列出可用的 resourceType,请运行 gcloud compute accelerator-types list

gcloud

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --max-cpu MAXIMUM_CPU \
    --max-memory MAXIMUM_MEMORY \
    --min-accelerator type=GPU_TYPE,count=MINIMUM_ACCELERATOR \
    --max-accelerator type=GPU_TYPE,count=MAXIMUM_ACCELERATOR

替换以下内容:

  • CLUSTER_NAME:集群的名称。
  • MAXIMUM_CPU:集群中的核心数上限。
  • MAXIMUM_MEMORY:集群中的内存量上限 (GB)。
  • GPU_TYPEGPU 类型
  • MINIMUM_ACCELERATOR:集群中的 GPU 加速器数量下限。
  • MAXIMUM_ACCELERATOR:集群中的 GPU 加速器数量上限。

以下示例为 dev-cluster 集群中的 nvidia-tesla-k80 GPU 加速器类型设置 GPU 限制:

gcloud container clusters update dev-cluster \
    --enable-autoprovisioning \
    --max-cpu 10 \
    --max-memory 64 \
    --min-accelerator type=nvidia-tesla-k80,count=1 \
    --max-accelerator type=nvidia-tesla-k80,count=4

文件

您可以使用配置文件为多种类型的 GPU 加载限制。 以下 YAML 配置可配置两种不同类型的 GPU:

  resourceLimits:
    - resourceType: 'cpu'
      minimum: 4
      maximum: 10
    - resourceType: 'memory'
      maximum: 64
    - resourceType: 'nvidia-tesla-k80'
      maximum: 4
    - resourceType: 'nvidia-tesla-v100'
      maximum: 2

如需使用自动预配配置文件,请执行以下操作:

  1. 将以上配置复制到 gcloud CLI 可以访问的某个位置的文件内。修改 cpumemory 的值。根据需要为 resourceType 添加任意数量的值。保存文件。

  2. 运行以下命令,将配置应用于您的集群:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --autoprovisioning-config-file FILE_NAME

请替换以下内容:

  • CLUSTER_NAME:集群的名称。
  • FILE_NAME:配置文件的名称。

如需了解详情,请参阅 gcloud container clusters update 文档。

控制台

要启用用于 GPU 资源的节点自动预配功能,请执行以下步骤:

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    前往 Google Kubernetes Engine

  2. 点击集群的名称。

  3. 自动化部分的节点自动预配中,点击 修改

  4. 选中启用节点自动预配功能复选框。

  5. 设置所需的集群 CPU 和内存使用量最小值和最大值。

  6. 点击 添加资源

  7. 选择要添加的 GPU 类型(例如 NVIDIA TESLA K80)。 设置需要添加到集群中的最小和最大 GPU 数量。

  8. 在 GKE 中接受 GPU 限制

  9. 点击保存更改

配置 Cloud TPU

从 GKE 1.28 版开始,您可以将节点自动预配用于 Cloud TPU。但是,节点自动预配和集群自动扩缩不支持 v5p。在集群级层定义 TPU 限制并创建 TPU 节点池。如需详细了解如何将节点自动预配用于 TPU,请参阅支持的机器学习加速器

使用 gcloud CLI 创建集群并将 Pod 配置为使用 TPU 资源。如需配置多种类型的 TPU,您必须使用配置文件。

gcloud

  1. 创建集群并定义 TPU 限制:

    gcloud container clusters create CLUSTER_NAME \
        --enable-autoprovisioning \
        [--min-cpu  MINIMUM_CPU ] \
        --max-cpu MAXIMUM_CPU \
        [--min-memory MINIMUM_MEMORY ] \
        --max-memory MAXIMUM_MEMORY \
        [--min-accelerator=type=TPU_TYPE,count= MINIMUM_ACCELERATOR ] \
        --max-accelerator=type=TPU_TYPE,count= MAXIMUM_ACCELERATOR
    

    请替换以下内容:

    • CLUSTER_NAME:集群的名称。
    • MINIMUM_CPU:集群中的 vCPU 数量下限。
    • MAXIMUM_CPU:集群中的 vCPU 数量上限。
    • MINIMUM_MEMORY:集群中的内存量下限 (GB)。
    • MAXIMUM_MEMORY:集群中的内存量上限 (GB)。
    • TPU_TYPE:您选择的 TPU 的类型。使用 tpu-v4-podslice 选择 TPU v4。如需选择机器类型以 ct5lp- 开头的 TPU v5e,请使用 tpu-v5-lite-podslice。如需选择机器类型以 ct5l- 开头的 TPU v5e,请使用 tpu-v5-lite-device
    • MINIMUM_ACCELERATOR:集群中的 TPU 芯片数量下限。
      • 请注意,即使 count 小于切片中的 TPU 芯片数量,使用 MINIMUM_ACCELERATOR 也可能会阻止多主机 TPU 切片的缩减。
    • MAXIMUM_ACCELERATOR:集群中的 TPU 芯片数量上限。
      • 如果 Pod 配置请求多主机 TPU 切片,则 GKE 会以原子方式创建此类切片。将计数值设置得足够高,以允许预配指定拓扑的所有 TPU 芯片。每个 TPU 切片中的芯片数等于拓扑的乘积。例如,如果多主机 TPU 切片的拓扑为 2x2x2,则 TPU 芯片的数量等于 8,因此 MAXIMUM_ACCELERATOR 必须高于 8。

    以下示例为 dev-cluster 集群中的 ct5lp-hightpu-1tct5lp-hightpu-4tct5lp-hightpu-8t 机器类型设置 TPU 限制。例如,最多可以预配 10 台 ct5lp-hightpu-4t 机器,每台机器具有 4 个 TPU 芯片、112 个 vCPU 和 192 GiB 内存。

    gcloud container clusters create dev-cluster-inference \
          --enable-autoprovisioning \
          --min-cpu 0 \
          --max-cpu 1120 \
          --min-memory 0 \
          --max-memory 1920 \
          --min-accelerator=type=tpu-v5-lite-podslice,count=0 \
          --max-accelerator=type=tpu-v5-lite-podslice,count=40
    
  2. 创建导致 pod 请求 TPU 资源的 Deployment 规范。例如,以下清单将导致 GKE 预配四个 ct5lp-hightpu-4t 节点:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tpu-workload
      labels:
        app: tpu-workload
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: nginx-tpu
      template:
        metadata:
          labels:
            app: nginx-tpu
        spec:
          nodeSelector:
            cloud.google.com/gke-tpu-accelerator: tpu-v5-lite-podslice
            cloud.google.com/gke-tpu-topology:  2x2
            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
    

    nodeSelector 字段中,您可以定义 TPU 类型、TPU 拓扑和加速器计数,其中:

    • cloud.google.com/gke-tpu-accelerator:定义 TPU 类型。例如 tpu-v4-podslice
    • cloud.google.com/gke-tpu-topology:定义 TPU 拓扑,例如 2x2x14x4x8

    如需让工作负载使用现有预留,请在 nodeSelector 字段中指定其他标签: * cloud.google.com/reservation-name:定义 GKE 用于自动预配节点的预留名称。

    limits: google.com/tpu 下,您可以定义每个节点的芯片数。

文件

您可以使用配置文件为多种类型的 TPU 分配限制。以下 YAML 配置可配置两种不同类型的 TPU:

  resourceLimits:
    - resourceType: 'cpu'
      maximum: 10000
    - resourceType: 'memory'
      maximum: 10000
    - resourceType: 'tpu-v4-podslice'
      maximum: 32
    - resourceType: 'tpu-v5-lite'
      maximum: 64

如需使用自动预配配置文件,请执行以下操作:

  1. 将以上配置复制到 gcloud CLI 可以访问的某个位置的文件内。修改 resourceTypemaximum 的值。根据需要为 resourceType 添加任意数量的值。保存文件。

  2. 运行以下命令,将配置应用于您的集群:

gcloud container clusters update CLUSTER_NAME \
    --enable-autoprovisioning \
    --autoprovisioning-config-file FILE_NAME

请替换以下内容:

  • CLUSTER_NAME:集群的名称。
  • FILE_NAME:配置文件的名称。

如需了解详情,请参阅 gcloud container clusters update 文档。

节点自动预配位置

您可以设置节点自动预配功能可在其中创建新节点池的地区。不支持区域位置。可用区必须属于集群所在的区域,但不限于在集群级层定义的节点位置。更改节点自动预配位置不会影响任何现有节点池。

如需设置节点自动预配功能可在其中创建新节点池的位置,请使用 gcloud CLI 或配置文件

gcloud

运行以下命令:

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning --autoprovisioning-locations=ZONE

请替换以下内容:

  • CLUSTER_NAME:集群的名称。
  • ZONE:节点自动预配功能可在其中创建新节点池的可用区。如需指定多个可用区,请用英文逗号分隔这些可用区(例如 ZONE1, ZONE2,...)。

文件

如需设置节点自动预配功能可在其中创建新节点池的位置,您可以使用配置文件

添加以下 YAML 配置以设置新节点池的位置:

    autoprovisioningLocations:
      - ZONE

ZONE 替换为节点自动预配功能可在其中创建新节点池的可用区。如需指定多个可用区,请在列表中添加更多可用区。保存文件。

如需使用自动预配配置文件,请执行以下操作:

  1. gcloud CLI 能够访问的位置创建配置文件。

  2. 将配置应用到您的集群:

    gcloud container clusters update CLUSTER_NAME \
        --enable-autoprovisioning \
        --autoprovisioning-config-file FILE_NAME
    

    请替换以下内容:

    • CLUSTER_NAME:集群的名称。
    • FILE_NAME:配置文件的路径。

物理位置更靠近且采用紧凑布置的节点

从 GKE 1.25 版开始,节点自动预配支持紧凑布置政策。借助紧凑布置政策,您可以指示 GKE 在可用区内彼此靠近的位置创建节点池。

如需定义紧凑布置政策,请将 nodeSelector 添加到具有以下的键的 Pod 规范中:

  • cloud.google.com/gke-placement-group 是您为应该在同一紧凑布置组中一起运行的 Pod 组分配的标识符。

  • cloud.google.com/machine-family 是机器系列的名称。如需了解详情,请参阅支持紧凑布置的机器系列

以下示例设置了布置组标识符为 placement-group-1 和机器系列为 c2 的紧凑布置政策:

apiVersion: v1
kind: Pod
metadata:
  ...
spec:
  ...
  nodeSelector:
    cloud.google.com/gke-placement-group: placement-group-1
    cloud.google.com/machine-family: c2

如需了解详情,请参阅如何为 GKE 节点定义紧凑布置

停用节点自动预配功能

对集群停用节点自动预配功能时,系统将不再自动预配节点池。

gcloud

如需为集群停用节点自动预配功能,请运行以下命令:

gcloud container clusters update CLUSTER_NAME \
  --no-enable-autoprovisioning

CLUSTER_NAME 替换为您的集群名称。

文件

如需使用 Google Cloud 控制台停用节点自动预配功能,请执行以下操作:

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    前往 Google Kubernetes Engine

  2. 点击集群的名称。

  3. 自动化部分的节点自动预配中,点击 修改

  4. 清除启用节点自动预配功能复选框。

  5. 点击保存更改

将节点池标记为自动预配

在集群上启用节点自动预配功能后,您可以指定自动预配哪些节点池。自动预配的节点池在没有工作负载使用它时,会被自动删除。

如需将节点池标记为自动预配,请运行以下命令:

gcloud container node-pools update NODE_POOL_NAME \
  --enable-autoprovisioning

NODE_POOL_NAME 替换为节点池的名称。

将节点池标记为不自动预配

如需将节点池标记为不自动预配,请运行以下命令:

gcloud container node-pools update NODE_POOL_NAME \
  --no-enable-autoprovisioning

NODE_POOL_NAME 替换为节点池的名称。

使用自定义机器系列

从 GKE 1.19.7-gke.800 版开始,您可以为工作负载选择机器系列。GKE 1.22 及更高版本支持 T2D 机器系列

要为工作负载选择机器系列,请执行以下任务之一:

  • 使用 cloud.google.com/machine-family 键、运算符 In 以及设置为所需机器系列的值(例如 n2)设置节点亲和性。
  • 添加键为 cloud.google.com/machine-familynodeSelector 以及设置为所需机器系列的值。

以下示例将 nodeAffinity 设置为机器系列 n2

spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: cloud.google.com/machine-family
            operator: In
            values:
            - n2

应用更改后,节点自动预配功能会选择具有指定机器系列中特定机器类型的最佳节点池。如果对匹配表达式使用多个值,则会任意选择一个值。

满足最低 CPU 要求的平台

节点自动预配功能支持创建指定了满足最低要求的 CPU 平台的节点池。您可以在工作负载级别(推荐)或集群级别指定满足最低要求的 CPU 平台。

后续步骤