設定節點集區自動建立功能

在 Google Kubernetes Engine (GKE) Standard 叢集中,您可以讓 GKE 自動為待處理的 Pod 建立節點集區,減少手動管理基礎架構的工作量。本文說明如何為叢集和工作負載啟用節點集區自動建立功能、設定自動建立節點的預設值,以及針對一些常見用途觸發自動建立功能。

本文適用於叢集管理員、作業人員和開發人員,他們負責管理標準叢集中的基礎架構,並將工作負載部署至標準叢集。如要進一步瞭解節點集區自動建立功能的運作方式,以及不同的啟用方法 (例如 ComputeClass 和叢集層級節點自動佈建),請參閱「關於節點集區自動建立功能」。

限制

節點集區自動建立功能有下列限制:

  • 叢集自動配置器的所有限制也適用於節點集區自動建立功能。
  • 如果叢集的節點集區總數超過 200 個,自動調度資源期間的延遲時間可能會增加。任何會觸發建立新節點集區的設定 (例如工作負載分離或使用多個 ComputeClass),都會增加這個數字。如要進一步瞭解叢集限制,請參閱「規劃大型叢集」中的限制和最佳做法
  • 啟用節點自動佈建時,您為叢集設定的任何資源限制,也會套用至 GKE 為 ComputeClass 建立的節點集區。
  • ComputeClasses 不支援下列設定:
    • 突波升級或藍綠升級。
    • 節點完整性和安全啟動。
  • 如要在 GKE 1.33.3-gke.1136000 之前的版本中,為 ComputeClass 啟用節點集區自動建立功能,您也必須啟用叢集層級的節點自動佈建功能。這項限制不適用於 GKE 1.33.3-gke.1136000 以上版本。

事前準備

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

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。

需求條件

在任何 GKE 版本中,您都可以使用節點自動佈建功能,為整個叢集啟用節點集區自動建立功能。如要使用 ComputeClass 在工作負載層級啟用節點集區自動建立功能,且不想啟用節點自動佈建功能,叢集必須符合下列需求:

  • 使用 GKE 1.33.3-gke.1136000 以上版本。
  • 使用搶鮮版。

如要針對特定節點設定觸發節點集區自動建立作業,您必須符合對應的版本需求。如要進一步瞭解各種設定的版本支援,請參閱 GKE 版本資訊 (新功能) 或您的用途相關說明文件。

啟用工作負載層級的自動建立功能

您可以使用 ComputeClass,為叢集中的特定工作負載啟用節點集區自動建立功能。ComputeClass 規格中的 nodePoolAutoCreation 欄位會控管 GKE 是否能為選取該 ComputeClass 的 Pod 建立新的節點集區。在 GKE 1.33.3-gke.1136000 以上版本中,即使叢集未啟用節點自動佈建功能,您也可以為 ComputeClass 啟用節點集區自動建立功能。如果版本低於 1.33.3-gke.1136000,您也必須啟用叢集層級的節點自動佈建功能

如要為 ComputeClass 啟用節點集區自動建立功能,請按照下列步驟操作:

  1. 使用符合下列條件的新建或現有標準叢集:

    • 使用 GKE 1.33.3-gke.1136000 以上版本。
    • 使用搶鮮版。

    您可以選擇建立新的標準叢集

  2. 如果叢集不符合上一個步驟中的需求,請啟用叢集層級的節點自動佈建功能

  3. 將下列 ComputeClass 範例儲存為 YAML 檔案:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS
    spec:
      priorities:
      -  machineFamily: n4
      -  machineFamily: n2
      whenUnsatisfiable: ScaleUpAnyway
      nodePoolAutoCreation:
        enabled: true
    

    COMPUTE_CLASS 替換為新 ComputeClass 的名稱。如要進一步瞭解 ComputeClasses 中的可用欄位,請參閱 ComputeClass CustomResourceDefinition

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

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    請將 PATH_TO_COMPUTECLASS_MANIFEST 替換為 ComputeClass 資訊清單檔案的路徑。

  5. 將下列選取 ComputeClass 的 Deployment 範例儲存為 helloweb-deploy.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: helloweb
      labels:
        app: hello
    spec:
      selector:
        matchLabels:
          app: hello
      template:
        metadata:
          labels:
            app: hello
        spec:
          nodeSelector:
            # Replace with the name of a compute class
            cloud.google.com/compute-class: COMPUTE_CLASS 
          containers:
          - name: hello-app
            image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
            ports:
            - containerPort: 8080
            resources:
              requests:
                cpu: "250m"
                memory: "1Gi"

  6. 在叢集中建立 Deployment:

    kubectl apply -f helloweb-deploy.yaml
    
  7. 如要確認 GKE 是否為 Pod 建立新的節點集區,請取得叢集中的節點集區清單:

    gcloud container node-pools list \
        --cluster=CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。
    • CONTROL_PLANE_LOCATION:叢集控制平面的區域或可用區,例如 us-central1us-central1-a

啟用叢集層級的節點自動佈建功能

如要為整個 GKE 叢集啟用節點集區自動建立功能,請使用節點自動佈建設定。節點自動佈建功能可讓 GKE 根據 Pod 規格或 ComputeClass 中的設定,為叢集中擱置的工作負載建立新的節點集區。您可以為新叢集或現有叢集啟用節點自動佈建功能。

啟用節點自動佈建功能前,請先規劃虛擬私有雲子網路的主要 IPv4 位址範圍大小。GKE 會將這個 IP 位址範圍做為主要節點 IP 位址範圍。視叢集的大小和規模而定,預設節點 IP 位址範圍可能沒有足夠的 IP 位址可指派給新節點。如果您在建立叢集後更新節點 IP 位址範圍的大小,則必須更新 GKE 叢集防火牆規則,允許來自新 IP 位址的流量。

如要在 1.33.3-gke.1136000 之前的 GKE 版本中取得自動建立的節點集區,請按照本節中的步驟操作。您也可以在 Google Cloud 控制台中編輯叢集設定,為現有叢集啟用節點自動佈建功能。

如要在建立新叢集時啟用節點自動佈建功能,請選取下列任一選項:

控制台

  1. 在 Google Cloud 控制台中,前往「建立 Kubernetes 叢集」頁面。

    前往「建立 Kubernetes 叢集」

  2. 在「叢集基本資訊」頁面中,為新叢集指定名稱和位置。

  3. 在導覽選單中,按一下「自動化」

  4. 勾選「Enable node auto-provisioning」(啟用節點自動佈建功能) 核取方塊。畫面上會顯示「限制」部分。

  5. 指定 CPU 和記憶體的限制。

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

gcloud

gcloud container clusters create CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --enable-autoprovisioning \
    --min-cpu=MINIMUM_CPU \
    --min-memory=MINIMUM_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:要啟用節點自動佈建功能的叢集名稱。
  • CONTROL_PLANE_LOCATION:叢集控制平面的區域或可用區,例如 us-central1us-central1-a
  • MINIMUM_CPU:叢集中的核心數量下限。
  • MINIMUM_MEMORY:叢集的記憶體容量下限 (以 GiB 為單位)。
  • MAXIMUM_CPU:叢集中的核心數量上限。這項限制適用於叢集中所有新舊節點的 CPU 核心總數,包括手動建立的節點集區。
  • MAXIMUM_MEMORY:叢集中的記憶體容量上限,以 GiB 為單位。這項限制適用於叢集中所有新舊節點集區的記憶體容量總和,包括手動建立的節點集區。

使用節點自動佈建設定檔設定

您可以使用 YAML 設定檔,為節點自動佈建功能設定資源限制和節點設定。您可以在設定檔中,以宣告方式指定自動建立節點集區的預設值,並執行進階設定,例如啟用節點自動修復功能。這個檔案與 ComputeClasses 無關,ComputeClasses 是 Kubernetes 自訂資源。設定檔是比使用指令列標記指定節點自動佈建設定更具擴充性的替代方案。詳情請參閱「使用設定檔設定叢集層級的預設設定」。

如要建立及使用設定檔,請按照下列步驟操作:

  1. 在文字編輯器中,於 Google Cloud CLI 可存取的路徑中建立 YAML 檔案。
  2. 新增要設定或修改的設定,例如以下範例:

    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
    

    這個範例的節點自動佈建設定如下:

    • resourceLimits:設定叢集中 CPU、記憶體容量和 NVIDIA T4 GPU 的資源限制。這些限制適用於叢集中的資源容量總和,包括手動建立的節點集區。
    • management:為叢集中所有自動建立的新節點集區啟用節點自動修復和節點自動升級功能。
    • shieldedInstanceConfig:為叢集中所有自動建立的新節點集區啟用安全啟動和節點完整性監控功能。
  3. 指定 --autoprovisioning-config-file 參數和 --enable-autoprovisioning 參數,為新叢集或現有叢集提供 GKE 設定檔:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --autoprovisioning-config-file=PATH_TO_CONFIGURATION_FILE
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。
    • PATH_TO_CONFIGURATION_FILE:設定檔的路徑。

將設定檔套用至叢集後,GKE 會使用檔案中的設定,為叢集自動建立新的節點集區。這些設定不適用於 GKE 在叢集中建立的現有節點集區。

設定節點自動佈建的資源限制

使用叢集層級的節點自動佈建時,您必須為叢集在所有節點集區中可擁有的資源總量設定限制。如要為叢集啟用節點自動佈建功能,您必須指定叢集 CPU 和記憶體容量的限制。此外,如要使用其他類型的附加資源 (例如 GPU 和 TPU),您必須指定這些資源的限制。只有在為叢集啟用節點自動佈建設定時,才需要這些限制。如果您只使用 ComputeClass 取得自動建立的節點集區,則不需要設定資源限制。

如要新增或修改節點集區自動建立功能的資源限制,請使用下列其中一種方法:

如要為現有叢集設定資源限制,請選取下列其中一個選項:

控制台

  1. 在 Google Cloud 控制台中,前往「Kubernetes clusters」(Kubernetes 叢集) 頁面。

    前往 Kubernetes 叢集

  2. 按一下叢集名稱。「叢集詳細資料」頁面隨即開啟。

  3. 按一下 [Details] (詳細資料) 分頁標籤。

  4. 在「Automation」(自動化) 區段中,找到「Node auto-provisioning」(節點自動佈建) 列,然後按一下 「Edit」(編輯)。「編輯節點自動佈建功能」窗格隨即開啟。

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

  6. 在「限制」部分,指定叢集中 CPU 和記憶體容量的最小值和最大值。

  7. 如要設定其他資源 (例如 GPU 或 TPU) 的限制,請按照下列步驟操作:

    1. 按一下「新增資源」
    2. 從「資源類型」下拉式清單中,選取 GPU 型號或 TPU 機器類型,例如「NVIDIA A100 80GB」或「ct5p」
    3. 指定資源的最小值和最大值。
  8. 選用:在「節點集區位置」部分,選取 GKE 要在其中建立節點的特定區域。舉例來說,如果您打算執行 GPU 工作負載,請選取所選 GPU 類型的高可用性區域。

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

gcloud

執行下列其中一個指令:

  • 指定 CPU 和記憶體資源限制:

    gcloud container clusters update CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --min-cpu=MINIMUM_CPU \
        --min-memory=MINIMUM_MEMORY \
        --max-cpu=MAXIMUM_CPU \
        --max-memory=MAXIMUM_MEMORY
    

    更改下列內容:

    • MINIMUM_CPU:叢集中的核心數量下限。
    • MINIMUM_MEMORY:叢集的記憶體容量下限 (以 GiB 為單位)。
    • MAXIMUM_CPU:叢集中的核心數量上限。這項限制適用於叢集中所有節點集區的 CPU 核心總數,包括手動建立的節點集區。
    • MAXIMUM_MEMORY:叢集中的記憶體容量上限,以 GiB 為單位。這項限制適用於叢集中所有節點集區的記憶體容量總和,包括手動建立的節點集區。
  • 指定 GPU 資源限制:

    gcloud container clusters update CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --min-cpu=MINIMUM_CPU \
        --min-memory=MINIMUM_MEMORY \
        --max-cpu=MAXIMUM_CPU \
        --max-memory=MAXIMUM_MEMORY \
        --min-accelerator=type=GPU_TYPE,count=MINIMUM_GPU_COUNT \
        --max-accelerator=type=GPU_TYPE,count=MAXIMUM_GPU_COUNT
    

    更改下列內容:

    • GPU_TYPE:要設定限制的 GPU 類型,例如 nvidia-l4
    • MINIMUM_GPU_COUNT:叢集可擁有的指定類型 GPU 數量下限。
    • MAXIMUM_GPU_COUNT:叢集可擁有的指定類型 GPU 數量上限。
  • 指定 TPU 資源限制:

    gcloud container clusters update CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --min-cpu=MINIMUM_CPU \
        --min-memory=MINIMUM_MEMORY \
        --max-cpu=MAXIMUM_CPU \
        --max-memory=MAXIMUM_MEMORY \
        --min-accelerator=type=TPU_TYPE,count=MINIMUM_TPU_COUNT \
        --max-accelerator=type=TPU_TYPE,count=MAXIMUM_TPU_COUNT
    

    更改下列內容:

    • TPU_TYPE:要設定限制的 TPU 類型。支援的值如下:
      • tpu-v4-podslice:TPU v4。
      • tpu-v5-lite-podslice:機器類型開頭為 ct5lp- 的 TPU v5e。
      • tpu-v5p-slice:機器類型開頭為 ct5p- 的 TPU v5e。
      • tpu-v6e-slice:TPU Trillium。
    • MINIMUM_TPU_COUNT:叢集可擁有的指定類型 TPU 晶片數量下限。如果您指定的值大於多主機 TPU 節點中的 TPU 晶片數量,TPU 節點可能不會縮減。
    • MAXIMUM_TPU_COUNT:叢集可擁有的指定類型 TPU 晶片數量上限。如果是多主機 TPU 節點,請指定大於每個節點晶片數的值,讓 GKE 可以原子方式調整節點大小。配量中的晶片數量是 TPU 拓撲的乘積。舉例來說,如果拓撲為 2x2x2,則切片中的晶片數量為 8,也就是說 MAXIMUM_TPU_COUNT 的值必須大於 8

設定檔

  1. 在設定檔的 resourceLimits 欄位中,指定下列其中一組欄位:

    • 指定 CPU 和記憶體資源限制:

      resourceLimits:
        - resourceType: 'cpu'
          minimum: MINIMUM_CPU
          maximum: MAXIMUM_CPU
        - resourceType: 'memory'
          minimum: MINIMUM_MEMORY
          maximum: MAXIMUM_MEMORY
      

      更改下列內容:

      • MINIMUM_CPU:叢集中的核心數量下限。
      • MINIMUM_MEMORY:叢集的記憶體容量下限 (以 GiB 為單位)。
      • MAXIMUM_CPU:叢集中的核心數量上限。這項限制適用於叢集中所有節點集區的 CPU 核心總數,包括手動建立的節點集區。
      • MAXIMUM_MEMORY:叢集中的記憶體容量上限,以 GiB 為單位。這項限制適用於叢集中所有節點集區的記憶體容量總和,包括手動建立的節點集區。
    • 指定 GPU 資源限制:

      resourceLimits:
        - resourceType: 'cpu'
          minimum: MINIMUM_CPU
          maximum: MAXIMUM_CPU
        - resourceType: 'memory'
          minimum: MINIMUM_MEMORY
          maximum: MAXIMUM_MEMORY
        - resourceType: 'GPU1_TYPE'
          minimum: MINIMUM_GPU1_COUNT
          maximum: MAXIMUM_GPU1_COUNT
        - resourceType: 'GPU2_TYPE'
          minimum: MINIMUM_GPU2_COUNT
          maximum: MAXIMUM_GPU2_COUNT
      

      更改下列內容:

      • GPU1_TYPEGPU2_TYPE:要設定限制的 GPU 類型,例如 nvidia-l4
      • MINIMUM_GPU1_COUNTMINIMUM_GPU2_COUNT: 叢集可擁有的指定類型 GPU 最少數量。
      • MAXIMUM_GPU1_COUNTMAXIMUM_GPU2_COUNT: 叢集可擁有的指定類型 GPU 數量上限。
    • 指定 TPU 資源限制:

      resourceLimits:
        - resourceType: 'cpu'
          minimum: MINIMUM_CPU
          maximum: MAXIMUM_CPU
        - resourceType: 'memory'
          minimum: MINIMUM_MEMORY
          maximum: MAXIMUM_MEMORY
        - resourceType: 'TPU1_TYPE'
          minimum: MINIMUM_TPU1_COUNT
          maximum: MAXIMUM_TPU1_COUNT
        - resourceType: 'TPU2_TYPE'
          minimum: MINIMUM_TPU2_COUNT
          maximum: MAXIMUM_TPU2_COUNT
      

      更改下列內容:

      • TPU1_TYPETPU2_TYPE:要設定限制的 TPU 類型。支援的值如下:
        • tpu-v4-podslice:TPU v4。
        • tpu-v5-lite-podslice:機器類型開頭為 ct5lp- 的 TPU v5e。
        • tpu-v5p-slice:機器類型開頭為 ct5p- 的 TPU v5e。
        • tpu-v6e-slice:TPU Trillium。
      • MINIMUM_TPU1_COUNTMINIMUM_TPU2_COUNT:叢集可擁有的指定類型 TPU 晶片數量下限。如果您指定的值大於多主機 TPU 配量中的 TPU 晶片數量,TPU 配量可能不會縮減。
      • MAXIMUM_TPU1_COUNTMAXIMUM_TPU2_COUNT:叢集可擁有的指定類型 TPU 晶片數量上限。如果是多主機 TPU 配量,請指定大於每個配量中晶片數的值,讓 GKE 可以原子方式擴充配量。一個切片中的晶片數量是 TPU 拓撲的乘積。舉例來說,如果 TPU1_TYPE 的拓撲是 2x2x2,則切片中的晶片數量為 8,這表示 MAXIMUM_TPU1_COUNT 的值必須大於 8
  2. 指定 --autoprovisioning-config-file 參數和 --enable-autoprovisioning 參數,為新叢集或現有叢集提供 GKE 設定檔:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --autoprovisioning-config-file=PATH_TO_CONFIGURATION_FILE
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。
    • PATH_TO_CONFIGURATION_FILE:設定檔的路徑。

將現有節點集區標示為自動建立

啟用叢集層級的節點自動佈建功能後,您可以將叢集中的任何現有節點集區標示為自動建立。GKE 會管理這些節點集區的擴縮作業,包括在節點集區為空時刪除節點集區。您可以將手動建立的節點集區標示為自動建立,讓 GKE 為您管理節點集區。

如果停用叢集的自動佈建功能,GKE 就會停止管理叢集中所有自動建立的現有節點集區。如果您稍後重新啟用叢集的自動佈建功能,GKE 不會自動繼續管理這些現有節點集區。您必須將現有節點集區標示為自動建立。

如要將現有節點集區標示為自動建立,請執行下列指令:

gcloud container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --enable-autoprovisioning

NODE_POOL_NAME 替換為節點集區名稱。

設定自動建立節點集區的預設設定

GKE 會根據您的 ComputeClass 和 Pod 規格,判斷哪些節點類型最適合執行待處理的 Pod。您可以選擇設定 GKE 套用至自動建立節點集區的預設設定,例如節點的自訂 Identity and Access Management (IAM) 服務帳戶,或自訂開機磁碟設定。這些預設設定會覆寫 Google 為叢集設定的任何對應預設值。舉例來說,您可以將 Ubuntu 節點映像檔設為自動建立節點集區的預設映像檔,藉此覆寫 GKE 預設的 Container-Optimized OS 節點映像檔。

您可以使用節點自動佈建在叢集層級設定預設設定,或在 ComputeClasses 中設定工作負載層級的預設設定。在上述任一層級設定前,請先考量下列事項:

  • 叢集層級設定會套用至叢集中自動建立的任何節點集區,而 ComputeClass 設定只會套用至使用該 ComputeClass 的工作負載。
  • 如果您在 ComputeClass 和叢集層級指定相同的預設設定,GKE 會針對使用 ComputeClass 的工作負載,採用 ComputeClass 設定。
  • 您設定的任何預設值,只會套用至自動建立的節點集區。現有節點集區不受影響。

以下各節說明如何設定特定預設設定。

設定預設節點映像檔

選取下列選項之一:

ComputeClass

  1. 在 ComputeClass 資訊清單中,使用 nodePoolConfig.imageType 欄位。這個欄位適用於 GKE 1.32.4-gke.1198000 以上版本。

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS
    spec:
      priorities:
      - machineFamily: n4
      - machineFamily: n4d
      nodePoolConfig:
        imageType: IMAGE_TYPE
      whenUnsatisfiable: ScaleUpAnyway
      nodePoolAutoCreation:
        enabled: true
    

    IMAGE_TYPE 替換為節點圖片的值,可以是下列其中一個值:

    • cos_containerd:含有 containerd 的 Container-Optimized OS。
    • ubuntu_containerd:採用 containerd 的 Ubuntu。
  2. 將 ComputeClass 資訊清單套用至叢集:

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    請將 PATH_TO_COMPUTECLASS_MANIFEST 替換為 ComputeClass 資訊清單檔案的路徑。

gcloud

如要在指令列設定預設節點映像檔,請使用 --autoprovisioning-image-type 標記:

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

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • IMAGE_TYPE節點映像檔,可以是下列其中一項:
    • cos_containerd:含有 containerd 的 Container-Optimized OS。
    • ubuntu_containerd:採用 containerd 的 Ubuntu。

如要在設定檔中設定預設節點映像檔,請按照下列步驟操作:

  1. 在設定檔中,指定 imageType 欄位:

      imageType: 'IMAGE_TYPE'
    

    如果設定檔有其他設定,請勿修改這些設定。設定檔中的任何修改或移除作業,也會修改對應的叢集層級設定。

  2. 指定 --autoprovisioning-config-file 參數和 --enable-autoprovisioning 參數,為新叢集或現有叢集提供 GKE 設定檔:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --autoprovisioning-config-file=PATH_TO_CONFIGURATION_FILE
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。
    • PATH_TO_CONFIGURATION_FILE:設定檔的路徑。

設定節點的預設 IAM 服務帳戶

GKE 節點會使用 IAM 服務帳戶執行記錄和監控等系統工作,如要變更自動建立的節點集區所用 IAM 服務帳戶,請選取下列其中一個選項:

ComputeClass

  1. 在 Computeclass 資訊清單中,使用 nodePoolConfig.serviceAccount 欄位。這個欄位適用於 GKE 1.31.4-gke.1072000 以上版本。

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS
    spec:
      priorities:
      - machineFamily: n4
      - machineFamily: n4d
      nodePoolConfig:
        serviceAccount: SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
      whenUnsatisfiable: ScaleUpAnyway
      nodePoolAutoCreation:
        enabled: true
    

    更改下列內容:

    • SERVICE_ACCOUNT_NAME:IAM 服務帳戶的名稱,例如 my-node-account
    • PROJECT_ID:服務帳戶專案的專案 ID。
  2. 將 ComputeClass 資訊清單套用至叢集:

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    請將 PATH_TO_COMPUTECLASS_MANIFEST 替換為 ComputeClass 資訊清單檔案的路徑。

gcloud

使用 gcloud CLI 為自動建立的節點集區設定預設服務帳戶時,您也必須指定節點集區正常運作所需的存取範圍

如要在指令列中設定預設服務帳戶和存取權範圍,請使用 --autoprovisioning-service-account--autoprovisioning-scopes 標記:

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --enable-autoprovisioning \
    --autoprovisioning-service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --autoprovisioning-scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/trace.append

更改下列內容:

  • SERVICE_ACCOUNT_NAME:IAM 服務帳戶的名稱,例如 my-node-account
  • PROJECT_ID:服務帳戶專案的專案 ID。

如要在設定檔中設定預設服務帳戶和存取範圍,請按照下列步驟操作:

  1. 在設定檔中,指定 serviceAccountscopes 欄位:

    serviceAccount: SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
    scopes: https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/trace.append
    

    如果設定檔有其他設定,請勿修改這些設定。設定檔中的任何修改或移除作業,也會修改對應的叢集層級設定。

  2. 指定 --autoprovisioning-config-file 參數和 --enable-autoprovisioning 參數,為新叢集或現有叢集提供 GKE 設定檔:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --autoprovisioning-config-file=PATH_TO_CONFIGURATION_FILE
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。
    • PATH_TO_CONFIGURATION_FILE:設定檔的路徑。

設定自動建立節點的預設可用區

根據預設,GKE 會在下列區域中自動建立節點,具體取決於叢集類型:

  • 地區叢集:GKE 會在叢集區域中隨機選取三個區域,並在這些區域中建立節點。
  • 區域叢集:GKE 會在與叢集控制層相同的區域中建立節點。

您可以手動指定 GKE 自動建立節點的區域清單。這些區域必須與叢集控制層位於相同區域。舉例來說,如果您有一個可用區叢集,控制層位於 us-central1-a,則可以指定 us-central1 地區中的任何可用區,讓 GKE 自動建立節點。如果您修改現有叢集中自動建立節點的預設區域,變更只會套用至 GKE 建立的新節點集區。

如要指定自動建立節點的預設區域,請選取下列其中一個選項:

ComputeClass

  1. 在 ComputeClass 資訊清單中,使用 spec.priorityDefaults.location.zones 欄位。這個欄位適用於 GKE 1.33.1-gke.1545000 以上版本。

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS
    spec:
      priorityDefaults:
        location:
          zones: ['ZONE1','ZONE2','...']
      priorities:
      - machineFamily: n4
      - machineFamily: n4d
      whenUnsatisfiable: ScaleUpAnyway
      nodePoolAutoCreation:
        enabled: true
    

    以逗號分隔的自動建立節點預設區域清單取代 ZONE1,ZONE2,...,例如 us-central1-a','us-central1-b', 'us-central1-f'。如果 spec.priorities 欄位中的特定規則未明確列出區域,GKE 就會使用這些區域。

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

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    請將 PATH_TO_COMPUTECLASS_MANIFEST 替換為 ComputeClass 資訊清單檔案的路徑。

gcloud

如要在指令列上設定節點集區自動建立功能的預設區域,請使用 --autoprovisioning-locations 標記:

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --enable-autoprovisioning \
    --autoprovisioning-locations=ZONE1,ZONE2,...

ZONE1,ZONE2,... 替換為以半形逗號分隔的自動建立節點預設可用區清單,例如「us-central1-a','us-central1-b', 'us-central1-f'」。

如要使用設定檔,為節點集區自動建立作業設定預設可用區,請按照下列步驟操作:

  1. 在設定檔中指定 autoprovisioningLocations 欄位:

    autoprovisioningLocations:
    - ZONE1
    - ZONE2
    

    ZONE1ZONE2 替換為自動建立節點的預設可用區,例如「us-central1-a」和「us-central1-b」。

    如果設定檔有其他設定,請勿修改這些設定。設定檔中的任何修改或移除作業,也會修改對應的叢集層級設定。

  2. 指定 --autoprovisioning-config-file 參數和 --enable-autoprovisioning 參數,為新叢集或現有叢集提供 GKE 設定檔:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --autoprovisioning-config-file=PATH_TO_CONFIGURATION_FILE
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。
    • PATH_TO_CONFIGURATION_FILE:設定檔的路徑。

設定客戶管理的加密金鑰,用於開機磁碟加密

您可以在 Cloud Key Management Service 中指定客戶管理的加密金鑰 (CMEK),GKE 會使用這項金鑰加密自動建立的節點集區中節點的開機磁碟。您必須先建立金鑰,才能搭配節點集區自動建立功能使用。如要為節點開機磁碟設定 CMEK,請選取下列任一選項:

ComputeClass

在 ComputeClasses 中,您必須在 ComputeClass 的 spec.priorities 欄位中,為每個優先順序規則指定鍵。

  1. 在 ComputeClass 資訊清單中,使用 priorities.storage.bootDiskKMSKey 欄位:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS
    spec:
      priorities:
      - machineFamily: n4
        storage:
          bootDiskKMSKey: projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
      - machineFamily: n4d
        storage:
          bootDiskKMSKey: projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
      whenUnsatisfiable: ScaleUpAnyway
      nodePoolAutoCreation:
        enabled: true
    

    更改下列內容:

    • KEY_PROJECT_ID:含有金鑰的專案 ID。
    • KEY_LOCATION:金鑰環的位置。
    • KEY_RING:金鑰所屬金鑰環的名稱。
    • KEY_NAME:金鑰名稱。
  2. 將 ComputeClass 資訊清單套用至叢集:

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    請將 PATH_TO_COMPUTECLASS_MANIFEST 替換為 ComputeClass 資訊清單檔案的路徑。

gcloud

  1. 在設定檔中指定 bootDiskKmsKey 欄位:

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

    更改下列內容:

    • KEY_PROJECT_ID:含有金鑰的專案 ID。
    • KEY_LOCATION:金鑰環的位置。
    • KEY_RING:金鑰所屬金鑰環的名稱。
    • KEY_NAME:金鑰名稱。

    如果設定檔有其他設定,請勿修改這些設定。設定檔中的任何修改或移除作業,也會修改對應的叢集層級設定。

  2. 指定 --autoprovisioning-config-file 參數和 --enable-autoprovisioning 參數,為新叢集或現有叢集提供 GKE 設定檔:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --autoprovisioning-config-file=PATH_TO_CONFIGURATION_FILE
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。
    • PATH_TO_CONFIGURATION_FILE:設定檔的路徑。

設定節點完整性和安全啟動

您只能使用節點自動佈建設定檔,為自動建立的節點集區啟用安全啟動和完整性監控

  1. 在設定檔中指定 shieldedInstanceConfig 欄位:

    shieldedInstanceConfig:
      enableSecureBoot: true
      enableIntegrityMonitoring: true
    

    如果設定檔有其他設定,請勿修改這些設定。設定檔中的任何修改或移除作業,也會修改對應的叢集層級設定。

  2. 指定 --autoprovisioning-config-file 參數和 --enable-autoprovisioning 參數,為新叢集或現有叢集提供 GKE 設定檔:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --autoprovisioning-config-file=PATH_TO_CONFIGURATION_FILE
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。
    • PATH_TO_CONFIGURATION_FILE:設定檔的路徑。

設定節點自動修復和自動升級功能

您可以修改自動建立節點集區的節點自動修復節點自動升級設定。所有 GKE 叢集和節點集區預設都會啟用這些功能。建議您啟用這些功能,以提升叢集的穩定性和可靠性。

如要變更節點自動修復和節點自動升級設定,請選取下列其中一個選項:

ComputeClass

  1. 在 ComputeClass 資訊清單中,使用 autoRepair 欄位和 spec.nodePoolConfig 欄位中的 autoUpgrade 欄位。這些欄位適用於 GKE 1.34.0-gke.2201000 以上版本。

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS
    spec:
      nodePoolConfig:
        autoRepair: true
        autoUpgrade: true
      priorities:
      - machineFamily: n4
      - machineFamily: n4d
      whenUnsatisfiable: ScaleUpAnyway
      nodePoolAutoCreation:
        enabled: true
    
  2. 將 ComputeClass 資訊清單套用至叢集:

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    請將 PATH_TO_COMPUTECLASS_MANIFEST 替換為 ComputeClass 資訊清單檔案的路徑。

gcloud

  • 如要在指令列中啟用自動修復和自動升級設定,請使用 --enable-autoprovisioning-autorepair--enable-autoprovisioning-autoupgrade 旗標:

    gcloud container clusters update CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --enable-autoprovisioning-autorepair \
        --enable-autoprovisioning-autoupgrade
    
  • 如要透過指令列停用自動修復和自動升級設定,請使用 --no-enable-autoprovisioning-autorepair--no-enable-autoprovisioning-autoupgrade 旗標:

    gcloud container clusters update CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --no-enable-autoprovisioning-autorepair \
        --no-enable-autoprovisioning-autoupgrade
    
  • 如要使用設定檔修改節點自動修復和自動升級的設定,請按照下列步驟操作:

    1. 在設定檔中指定 management.autoRepairmanagement.autoUpgrade 欄位:

      management:
        autoRepair: true
        autoUpgrade: true
      

      如果設定檔有其他設定,請勿修改這些設定。設定檔中的任何修改或移除作業,也會修改對應的叢集層級設定。

    2. 指定 --autoprovisioning-config-file 參數和 --enable-autoprovisioning 參數,為新叢集或現有叢集提供 GKE 設定檔:

      gcloud container clusters create CLUSTER_NAME \
          --location=CONTROL_PLANE_LOCATION \
          --enable-autoprovisioning \
          --autoprovisioning-config-file=PATH_TO_CONFIGURATION_FILE
      

      更改下列內容:

      • CLUSTER_NAME:叢集名稱。
      • PATH_TO_CONFIGURATION_FILE:設定檔的路徑。

設定節點數擴充升級設定

您可以在自動建立的節點集區中指定突增升級設定。節點數擴充升級是預設的 GKE 節點升級策略。如要變更突增升級設定,必須設定叢集層級的節點自動佈建功能。

  • 如要在指令列中指定大量升級設定,請使用 --autoprovisioning-max-surge-upgrade--autoprovisioning-max-unavailable-upgrade 標記:

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

    更改下列內容:

    • MAX_SURGE:升級期間可新增至節點集區的節點數量上限。
    • MAX_UNAVAILABLE:節點集區中可同時無法使用的節點數量上限 (升級期間)。
  • 如要使用設定檔指定升級設定,請按照下列步驟操作:

    1. 在設定檔中指定 upgradeSettings.maxSurgeUpgradeupgradeSettings.maxUnavailableUpgrade 欄位:

      upgradeSettings:
        maxSurgeUpgrade: MAX_SURGE
        maxUnavailableUpgrade: MAX_UNAVAILABLE
      

      如果設定檔有其他設定,請勿修改這些設定。設定檔中的任何修改或移除作業,也會修改對應的叢集層級設定。

    2. 指定 --autoprovisioning-config-file 參數和 --enable-autoprovisioning 參數,為新叢集或現有叢集提供 GKE 設定檔:

      gcloud container clusters create CLUSTER_NAME \
          --location=CONTROL_PLANE_LOCATION \
          --enable-autoprovisioning \
          --autoprovisioning-config-file=PATH_TO_CONFIGURATION_FILE
      

      更改下列內容:

      • CLUSTER_NAME:叢集名稱。
      • PATH_TO_CONFIGURATION_FILE:設定檔的路徑。

只有在叢集使用節點數擴充升級功能,升級自動建立的節點集區時,您指定的節點數擴充升級設定才會套用。如要將節點升級策略切換為新自動建立節點集區的升級浪湧,請執行下列指令:

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --enable-autoprovisioning \
    --enable-autoprovisioning-surge-upgrade

切換升級策略時,GKE 會使用您先前為該升級策略設定的任何設定。

為自動建立的新節點集區使用藍綠升級

您可以將節點升級策略切換為藍綠升級,適用於所有自動建立的新節點集區,並調整藍綠升級的預設設定。如要變更升級策略,必須設定叢集層級的節點自動佈建功能。您所做的任何變更只會套用至新自動建立的節點集區。您也可以更新現有自動建立的節點集區,改用藍綠升級

  • 如要使用藍綠升級和 GKE 預設設定,為自動建立的新節點集區升級,請執行下列指令:

    gcloud container clusters update CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION
        --enable-autoprovisioning \
        --enable-autoprovisioning-blue-green-upgrade
    
  • 如要使用藍綠升級功能,並為新自動建立的節點集區設定預設設定,請執行下列指令:

    gcloud container clusters update CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --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
    

    更改下列內容:

    • NODE_POOL_SOAK_DURATION:GKE 在排空藍色集區中的所有節點批次後,等待的時間長度 (以秒為單位),預設值為 3600
    • BATCH_NODE_COUNT:在藍色集區排除階段,批次排除的節點數量。預設值為 1。如果您指定 0 值,GKE 會略過藍色集區排空階段。
    • BATCH_SOAK_DURATION:GKE 在前一個排空作業完成後,等待開始批次排空作業的時間長度 (以秒為單位)。預設值為 0

設定自訂節點開機磁碟

如要指定 GKE 附加至自動建立節點集區中每個節點 VM 的開機磁碟類型和大小,請選取下列其中一個選項:

ComputeClass

  1. 在 ComputeClass 的 spec.priorities.storage 欄位中使用 bootDiskTypebootDiskSize 欄位:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS
    spec:
      priorities:
      - machineFamily: n4
        storage:
          bootDiskType: BOOT_DISK_TYPE
          bootDiskSize: BOOT_DISK_SIZE
      - machineFamily: n4d
        storage:
          bootDiskType: BOOT_DISK_TYPE
          bootDiskSize: BOOT_DISK_SIZE
      whenUnsatisfiable: ScaleUpAnyway
      nodePoolAutoCreation:
        enabled: true
    

    更改下列內容:

    • BOOT_DISK_TYPE:用做節點開機磁碟的磁碟類型。您指定的值必須受到 GKE 用於該優先順序規則的 Compute Engine 機器類型支援。這個值必須是下列其中一個:
      • pd-balanced:平衡型永久磁碟。
      • pd-standard:標準永久磁碟。
      • pd-ssd:效能型 (SSD) 永久磁碟。
      • hyperdisk-balanced:Google Cloud Hyperdisk Balanced。
    • BOOT_DISK_SIZE:節點開機磁碟的大小 (以 GiB 為單位)。最小值為 10
  2. 將 ComputeClass 資訊清單套用至叢集:

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    請將 PATH_TO_COMPUTECLASS_MANIFEST 替換為 ComputeClass 資訊清單檔案的路徑。

gcloud

  1. 在設定檔中,指定 diskSizeGbdiskType 欄位:

    diskSizeGb: BOOT_DISK_SIZE
    diskType: BOOT_DISK_TYPE
    

    更改下列內容:

    • BOOT_DISK_TYPE:用做節點開機磁碟的磁碟類型。您指定的值必須受到 GKE 用於該優先順序規則的 Compute Engine 機器類型支援。這個值必須是下列其中一個:
      • pd-balanced:平衡型永久磁碟。
      • pd-standard:標準永久磁碟。
      • pd-ssd:效能型 (SSD) 永久磁碟。
      • hyperdisk-balanced:Google Cloud Hyperdisk Balanced。
    • BOOT_DISK_SIZE:節點開機磁碟的大小 (以 GiB 為單位)。最小值為 10

    如果設定檔有其他設定,請勿修改這些設定。設定檔中的任何修改或移除作業,也會修改對應的叢集層級設定。

  2. 指定 --autoprovisioning-config-file 參數和 --enable-autoprovisioning 參數,為新叢集或現有叢集提供 GKE 設定檔:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-autoprovisioning \
        --autoprovisioning-config-file=PATH_TO_CONFIGURATION_FILE
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。
    • PATH_TO_CONFIGURATION_FILE:設定檔的路徑。

GKE 會保留部分節點開機磁碟,用於系統功能和暫時性儲存空間。詳情請參閱「以節點開機磁碟為基礎的暫時儲存空間」。

為常見情境設定自動建立的節點集區

以下各節說明如何針對特定常見 GKE 用途,要求自動建立節點集區。如要進一步瞭解其他用途和支援的設定,請參閱特定用途的說明文件。

選取機器系列或機型

如要選取支援的 Compute Engine 機器系列或機器類型,請選取下列任一選項:

ComputeClass

  1. 在 ComputeClass 資訊清單中,於 spec.priorities 欄位指定下列任一欄位。您可以在同一個 ComputeClass 資訊清單中指定這兩個欄位,但不能在同一個優先順序規則中指定。

    • 如要選取機器系列,請在優先順序規則中指定 machineFamily 欄位:

      apiVersion: cloud.google.com/v1
      kind: ComputeClass
      metadata:
        name: COMPUTE_CLASS
      spec:
        priorities:
        - machineFamily: MACHINE_SERIES
        whenUnsatisfiable: ScaleUpAnyway
        nodePoolAutoCreation:
          enabled: true
      

      MACHINE_SERIES 替換為 Compute Engine 機器系列,例如 n4

    • 如要選取機型,請在優先順序規則中指定 machineType 欄位:

      apiVersion: cloud.google.com/v1
      kind: ComputeClass
      metadata:
        name: COMPUTE_CLASS
      spec:
        priorities:
        - machineType: MACHINE_TYPE
        whenUnsatisfiable: ScaleUpAnyway
        nodePoolAutoCreation:
          enabled: true
      

      MACHINE_TYPE 替換為 Compute Engine 機型,例如 c4-standard-96。在 GKE 1.33.2-gke.1111000 以上版本中,您也可以在這個欄位中指定自訂機器類型

    您無法在同一個優先規則中指定 machineFamily 欄位和 machineType 欄位。

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

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    請將 PATH_TO_COMPUTECLASS_MANIFEST 替換為 ComputeClass 資訊清單檔案的路徑。

  3. 在工作負載中選取 ComputeClass

Pod 規格

  1. 在 Pod 資訊清單中,選取下列其中一個節點標籤:

    • 如要選取機器系列,請使用 cloud.google.com/machine-family 節點標籤:

      apiVersion: v1
      kind: Pod
      metadata:
        name: machine-series-pod
      spec:
        nodeSelector:
          cloud.google.com/machine-family: MACHINE_SERIES
        containers:
        - name: hello-app
          image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
      

      MACHINE_SERIES 替換為 Compute Engine 機器系列,例如 n4

    • 如要選取預先定義的機器類型,請使用 cloud.google.com/machine-familynode.kubernetes.io/instance-type 節點標籤:

      apiVersion: v1
      kind: Pod
      metadata:
        name: machine-series-pod
      spec:
        nodeSelector:
          cloud.google.com/machine-family: MACHINE_SERIES
          node.kubernetes.io/instance-type: MACHINE_TYPE
        containers:
        - name: hello-app
          image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
      

      MACHINE_TYPE 替換為指定機器系列中的 Compute Engine 機器類型。舉例來說,如果您為 MACHINE_SERIES 指定 n4,則可以為 MACHINE_TYPE 指定 n4-standard-80

      在 GKE 1.33.2-gke.1111000 版中,您也可以在這個欄位中指定自訂機器類型

  2. 建立 Pod:

    kubectl apply -f PATH_TO_POD_MANIFEST
    

    PATH_TO_POD_MANIFEST 替換為 Pod 資訊清單的路徑。

選取 GPU

如要為自動建立的節點集區要求 GPU,請選取下列其中一個選項:

ComputeClass

  1. 在 ComputeClass 資訊清單中,指定 spec.priorities.gpu 欄位:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS
    spec:
      priorities:
      - gpu:
          type: GPU_TYPE
          count: GPU_COUNT
          driverVersion: DRIVER_VERSION
      whenUnsatisfiable: DoNotScaleUp
      nodePoolAutoCreation:
        enabled: true
    

    更改下列內容:

    • GPU_TYPE:要附加的 GPU 類型,例如 nvidia-l4
    • GPU_COUNT:要附加至每個節點的 GPU 數量。這個值不得小於 1
    • DRIVER_VERSION:要安裝的 GPU 驅動程式版本。這個值必須為 defaultlatest。這個欄位需要 GKE 1.31.1-gke.1858000 以上版本。
  2. 將 ComputeClass 資訊清單套用至叢集:

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    請將 PATH_TO_COMPUTECLASS_MANIFEST 替換為 ComputeClass 資訊清單檔案的路徑。

  3. 在 GPU 工作負載中選取 ComputeClass,如下列範例所示:

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-gpu-pod
    spec:
      nodeSelector:
        cloud.google.com/compute-class: nvidia-l4-class
      containers:
      - name: my-gpu-container
        image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
        command: ["/bin/bash", "-c", "--"]
        args: ["while true; do sleep 600; done;"]
        resources:
          limits:
          nvidia.com/gpu: 1
    

Pod 規格

如要在 Pod 規格中選取 GPU,您必須設定叢集層級節點自動佈建,並為該 GPU 類型設定資源限制。如要設定 GPU 資源限制並在 Pod 中選取 GPU,請按照下列步驟操作:

  1. 如要使用 GPU,請按照「設定節點集區自動建立的資源限制」一節的說明,設定叢集層級的資源限制。
  2. 在 Pod 規格中使用節點標籤選取 GPU:

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-gpu-pod
    spec:
      nodeSelector:
        cloud.google.com/gke-accelerator: GPU_TYPE
        cloud.google.com/gke-accelerator-count: GPU_COUNT
        cloud.google.com/gke-gpu-driver-version: DRIVER_VERSION
      containers:
      - name: my-gpu-container
        image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
        command: ["/bin/bash", "-c", "--"]
        args: ["while true; do sleep 600; done;"]
        resources:
          limits:
          nvidia.com/gpu: GPU_QUANTITY
    

    更改下列內容:

    • GPU_TYPE:要附加的 GPU 類型,例如 nvidia-l4
    • GPU_COUNT:要附加至每個節點的 GPU 數量。這個值不得小於 1
    • DRIVER_VERSION:要安裝的 GPU 驅動程式版本。這個值必須為 defaultlatest。在 GKE 1.32.2-gke.1297000 以上版本中,GKE 會自動安裝 default 驅動程式版本。如要使用這個節點標籤,必須使用 GKE 1.29.2-gke.1108000 以上版本。詳情請參閱使用節點自動佈建功能安裝 GPU 驅動程式
    • GPU_QUANTITY:要附加至 Pod 的 GPU 數量。這個值必須小於或等於 GPU_COUNT 的值。

選取 TPU

您可以在 ComputeClass 或 Pod 規格中要求 TPU。本節假設您已熟悉 Cloud TPU 選項,並瞭解要使用的 TPU 類型、拓撲和數量。您採取的步驟取決於選取 TPU 的方式:

限制自動建立節點的執行時間

您可以指定最長時數,GKE 會在時間到期後終止自動建立的節點。這項時間限制適用於 Compute Engine 限制

選取下列選項之一:

ComputeClass

  1. 在 ComputeClass 資訊清單中,使用 spec.priorities.maxRunDurationSeconds 欄位。這個欄位適用於 GKE 1.32.1-gke.1159000 以上版本。

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: COMPUTE_CLASS
    spec:
      priorities:
      - machine-family: n4
        maxRunDurationSeconds: MAX_RUN_DURATION
      whenUnsatisfiable: DoNotScaleUp
      nodePoolAutoCreation:
        enabled: true
    

    MAX_RUN_DURATION 替換為時間 (以秒為單位),自動建立的節點可在 GKE 終止節點前執行。

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

    kubectl apply -f PATH_TO_COMPUTECLASS_MANIFEST
    

    請將 PATH_TO_COMPUTECLASS_MANIFEST 替換為 ComputeClass 資訊清單檔案的路徑。

  3. 在工作負載中選取 ComputeClass

Pod 規格

  1. 在 Pod 資訊清單中,使用 cloud.google.com/gke-max-run-duration-seconds 節點標籤的節點選取器。這個節點標籤適用於 GKE 1.31.2-gke.1518000 以上版本。

    apiVersion: v1
    kind: Pod
    metadata:
      name: machine-series-pod
    spec:
      nodeSelector:
        cloud.google.com/machine-family: n4
        cloud.google.com/gke-max-run-duration-seconds: MAX_RUN_DURATION
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
    

    MAX_RUN_DURATION 替換為時間 (以秒為單位),自動建立的節點可在 GKE 終止節點前執行。

  2. 建立 Pod:

    kubectl apply -f PATH_TO_POD_MANIFEST
    

    PATH_TO_POD_MANIFEST 替換為 Pod 資訊清單的路徑。

指定最低 CPU 平台

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

停用節點集區自動建立功能

以下各節說明如何為特定節點集區或整個叢集停用節點集區自動建立功能。您也可以在 ComputeClass 的 nodePoolAutoCreation.enabled 欄位中指定 false 值,停用 ComputeClass 中的節點集區自動建立功能。不過,我們不建議停用 ComputeClass 的自動建立功能,因為自動建立是 ComputeClass 的主要優點,可讓您使用主動遷移和備援優先順序等功能。

停用特定節點集區的自動建立功能

您可以停止讓 GKE 管理現有自動建立的節點集區中的節點。這項操作會產生下列影響:

  • 叢集自動調度器會停止在該節點集區中建立或刪除節點。如要讓 GKE 自動調度節點資源,可以為該節點集區啟用叢集自動配置器
  • 節點數量為零時,GKE 不會刪除節點集區。
  • GKE 會繼續將待處理的 Pod 放置在該節點集區中可用的現有節點上。如果叢集仍啟用節點自動佈建功能,GKE 也能視需要為待處理的 Pod 建立新的節點集區。

如要停用特定節點集區的自動建立功能,請執行下列指令:

gcloud container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --no-enable-autoprovisioning

停用叢集的節點自動佈建功能

如要停用整個叢集的節點集區自動建立功能,請停用節點自動佈建叢集設定。這項操作會產生下列影響:

  • 叢集自動配置器會停止在現有自動建立的節點集區中建立及刪除節點。使用叢集自動配置器的手動建立節點集區不受影響。
  • GKE 不會自動為待處理的工作負載建立新的節點集區。監控叢集,避免 Pod 停滯。
  • 如果叢集符合下列需求,GKE 會繼續為啟用自動建立功能的 ComputeClass 建立新的節點集區:

    • 使用 GKE 1.33.3-gke.1136000 以上版本。
    • 已註冊搶鮮版發布管道。

    如果叢集不符合這些需求,GKE 就不會為啟用自動建立功能的 ComputeClass 建立新的節點集區。

如果您稍後重新啟用叢集層級的節點自動佈建設定,GKE 不會重新啟用現有節點集區的節點集區自動建立功能。您必須將個別節點集區標示為自動建立。

如要停用叢集層級的節點自動佈建設定,請選取下列任一選項:

控制台

  1. 在 Google Cloud 控制台中,前往「Kubernetes clusters」(Kubernetes 叢集) 頁面:

    前往 Kubernetes 叢集

  2. 點按要修改的叢集名稱。「叢集詳細資料」頁面隨即開啟。

  3. 按一下 [Details] (詳細資料) 分頁標籤。

  4. 在「Automation」(自動化) 區段中,找到「Node auto-provisioning」(節點自動佈建) 列,然後按一下「Edit」(編輯)。系統會顯示「Edit node auto-provisioning」(編輯節點自動佈建功能) 窗格。

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

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

gcloud

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --no-enable-autoprovisioning

後續步驟