使用节点自动预配


本页面介绍如何在标准 Google Kubernetes Engine (GKE) 集群中使用节点自动预配功能。

借助 Autopilot 集群,您无需担心预配节点或节点池,因为节点池通过节点自动预配自动预配;并自动扩缩以满足工作负载的要求。

概览

节点自动预配代表用户自动管理一组节点池。如果没有节点自动预配功能,则 GKE 只会从用户创建的节点池启动新节点。有了节点自动预配功能,系统会自动创建和删除新节点池。

准备工作

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

使用以下任一方法设定默认的 gcloud 设置:

  • 使用 gcloud init(如果您想要在系统引导下完成默认设置)。
  • 使用 gcloud config(如果您想单独设置项目 ID、区域和地区)。

使用 gcloud init

如果您收到 One of [--zone, --region] must be supplied: Please specify location 错误,请完成本部分。

  1. 运行 gcloud init 并按照说明操作:

    gcloud init

    如果您要在远程服务器上使用 SSH,请使用 --console-only 标志来防止命令启动浏览器:

    gcloud init --console-only
  2. 按照说明授权 gcloud 使用您的 Google Cloud 帐号。
  3. 创建新配置或选择现有配置。
  4. 选择 Google Cloud 项目。
  5. 为可用区级集群选择默认 Compute Engine 可用区,或为区域级集群或 Autopilot 集群选择区域。

使用 gcloud config

  • 设置默认项目 ID
    gcloud config set project PROJECT_ID
  • 如果您使用的是可用区级集群,请设置默认计算可用区
    gcloud config set compute/zone COMPUTE_ZONE
  • 如果您使用的是 Autopilot 集群或区域级集群,请设置默认计算区域
    gcloud config set compute/region COMPUTE_REGION
  • gcloud 更新到最新版本:
    gcloud components update

要求

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

  • 1.11.2-gke.25 及更高版本,适用于区域级集群。
  • 1.12.x 及更高版本,适用于地区级集群。

不支持的特性

节点自动预配功能不支持以下特性,也就是说,节点自动预配功能不会预配具有这些特性的节点池,但会自动扩缩现有节点池:

操作

节点自动预配是集群自动扩缩器的一种机制,该程序以每个节点池为单位进行扩缩。启用节点自动预配功能后,集群自动扩缩器可以根据无法调度的 Pod 的规范自动扩展节点池。

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

资源限制

节点自动预配功能和集群自动扩缩器有两个级层的限制:

  • 节点池级层
  • 集群级层

节点池限制

由节点自动预配功能创建的节点池不得超过 1000 个节点。

集群限制

您定义的限制将根据整个集群使用的 CPU 和内存资源总量强制执行,而不仅仅针对自动预配的节点池。

如果创建新节点会导致超出定义的某个限制,那么集群自动调节程序不会执行此操作。如果已超出限制,系统不会自动删除节点。

工作负载分离

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

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

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

Pod 的规范可以通过以下两种方式来表明它需要具有特定标签的节点:

  • 使用 nodeSelector 字段。
  • nodeAffinity 字段与 In 运算符和一个值(且仅有一个)搭配使用。

以下示例摘录自 Pod 规范,它被解释为工作负载分离请求。在此示例中,集群管理员已选择 dedicated 作为用于工作负载隔离的键,并且界面团队已确定需要使用专用节点来处理工作负载。

Pod 对标有 dedicated=ui-team 的节点使用容忍设置,并使用 nodeAffinity 选择节点:

spec:
  tolerations:
  - key: dedicated
    operator: Equal
    value: ui-team
    effect: NoSchedule
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: dedicated
            operator: In
            values:
            - ui-team

如果此 Pod 存在,则节点自动预配功能会考虑创建具有污点 dedicated=ui-team:NoSchedule 和标签 dedicated=ui-team 的节点。

以下示例使用 nodeSelector,但效果是相同的:

spec:
  tolerations:
  - key: dedicated
    operator: Equal
    value: ui-team
    effect: NoSchedule
  nodeSelector:
    dedicated: ui-team

删除自动预配的节点池

当自动预配的节点池中没有节点时,GKE 会删除该节点池。未标记为自动预配的节点池不会被删除。

支持的机器类型

从 GKE 1.19.7-gke.800 版开始,节点自动预配功能在创建节点池时考虑所有机器类型,但以下情况除外:

  • 对于 N1 机器,节点自动预配功能仅考虑最多具有 64 个 vCPU 的机器。
  • 默认情况下,系统会使用 E2 机器系列,以下情况除外:
    • 工作负载请求 E2 机器系列不提供的功能。例如,如果工作负载请求 GPU,则 N1 机器系列将用于新节点池。
    • 工作负载使用 machine-family 标签。如果无法满足工作负载请求(如上一点所述),则可能会被覆盖。如需了解详情,请参阅使用自定义机器系列

在 GKE 1.19.7-gke.800 之前的版本中,节点自动预配功能只会考虑具有多达 64 个 vCPU 的 N1 机器类型

支持的节点映像

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

  • Container-Optimized OS(coscos_containerd)。
  • Ubuntu(ubuntuubuntu_containerd)。

对 Spot 虚拟机的支持

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

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

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

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

当 Pod 请求临时存储时,节点自动预配功能支持创建节点池。在节点池中预配的启动磁盘的大小对于所有新的自动预配节点池是不变的。启动磁盘的大小可自定义,默认为 100 GiB。由本地 SSD 提供支持的临时存储不受支持。

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

GKE 1.19.7-gke.800 版或更高版本以及 1.18.12-gke.1210 版或更高版本提供对 Pod 的临时存储支持。

可扩缩性限制

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

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

启用节点自动预配功能

您可以使用 gcloud 或 Google Cloud Console 在集群上启用节点自动预配功能。

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. 转到 Cloud Console 中的 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 能够访问的位置配置具有所需配置的文件。

  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 工具或配置文件指定要用于所有新的自动预配节点池的节点映像类型。 此设置仅适用于 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。
    • cos:带有 Docker 的 Container-Optimized OS。
    • ubuntu_containerd:带有 containerd 的 Ubuntu。
    • ubuntu:带有 Docker 的 Ubuntu。

文件

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

  1. 保存 YAML 配置:

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

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

    请替换以下内容:

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

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

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

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

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 能够访问的位置创建指定默认身份的配置文件。

  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 能够访问的位置中创建指定 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 可以访问的某个位置中的文件内。修改 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 可以访问的某个位置中的文件内。修改 autoUpgradeautoRepair 的值。保存文件。

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

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

请替换以下内容:

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

节点超额配置升级设置

您可以使用 gcloud 工具或配置文件为所有自动预配的新节点池指定超额配置升级设置

gcloud

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

gcloud container clusters update CLUSTER_NAME \
    --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 文档。

自定义启动磁盘

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

您可以使用配置文件自定义启动磁盘设置。以下 YAML 配置会促使节点自动预配功能创建包含 100 GB SSD 磁盘的节点池:

  diskSizeGb: 100
  diskType: pd-ssd

指定下列内容:

  • diskSizeGb:磁盘的大小(以 GB 为单位)。
  • diskType:磁盘的类型,可以是以下值之一:
    • pd-standard:标准永久性磁盘(默认值)。
    • pd-ssd:SSD 永久性磁盘。

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

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

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

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

    请替换以下内容:

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

满足最低要求的 CPU 平台

节点自动预配功能支持创建满足最低要求的 CPU 平台的节点池。

您可以使用 gcloud 工具或配置文件为自动预配的新节点池指定默认的满足最低要求的 CPU 平台。

gcloud

如需设置默认的最低要求的 CPU 平台,请运行以下命令:

gcloud container clusters update CLUSTER_NAME \
  --enable-autoprovisioning \
  --autoprovisioning-min-cpu-platform MIN_CPU_PLATFORM

替换以下内容:

文件

如需设置默认的最低要求的 CPU 平台,您可以使用配置文件。以下 YAML 配置可设置默认的最低要求的 CPU 平台:

minCpuPlatform: MIN_CPU_PLATFORM

MIN_CPU_PLATFORM 替换为您需要的满足最低要求的 CPU 平台

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

  1. gcloud 能够访问的位置创建一个配置文件,其指定满足最低要求的 CPU 平台。

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

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

请替换以下内容:

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

配置 GPU 限制

将节点自动预配功能与 GPU 搭配使用时,您可以使用 gcloud 工具或 Google Cloud Console 为集群中的每种 GPU 类型设置上限。如需配置多种类型的 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 可以访问的某个位置中的文件内。修改 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. 转到 Cloud Console 中的 Google Kubernetes Engine 页面:

    转到 Google Kubernetes Engine

  2. 点击集群的名称。

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

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

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

  6. 点击 添加资源

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

  8. 在 GKE 中接受 GPU 限制

  9. 点击保存更改

节点自动预配位置

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

如需设置节点自动预配功能可在其中创建新节点池的位置,请运行以下命令:

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

请替换以下内容:

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

停用节点自动预配功能

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

gcloud

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

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

CLUSTER_NAME 替换为您的集群名称。

控制台

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

  1. 转到 Cloud Console 中的 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 版开始,您可以为工作负载选择机器系列。

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

  • 使用 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

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

后续步骤