建立叢集來執行容器工作負載

建立 Kubernetes 叢集,以便部署容器工作負載。叢集是區域性資源,無法跨越多個區域。如要在多區域部署中運作叢集,您必須在每個區域中手動建立叢集。

事前準備

如要取得建立 Kubernetes 叢集所需的權限,請要求機構 IAM 管理員授予使用者叢集管理員角色 (user-cluster-admin)。這個角色不會繫結至命名空間。

Google Distributed Cloud (GDC) 實體隔離方案的 Kubernetes 叢集有下列限制:

  • 每個機構 16 個叢集
  • 每個叢集 42 個工作站節點,最少三個工作站節點
  • 每個叢集 4620 個 Pod
  • 每個節點 110 個 Pod

設定 Pod CIDR 區塊

叢集分配 IP 位址時會遵循下列邏輯:

  • Kubernetes 會將包含 256 個位址的 /24 CIDR 區塊指派給每個節點。這個數量符合使用者叢集每個節點的預設 Pod 數量上限 (110 個)。
  • 指派給節點的 CIDR 區塊大小取決於每個節點的最大 Pod 數值。
  • 區塊一律包含每個節點的最大 Pod 數至少兩倍的位址。

請參閱以下範例,瞭解如何計算 Per node mask size= /24 的預設值,以容納 110 個 Pod:

Maximum pods per node = 110
Total number of IP addresses required = 2 * 110 = 220

Per node mask size = /24
Number of IP addresses in a /24 = 2(32 - 24) = 256

根據所需節點數量,決定要為使用者叢集設定的必要 Pod CIDR 遮罩。設定 CIDR 範圍時,請規劃叢集未來新增節點的作業:

  Total number of nodes supported = 2(Per node mask size - pod CIDR mask)

由於預設每個節點的遮罩大小為 /24,請參閱下表,瞭解 Pod CIDR 遮罩對應支援的節點數量。

Pod CIDR 遮罩 計算方式: 2(每個節點的遮罩大小 - CIDR 遮罩) 支援的節點數量上限,包括控制層節點
/21 2(24 - 21) 8
/20 2(24-20) 16
/19 2(24 - 19) 32
/18 2(24 - 18) 64

建立 Kubernetes 叢集

請完成下列步驟,建立 Kubernetes 叢集:

主控台

  1. 在導覽選單中,依序選取「Kubernetes Engine」>「叢集」

  2. 點選「建立叢集」

  3. 在「Name」(名稱) 欄位中,指定叢集的名稱。

  4. 選取叢集的 Kubernetes 版本。

  5. 選取要建立叢集的可用區。

  6. 按一下「附加專案」,然後選取要附加至叢集的現有專案。點選這個選項後,按一下 [儲存]。建立叢集後,您可以前往專案詳細資料頁面附加或卸離專案。您必須先將專案附加至叢集,才能部署容器工作負載。

    使用控制台建立叢集。

  7. 點選「下一步」

  8. 設定叢集的網路設定。叢集建立後,您就無法變更這些網路設定。Kubernetes 叢集的預設網際網路通訊協定是網際網路通訊協定第 4 版 (IPv4),且僅支援此通訊協定。

    1. 如要建立專屬的負載平衡器節點,請輸入要建立的節點數。根據預設,您會收到零個節點,而負載平衡器流量會透過控制節點執行。

    2. 選取要使用的「服務 CIDR」(無類別跨網域路由)。系統會從這個範圍為已部署的服務 (例如負載平衡器) 分配 IP 位址。

    3. 選取要使用的 Pod CIDR。叢集會從這個範圍將 IP 位址分配給 Pod 和 VM。

    4. 點選「下一步」

  9. 查看叢集自動產生的預設節點集區詳細資料。按一下「編輯」,修改預設節點集區。

  10. 如要建立其他節點集區,請選取「新增節點集區」。編輯預設節點集區或新增節點集區時,您可以透過下列選項自訂節點集區:

    1. 指派節點集區的名稱。節點集區建立後,您就無法修改名稱。
    2. 指定要在節點集區中建立的工作站節點數量。
    3. 選取最符合工作負載需求的機器類別。 查看下列設定清單:

      • 機型
      • CPU
      • 記憶體
    4. 按一下 [儲存]

  11. 點選「建立」來建立叢集。

API

如要直接使用 API 建立新叢集,請將自訂資源套用至 GDC 執行個體:

  1. 建立 Cluster 自訂資源,並儲存為 YAML 檔案,例如 cluster.yaml

    apiVersion: cluster.gdc.goog/v1
    kind: Cluster
    metadata:
      name: CLUSTER_NAME
      namespace: platform
    spec:
      clusterNetwork:
        podCIDRSize: POD_CIDR
        serviceCIDRSize: SERVICE_CIDR
      initialVersion:
        kubernetesVersion: KUBERNETES_VERSION
      loadBalancer:
        ingressServiceIPSize: LOAD_BALANCER_POOL_SIZE
      nodePools:
      - machineTypeName: MACHINE_TYPE
        name: NODE_POOL_NAME
        nodeCount: NUMBER_OF_WORKER_NODES
        taints: TAINTS
        labels: LABELS
        acceleratorOptions:
          gpuPartitionScheme: GPU_PARTITION_SCHEME
      releaseChannel:
        channel: UNSPECIFIED
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。叢集名稱結尾不得為 -system-system 後置字串保留給 GDC 建立的叢集。
    • POD_CIDR:網路範圍的大小,Pod 虛擬 IP 位址會從這個範圍分配。如未設定,系統會使用預設值 21
    • SERVICE_CIDR:網路範圍的大小,服務虛擬 IP 位址會從這個範圍分配。如未設定,系統會使用預設值 23
    • KUBERNETES_VERSION:叢集的 Kubernetes 版本,例如 1.26.5-gke.2100。如要列出可供設定的 Kubernetes 版本,請參閱「列出叢集可用的 Kubernetes 版本」。
    • LOAD_BALANCER_POOL_SIZE:負載平衡器服務使用的不重疊 IP 位址集區大小。如未設定,系統會使用預設值 20
    • MACHINE_TYPE:節點集區工作站節點的機型。如要查看可設定的項目,請參閱可用的機器類型
    • NODE_POOL_NAME:節點集區的名稱。
    • NUMBER_OF_WORKER_NODES:要在節點集區中佈建的工作站節點數量。
    • TAINTS:要套用至這個節點集區節點的 taint。此為選填欄位。
    • LABELS:要套用至這個節點集區節點的標籤。其中包含鍵/值組合清單。這是選填欄位。
    • GPU_PARTITION_SCHEME:如果您執行 GPU 工作負載,請使用 GPU 分割配置。例如,mixed-2。如果未設定這個欄位,GPU 就不會分割。如要瞭解可用的多執行個體 GPU (MIG) 設定檔,請參閱「支援的 MIG 設定檔」。
  2. 將自訂資源套用至 GDC 執行個體:

    kubectl apply -f cluster.yaml --kubeconfig MANAGEMENT_API_SERVER
    

    MANAGEMENT_API_SERVER 替換為區域 API 伺服器的 kubeconfig 路徑。如果您尚未在目標區域中為 API 伺服器產生 kubeconfig 檔案,請參閱「登入」一文瞭解詳情。

Terraform

  1. 在 Terraform 設定檔中,插入下列程式碼片段:

    provider "kubernetes" {
      config_path = "MANAGEMENT_API_SERVER"
    }
    
    resource "kubernetes_manifest" "cluster-create" {
      manifest = {
        "apiVersion" = "cluster.gdc.goog/v1"
        "kind" = "Cluster"
        "metadata" = {
          "name" = "CLUSTER_NAME"
          "namespace" = "platform"
        }
        "spec" = {
          "clusterNetwork" = {
            "podCIDRSize" = "POD_CIDR"
            "serviceCIDRSize" = "SERVICE_CIDR"
          }
          "initialVersion" = {
            "kubernetesVersion" = "KUBERNETES_VERSION"
          }
          "loadBalancer" = {
            "ingressServiceIPSize" = "LOAD_BALANCER_POOL_SIZE"
          }
          "nodePools" = [{
            "machineTypeName" = "MACHINE_TYPE"
            "name" = "NODE_POOL_NAME"
            "nodeCount" = "NUMBER_OF_WORKER_NODES"
            "taints" = "TAINTS"
            "labels" = "LABELS"
            "acceleratorOptions" = {
              "gpuPartitionScheme" = "GPU_PARTITION_SCHEME"
            }
          }]
          "releaseChannel" = {
            "channel" = "UNSPECIFIED"
          }
        }
      }
    }
    

    更改下列內容:

    • MANAGEMENT_API_SERVER:區域 API 伺服器的 kubeconfig 路徑。如果您尚未為目標區域中的 API 伺服器產生 kubeconfig 檔案,請參閱「登入」一節瞭解詳情。
    • CLUSTER_NAME:叢集名稱。叢集名稱結尾不得為 -system-system 後置字串保留給 GDC 建立的叢集。
    • POD_CIDR:網路範圍的大小,Pod 虛擬 IP 位址會從這個範圍分配。如未設定,系統會使用預設值 21
    • SERVICE_CIDR:網路範圍的大小,服務虛擬 IP 位址會從這個範圍分配。如未設定,系統會使用預設值 23
    • KUBERNETES_VERSION:叢集的 Kubernetes 版本,例如 1.26.5-gke.2100。如要列出可供設定的 Kubernetes 版本,請參閱「列出叢集可用的 Kubernetes 版本」。
    • LOAD_BALANCER_POOL_SIZE:負載平衡器服務使用的不重疊 IP 位址集區大小。如未設定,系統會使用預設值 20
    • MACHINE_TYPE:節點集區工作站節點的機型。如要查看可設定的項目,請參閱可用的機器類型
    • NODE_POOL_NAME:節點集區的名稱。
    • NUMBER_OF_WORKER_NODES:要在節點集區中佈建的工作站節點數量。
    • TAINTS:要套用至這個節點集區節點的 taint。此為選填欄位。
    • LABELS:要套用至這個節點集區節點的標籤。其中包含鍵/值組合清單。這是選填欄位。
    • GPU_PARTITION_SCHEME:如果您執行 GPU 工作負載,請使用 GPU 分割配置。例如,mixed-2。如果未設定這個欄位,GPU 就不會分割。如要瞭解可用的多執行個體 GPU (MIG) 設定檔,請參閱「支援的 MIG 設定檔」。
  2. 使用 Terraform 套用新的 Kubernetes 叢集:

    terraform apply
    

列出叢集可用的 Kubernetes 版本

您可以使用 kubectl CLI,列出 GDC 執行個體中可用的 Kubernetes 版本:

kubectl get userclustermetadata.upgrade.private.gdc.goog \
    -o=custom-columns=K8S-VERSION:.spec.kubernetesVersion \
    --kubeconfig MANAGEMENT_API_SERVER

MANAGEMENT_API_SERVER 替換為叢集區域 API 伺服器的 kubeconfig 路徑。

輸出看起來類似以下內容:

K8S-VERSION
1.25.10-gke.2100
1.26.5-gke.2100
1.27.4-gke.500

在叢集中支援 GPU 工作負載

Distributed Cloud 為 Kubernetes 叢集提供 NVIDIA GPU 支援,並以使用者工作負載的形式執行 GPU 裝置。舉例來說,您可能偏好在 GPU 環境中執行人工智慧 (AI) 和機器學習 (ML) 筆記本。使用 AI 和 ML 筆記本前,請先確認叢集支援 GPU 裝置。如果叢集已佈建 GPU 機器,系統預設會啟用 GPU 支援。

您可以直接使用 GDC 控制台或 API 建立叢集。 請確保為叢集佈建 GPU 機器,以便支援相關聯容器上的 GPU 工作負載。詳情請參閱「建立 Kubernetes 叢集」。

GPU 是靜態分配的。前四個 GPU 一律專用於預先訓練的人工智慧 (AI) 和機器學習 (ML) API 等工作負載。這些 GPU 不會在 Kubernetes 叢集上執行。其餘 GPU 可供 Kubernetes 叢集使用。AI 和 ML 筆記本會在 Kubernetes 叢集上執行。

請務必為正確的叢集類型分配 GPU 機器,確保可以使用 AI 和 ML API 與筆記本等元件。