本页面介绍如何在标准 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
控制台
如需启用节点自动预配功能,请执行以下步骤:
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击集群的名称。
在自动化部分的节点自动预配中,点击
修改。选中启用节点自动预配功能复选框。
设置所需的集群 CPU 和内存使用量最小值和最大值。
点击保存更改。
使用自动预配配置文件
可以使用 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
如需使用自动预配配置文件,请执行以下操作:
在 gcloud CLI 能够访问的位置创建具有所需配置的文件。
运行以下命令,将配置应用于您的集群:
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 和内存的最大值才能启用自动预配。
保存 YAML 配置:
resourceLimits: - resourceType: 'cpu' minimum: 4 maximum: 10 - resourceType: 'memory' maximum: 64 imageType: 'cos_containerd'
应用配置:
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,...
)。
如需使用自动预配配置文件,请执行以下操作:
在 gcloud CLI 能够访问的位置创建一个文件,指定身份默认设置。
运行以下命令,将配置应用于您的集群:
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
:密钥的名称。
如需使用自动预配配置文件,请执行以下操作:
在 gcloud CLI 能够访问的位置创建一个配置文件,指定 CMEK 密钥。
运行以下命令,将配置应用于您的集群:
gcloud container clusters update CLUSTER_NAME \ --enable-autoprovisioning \ --autoprovisioning-config-file FILE_NAME
请替换以下内容:
CLUSTER_NAME
:集群的名称。FILE_NAME
:配置文件的名称。
节点完整性
节点自动预配功能支持在启用安全启动和完整性监控功能的情况下创建节点池。
您可以使用配置文件启用“安全启动和完整性监控功能”。以下 YAML 配置可启用安全启动并停用完整性监控功能:
shieldedInstanceConfig: enableSecureBoot: true enableIntegrityMonitoring: false
如需使用自动预配配置文件,请执行以下操作:
将以上配置复制到 gcloud CLI 可以访问的某个位置的文件内。修改
enableSecureBoot
和enableIntegrityMonitoring
的值。保存文件。运行以下命令,将配置应用于您的集群:
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
如需使用自动预配配置文件,请执行以下操作:
将以上配置复制到 gcloud CLI 可以访问的某个位置的文件内。修改
autoUpgrade
和autoRepair
的值。保存文件。运行以下命令,将配置应用于您的集群:
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
如需使用自动预配配置文件,请执行以下操作:
将以上配置复制到
gcloud
可以访问的某个位置中的文件内。修改maxSurgeUpgrade
和maxUnavailableUpgrade
的值。 保存文件。运行以下命令,将配置应用于您的集群:
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
= 1BATCH_SOAK_DURATION
= 0 秒NODE_POOL_SOAK_DURATION
= 3600 秒(1 小时)
更新集群以将蓝绿升级用于新的自动配置的节点池
以下命令使用 gcloud container clusters
update
更新自动配置的新节点池的节点升级策略。
在以下情况下,您还可以使用这些标志:
- 使用
gcloud container clusters create
命令创建启用了节点自动配置功能的集群。 - 使用
gcoud 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 机器类型。
如需使用自动预配配置文件,请执行以下操作:
在 gcloud CLI 能够访问的位置创建具有所需启动磁盘配置的文件。
运行以下命令,将配置应用于您的集群:
gcloud container clusters update CLUSTER_NAME \ --enable-autoprovisioning \ --autoprovisioning-config-file FILE_NAME
请替换以下内容:
CLUSTER_NAME
:集群的名称。FILE_NAME
:配置文件的名称。
将 GKE 管理的 Pod 与工作负载分离
作为集群管理员,您可能需要将 GKE 管理的 Pod 与工作负载分离。如果集群中有运行系统 Pod 的未充分利用节点,则这种分离有助于避免纵向缩容问题。
以下示例展示了如何组合使用节点自动预配和 Kubernetes 污点和容忍设置,将托管式 Pod 与工作负载分离。
创建一个具有默认
e2-standard-2
虚拟机节点池的集群,并应用节点污点以仅允许 GKE 系统工作负载在这些节点上运行:gcloud container clusters create test-cluster \ --machine-type=e2-standard-2 \ --node-taints=components.gke.io/gke-managed-components=true:NoSchedule
为集群启用节点自动预配功能:
gcloud container clusters update test-cluster \ --enable-autoprovisioning \ --min-cpu 1 \ --min-memory 1 \ --max-cpu 10 \ --max-memory 64
对于总集群大小,您的集群可以在 1 个 CPU 和 1 GB 内存与 10 个 CPU 和 64 GB 内存之间进行扩缩。
将以下示例清单保存为
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,因为没有节点池具有相应的标签和污点。将清单应用于集群:
kubectl apply -f nginx.yaml
输出类似于以下内容:
pod/nginx created
查看新节点池是否具有
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
集群会将工作负载与托管式 GKE 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_TYPE
:GPU 类型。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
如需使用自动预配配置文件,请执行以下操作:
将以上配置复制到 gcloud CLI 可以访问的某个位置的文件内。修改
cpu
和memory
的值。根据需要为resourceType
添加任意数量的值。保存文件。运行以下命令,将配置应用于您的集群:
gcloud container clusters update CLUSTER_NAME \ --enable-autoprovisioning \ --autoprovisioning-config-file FILE_NAME
请替换以下内容:
CLUSTER_NAME
:集群的名称。FILE_NAME
:配置文件的名称。
如需了解详情,请参阅 gcloud container clusters update
文档。
控制台
要启用用于 GPU 资源的节点自动预配功能,请执行以下步骤:
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击集群的名称。
在自动化部分的节点自动预配中,点击
修改。选中启用节点自动预配功能复选框。
设置所需的集群 CPU 和内存使用量最小值和最大值。
点击
添加资源。选择要添加的 GPU 类型(例如 NVIDIA TESLA K80)。 设置需要添加到集群中的最小和最大 GPU 数量。
在 GKE 中接受 GPU 限制。
点击保存更改。
选择要安装的驱动程序版本
在 GKE 1.29.2-gke.1108000 版及更高版本中,您可以选择 GPU 驱动程序版本,以供 GKE 自动安装在自动预配的 GPU 节点中。请将以下字段添加到清单中:
spec:
nodeSelector:
cloud.google.com/gke-gpu-driver-version: "DRIVER_VERSION"
将 DRIVER_VERSION
替换为以下某个值:
default
- 适用于节点 GKE 版本的默认稳定驱动程序。如果您在清单中省略 nodeSelector,则这是默认选项。latest
- 适用于节点 GKE 版本的最新可用驱动程序版本。
配置 Cloud TPU
从 GKE 1.28 版开始,您可以将节点自动预配用于 Cloud TPU。但是,节点自动预配和集群自动扩缩不支持 v5p。在集群级层定义 TPU 限制并创建 TPU 节点池。如需详细了解如何将节点自动预配用于 TPU,请参阅支持的机器学习加速器。
使用 gcloud CLI 创建集群并将 Pod 配置为使用 TPU 资源。如需配置多种类型的 TPU,您必须使用配置文件。
gcloud
创建集群并定义 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。
- 如果 Pod 配置请求多主机 TPU 切片,则 GKE 会以原子方式创建此类切片。将计数值设置得足够高,以允许预配指定拓扑的所有 TPU 芯片。每个 TPU 切片中的芯片数等于拓扑的乘积。例如,如果多主机 TPU 切片的拓扑为
以下示例为
dev-cluster
集群中的ct5lp-hightpu-1t
、ct5lp-hightpu-4t
和ct5lp-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
创建导致 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 拓扑,例如2x2x1
或4x4x8
。
如需让工作负载使用现有预留,请在
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
如需使用自动预配配置文件,请执行以下操作:
将以上配置复制到 gcloud CLI 可以访问的某个位置的文件内。修改
resourceType
和maximum
的值。根据需要为resourceType
添加任意数量的值。保存文件。运行以下命令,将配置应用于您的集群:
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
替换为节点自动预配功能可在其中创建新节点池的可用区。如需指定多个可用区,请在列表中添加更多可用区。保存文件。
如需使用自动预配配置文件,请执行以下操作:
在
gcloud CLI
能够访问的位置创建配置文件。将配置应用到您的集群:
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 控制台停用节点自动预配功能,请执行以下操作:
转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击集群的名称。
在自动化部分的节点自动预配中,点击
修改。清除启用节点自动预配功能复选框。
点击保存更改。
将节点池标记为自动预配
在集群上启用节点自动预配功能后,您可以指定自动预配哪些节点池。自动预配的节点池在没有工作负载使用它时,会被自动删除。
如需将节点池标记为自动预配,请运行以下命令:
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-family
的nodeSelector
以及设置为所需机器系列的值。
以下示例将 nodeAffinity
设置为机器系列 n2
:
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: cloud.google.com/machine-family
operator: In
values:
- n2
应用更改后,节点自动预配功能会选择具有指定机器系列中特定机器类型的最佳节点池。如果对匹配表达式使用多个值,则会任意选择一个值。
满足最低 CPU 要求的平台
节点自动预配功能支持创建指定了满足最低要求的 CPU 平台的节点池。您可以在工作负载级别(推荐)或集群级别指定满足最低要求的 CPU 平台。