使用節點自動佈建功能


本頁說明如何在 Google Kubernetes Engine (GKE) Standard 叢集中啟用及設定節點自動佈建功能。本頁面將透過範例,說明如何使用 YAML 設定檔設定進階設定,例如資源限制、自動修復和自動升級,以及如何設定自動佈建的預設值。

您也會瞭解如何執行下列作業:

  • 使用客戶自行管理的加密金鑰 (CMEK) 並設定節點完整性,提升叢集安全性。
  • 指定 surgeblue-green 升級策略,並將 GKE 管理的 Pod 與使用者工作負載分開,充分運用資源並減少中斷。
  • 使用 GPU 或 TPU 等加速器,搭配自動佈建功能,提升效能。

本頁適用於佈建及設定雲端資源,並在 GKE 叢集上部署工作負載的作業人員、雲端架構師、開發人員和網路工程師。如要進一步瞭解 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。

閱讀本頁面之前,請先熟悉下列概念:

事前準備

開始之前,請確認你已完成下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update,取得最新版本。

需求條件

節點自動佈建功能適用於下列 GKE 版本:

  • 1.27.6 以上版本或 1.28 以上版本,適用於 Cloud TPU v4 和 v5e。
  • Cloud TPU v5p 的版本為 1.28.7-gke.1020000 以上,或 1.29.2-gke.1035000 以上。
  • Cloud TPU Trillium 的版本為 1.31.1-gke.1146000 以上。

限制

節點自動佈建功能有下列資源限制:

  • 您必須仔細規劃節點 IP 位址範圍。叢集建立後,您可以擴展節點 IP 位址範圍。不過,我們建議您不要在建立叢集後擴充節點 IP 位址範圍,因為您必須更新防火牆規則,將新範圍納入來源。您可以使用不連續的多 Pod CIDR 和節點自動佈建功能,擴充 Pod IP 位址範圍。

  • 定義 CPU 和記憶體範圍上限時,系統會為整個 GKE 叢集計算限制,而非每個節點或節點集區。節點自動佈建功能會考量現有手動建立的節點集區、所有自動佈建的節點集區,以及節點自動佈建功能可能建立的任何新節點,並計算這些資源的總和,藉此檢查這些限制。如果佈建新節點會導致叢集的資源總用量超出任一指定上限,節點自動佈建功能就不會建立新節點。如果 Pod 需要的資源超過定義上限,就可能導致 Pod 保持未排程狀態。

啟用節點自動佈建功能

您可以使用 gcloud CLI 或Google Cloud 控制台,在叢集上啟用節點自動佈建功能。

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:叢集中的核心數量上限。這項限制會加總所有現有手動建立的節點集區,以及節點自動佈建功能建立的所有潛在節點集區的 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. 在「Automation」(自動化) 區段中,找到「Node auto-provisioning」(節點自動佈建),然後按一下 「Edit」(編輯)

  4. 勾選「Enable node auto-provisioning」(啟用節點自動佈建功能) 核取方塊。

  5. 為叢集設定所需的 CPU 與記憶體用量下限和上限。

  6. 按一下 [儲存變更]。

使用自動佈建設定檔

您可以使用 YAML 設定檔設定節點自動佈建功能。如果設定檔用於變更單一設定,則可以只包含一行。單一設定檔中可以指定多項設定。在這種情況下,套用設定檔時,所有這些設定都會變更。

部分進階設定只能透過設定檔指定。

範例 1: 套用下列設定檔,即可為節點自動佈建功能建立的任何新節點集區,啟用節點自動修復和自動升級功能:

management:
  autoRepair: true
  autoUpgrade: true

範例 2: 套用下列設定檔會變更以下設定:

  • 設定 CPU、記憶體和 GPU資源限制。如果叢集中所有節點集區的 CPU、記憶體或 GPU 總數超過指定的資源限制,節點自動佈建功能就不會建立節點。
  • 為節點自動佈建功能建立的任何新節點集區,啟用節點自動修復和自動升級功能。
  • 針對節點自動佈建功能建立的任何新節點集區,啟用安全啟動和完整性監控功能。
  • 將節點自動佈建功能建立的任何新節點集區開機磁碟大小設為 100 GB。
resourceLimits:
  - resourceType: 'cpu'
    minimum: 4
    maximum: 10
  - resourceType: 'memory'
    maximum: 64
  - resourceType: 'nvidia-tesla-t4'
    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

對於所有自動佈建的新節點集區,您可以使用設定檔指定要使用的節點映像檔類型。下列 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:預設服務帳戶的名稱。

以下範例會在 dev-cluster 叢集上,將 test-service-account@google.com 設為預設服務帳戶:

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

您可以使用設定檔,指定節點自動佈建功能使用的預設身分。下列 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

您可以使用設定檔啟用或停用節點自動修復和自動升級功能。下列 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:節點集區中可同時無法使用的節點數量上限 (升級期間)。

YAML

如要為所有自動佈建的新節點集區指定升級緩衝設定,請使用下列設定檔

  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。如果設為 0,系統就會略過藍色集區排空階段。
  • 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:設定檔的名稱。

將 GKE 管理的 Pod 與工作負載分開

叢集管理員可能想將 GKE 管理的 Pod 與工作負載分開。如果叢集中有未充分運用的節點正在執行系統 Pod,這種做法有助於避免縮減問題。

下列範例說明如何結合使用節點自動佈建功能,以及 Kubernetes taint 和容許條件,將受管理 Pod 與工作負載分開。

  1. 建立叢集,其中包含 e2-standard-2 個 VM 的預設節點集區,並套用節點 taint,只允許 GKE 系統工作負載在這些節點上執行:

    gcloud container clusters create test-cluster \
        --machine-type=e2-standard-2 \
        --node-taints=components.gke.io/gke-managed-components=true:NoSchedule
    
  2. 為叢集啟用自動佈建節點功能:

    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 記憶體。

  3. 如要測試這項設定,請將下列範例資訊清單儲存為 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 節點汙染。如果沒有節點自動佈建功能,由於沒有節點集區具有適當的標籤和 taint,因此無法排定這項工作負載 Pod 的時間。

  4. 將資訊清單套用至叢集:

    kubectl apply -f nginx.yaml
    

    輸出結果會與下列內容相似:

    pod/nginx created
    
  5. 查看符合 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 1.31.2-gke.1518000 以上版本中,您可以使用cloud.google.com/gke-max-run-duration-seconds節點選取器,限制自動佈建節點的執行時間。在資訊清單中新增下列欄位:

spec:
  nodeSelector:
    cloud.google.com/gke-max-run-duration-seconds: "MAX_RUN_DURATION"

MAX_RUN_DURATION 替換為自動佈建節點在自動終止前要執行的時間長度 (以秒為單位)。如要瞭解相關限制,請參閱「MaxRunDuration 限制」。

為新的自動佈建節點集區使用加速器

您可以啟用節點自動佈建功能,並將 GKE 設為自動佈建 GPU 或 Cloud TPU 加速器,確保排定 AI/機器學習工作負載時有足夠的容量。

設定 GPU 限制

將節點自動佈建搭配 GPU 一起使用時,您必須使用 gcloud CLI 或Google Cloud 控制台,設定叢集中各種 GPU 類型的上限。GPU 數量上限是指 GPU 的最大數量。舉例來說,以這項限制的目的來說,具有 16 個 GPU 的 VM 會計為 16 個,而非 1 個。如要設定多種 GPU,請使用設定檔。

如要列出可用的 resourceTypes,請執行 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-t4 GPU 加速器類型設定 GPU 限制:

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

YAML

您可以使用設定檔載入多種 GPU 類型的限制。下列 YAML 設定會設定兩種不同類型的 GPU:

  resourceLimits:
    - resourceType: 'cpu'
      minimum: 4
      maximum: 10
    - resourceType: 'memory'
      maximum: 64
    - resourceType: 'nvidia-tesla-t4'
      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. 在「Automation」(自動化) 區段中,找到「Node auto-provisioning」(節點自動佈建),然後按一下 「Edit」(編輯)

  4. 勾選「Enable node auto-provisioning」(啟用節點自動佈建功能) 核取方塊。

  5. 為叢集設定 CPU 和記憶體用量下限和上限。

  6. 按一下 「Add resource」(新增資源)

  7. 選取要新增的 GPU 類型 (例如 NVIDIA T4)。設定要新增至叢集的 GPU 數量下限和上限。

  8. 接受 GKE 中 GPU 的限制

  9. 按一下 [儲存變更]。

選擇要安裝的驅動程式版本

在 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

如果您要為一或多個 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,請使用 tpu-v4-podslice
      • 如要選取以 ct5lp- 開頭的機器類型搭配 TPU v5e,請使用 tpu-v5-lite-podslice
      • 如要選取以 ct5p- 開頭的機器類型搭配 TPU v5p,請使用 tpu-v5p-slice
      • 如要選取 TPU Trillium,請使用 tpu-v6e-slice
    • MINIMUM_ACCELERATOR:叢集中的 TPU 晶片數量下限。
      • 請注意,即使 count 小於配量中的 TPU 晶片數量,使用 MINIMUM_ACCELERATOR 仍可能阻礙多主機 TPU 配量縮減規模。
    • MAXIMUM_ACCELERATOR:叢集中的 TPU 晶片數量上限。
      • 如果 Pod 設定要求多主機 TPU 配量,GKE 會以原子方式建立這類配量。請將 count 值設得夠高,以便佈建指定拓撲的所有 TPU 晶片。每個 TPU 配量中的晶片數量等於拓撲的乘積。舉例來說,如果多主機 TPU 配量的拓撲為 2x2x2,TPU 晶片的數量等於 8,因此 MAXIMUM_ACCELERATOR 必須大於 8。

    以下範例會為 dev-cluster 叢集中的 ct5lp-hightpu-1tct5lp-hightpu-4tct5lp-hightpu-8t 機器類型設定 TPU 限制。舉例來說,最多可佈建十部 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. 建立 Deployment 規格,讓 Pod 要求 TPU 資源。舉例來說,下列資訊清單會導致 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
    • limits: google.com/tpu:定義每個節點的 TPU 晶片數量。

    您也可以在 nodeSelector 中設定下列欄位:

    • TPU 預留資源:如要透過工作負載使用現有的預留資源,請在 cloud.google.com/reservation-name 中指定預留資源的名稱。
    • 集合排程: 如要建立具有節點自動佈建功能的集合,請根據您要求的節點集區類型,加入下列值:
      • 單一主機 TPU 配量節點集區:cloud.google.com/gke-workload-type: HIGH_AVAILABILITY
      • 多主機 TPU 配量節點集區: cloud.google.com/gke-nodepool-group-name: COLLECTION_NAME, cloud.google.com/gke-workload-type: HIGH_AVAILABILITY。將 COLLECTION_NAME 值替換為集合名稱。這個值必須符合叢集標籤規定

YAML

您可以使用設定檔,為多種 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

如要設定節點自動佈建功能可建立新節點集區的位置,請使用設定檔

新增下列 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 在區域內建立彼此距離較近的節點集區。

如要定義精簡的放置位置政策,請在 Pod 規格中加入 nodeSelector,並使用下列鍵:

  • cloud.google.com/gke-placement-group 是您為應在同一個緊湊型刊登位置群組中一起執行的 Pod 群組指派的 ID。

  • cloud.google.com/machine-family 是機器系列名稱。詳情請參閱支援緊密配置的機器系列

下列範例會設定密集配置政策,配置群組 ID 為 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 替換為叢集名稱。

YAML

如要使用 Google Cloud 控制台停用節點自動佈建功能,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 按一下叢集名稱。

  3. 在「Automation」(自動化) 區段中,找到「Node auto-provisioning」(節點自動佈建),然後按一下 「Edit」(編輯)

  4. 取消勾選「Enable node auto-provisioning」(啟用節點自動佈建功能) 核取方塊。

  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 替換為節點集區的名稱。

使用自訂機器系列

如要為工作負載選擇特定 Compute Engine 機器系列 (例如 n2t2d),請在資訊清單中設定下列其中一個欄位:

  • 請使用 cloud.google.com/machine-family 鍵、In 運算子,以及所需機器系列的值 (例如 n2),設定節點親和性。
  • 新增 nodeSelector,鍵為 cloud.google.com/machine-family,值為所需的機器系列。

以下範例會將 nodeAffinity 設為 n2 的機器系列:

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

套用變更後,節點自動佈建功能會選擇最佳節點集區,並使用指定機器系列中的機器類型。如果為 matchExpressions 指定多個項目,GKE 會從指定項目中任意選擇機器系列。

使用自訂運算類別控制節點屬性

如要進一步控管自動佈建節點集區的屬性,請建立並使用自訂運算類別。自訂運算類別可讓您設定縮放行為,例如選擇節點的機器類型時的回退優先順序,或觸發節點上工作負載整併的特定資源用量門檻,以釋出未使用的資源。自訂運算類別適用於 GKE 1.30.3-gke.1451000 以上版本。

如要瞭解自訂運算類別的功能,以及如何搭配節點自動佈建功能使用自訂運算類別,請參閱「關於自訂運算類別」。

最低 CPU 平台

節點自動佈建功能支援建立指定最低 CPU 平台的節點集區。您可以在工作負載層級 (建議) 或叢集層級指定最低 CPU 平台。

後續步驟