本文說明如何在 Google Distributed Cloud (GDC) 實體隔離區域中,建立共用 Kubernetes 叢集。共用叢集會橫跨多項專案,並包含全方位的 GDC 代管服務,提供高度固定的 Kubernetes 叢集設定,可設定的項目比標準叢集少。如要進一步瞭解標準叢集,請參閱「Kubernetes 叢集設定」。
共用叢集是可用區資源,無法跨越多個可用區。如要在多可用區宇宙中操作叢集,必須在各可用區手動建立叢集。
本文適用於應用程式開發人員等對象,例如應用程式營運商群組中負責管理組織內容器工作負載的人員。詳情請參閱「GDC 實體隔離方案說明文件的目標對象」。
事前準備
如要取得建立共用叢集所需的權限,請要求 IAM 機構組織管理員授予您使用者叢集管理員角色 (
user-cluster-admin)。這個角色不會繫結至命名空間。如要使用 API 或 Terraform 建立共用叢集,請產生可用區 API 伺服器的 kubeconfig 檔案,用於託管叢集。將環境變數
MANAGEMENT_API_SERVER設為 kubeconfig 路徑。詳情請參閱「可用區管理 API 伺服器資源」。請查看叢集限制,瞭解資源考量事項。
規劃 Pod CIDR 區塊
如要為工作負載分配適當大小的 Pod CIDR 區塊,您必須先計算 Kubernetes 叢集所需的 IP 位址數量,再建立叢集。叢集建立後,大部分網路參數即無法變更。
Kubernetes 叢集會依據下列邏輯分配 IP 位址:
- Kubernetes 會將由 256 個位址組成的
/24CIDR 區塊指派給每個節點。這個數量符合 Kubernetes 叢集每個節點預設最多 110 個 Pod 的限制。 - 指派給節點的 CIDR 區塊大小,取決於每個節點的 Pod 數量上限值。
- 區塊包含的位址數量,一律至少是每個節點 Pod 數量上限的兩倍。
請參閱以下範例,瞭解如何計算「Per node mask size= /24」(每個節點的遮罩大小 = /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
根據所需的節點數量,決定要為 Kubernetes 叢集設定的 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 叢集的 Pod CIDR 區塊後,請在下一節的叢集建立工作流程中設定該區塊。
建立共用叢集
請按照下列步驟建立共用 Kubernetes 叢集:
控制台
在專案挑選器中選取組織。
共用叢集是組織範圍內的資源。如果改為選取專案,則會建立專案範圍內的標準叢集。詳情請參閱資源階層結構。
在導覽選單中,依序選取 「Kubernetes Engine」 > 「叢集」。
點選「建立叢集」。
在「Name」(名稱) 欄位中,指定叢集名稱。
選取叢集的 Kubernetes 版本。
選取要建立叢集的可用區。
按一下「Attach Project」(附加專案),然後選取要附加至叢集的現有專案。點選這個選項後,按一下 [儲存]。建立叢集後,您可以在專案詳細資料頁面附加或卸離專案。您必須先將專案附加至叢集,才能在叢集部署容器工作負載。

點選「下一步」。
設定叢集的網路設定。叢集建立後,您就無法變更這些網路設定。Kubernetes 叢集預設且唯一支援的網際網路通訊協定是網際網路通訊協定第 4 版 (IPv4)。
如要建立專屬負載平衡器節點,請輸入要建立的節點數量。根據預設,您不會收到任何節點,且負載平衡器流量會透過控制節點執行。
選取要使用的服務 CIDR (無類別跨網域路由)。系統會從這個範圍內,為您部署的服務 (例如負載平衡器) 分配 IP 位址。
選取要使用的 Pod CIDR。叢集會從這個範圍分配 IP 位址給 Pod 和 VM。
點選「下一步」。
查看叢集自動生成的預設節點集區詳細資料。按一下「edit Edit」(編輯),修改預設節點集區。
如要建立其他節點集區,請選取「新增節點集區」。編輯預設節點集區或新增節點集區時,您可以使用下列選項進行自訂:
- 為節點集區命名。節點集區建立後即無法修改名稱。
- 指定要在節點集區中建立的 worker 節點數量。
請依據工作負載需求,選取最合適的機器類別。查看下列設定清單:
- 機型
- CPU
- 記憶體
按一下 [儲存]。
點選「建立」來建立叢集。
共用叢集最多可能需要 90 分鐘才能建立完成。
API
建立
Cluster自訂資源:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF 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 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 EOF更改下列內容:
MANAGEMENT_API_SERVER:可用區 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 版本」。MACHINE_TYPE:節點集區 worker 節點的機型。查看可用的機型,瞭解可設定的項目。NODE_POOL_NAME:節點集區的名稱。NUMBER_OF_WORKER_NODES:要在節點集區中佈建的 worker 節點數量。TAINTS:要套用至這個節點集區節點的污點。這是選填欄位。LABELS:要套用至這個節點集區節點的標籤。其中包含鍵/值組合清單。這是選填欄位。GPU_PARTITION_SCHEME:GPU 分割配置 (如果您執行 GPU 工作負載)。此為選填欄位。 例如,mixed-2。如未設定這個欄位,GPU 就不會分區。如要進一步瞭解可用的多實體 GPU (MIG) 設定檔,請參閱「支援的 MIG 設定檔」。
共用叢集最多可能需要 90 分鐘才能建立完成。
建立
ProjectBinding自訂資源:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: resourcemanager.gdc.goog/v1 kind: ProjectBinding metadata: name: CLUSTER_NAME-PROJECT_NAME namespace: platform labels: resourcemanager.gdc.goog/projectbinding-for-user-project: "true" spec: clusterRef: name: CLUSTER_NAME selector: nameSelector: matchNames: - PROJECT_NAME EOF更改下列內容:
MANAGEMENT_API_SERVER:可用區 API 伺服器的 kubeconfig 路徑。CLUSTER_NAME:叢集名稱。PROJECT_NAME:要繫結的專案名稱。每項ProjectBinding資源只能對應至一個叢集。如果專案需要存取多個叢集,則必須為每個叢集建立專屬的ProjectBinding。
您必須先將專案附加至叢集,開發人員才能將容器工作負載部署至叢集。
Terraform
在 Terraform 設定檔中,插入下列程式碼片段,建立
Cluster自訂資源:provider "kubernetes" { config_path = "MANAGEMENT_API_SERVER" } resource "kubernetes_manifest" "CLUSTER_RESOURCE_NAME" { 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" } "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 路徑。CLUSTER_RESOURCE_NAME:叢集的專屬 Terraform 資源名稱,例如cluster-1。Terraform 會使用這個名稱來識別叢集,GDC 則不會使用。CLUSTER_NAME:叢集名稱。叢集名稱結尾不得為-system。-system後置字串是保留給 GDC 建立的叢集。POD_CIDR:分配 Pod 虛擬 IP 位址的網路範圍大小。如未設定,系統會使用預設值21。SERVICE_CIDR:分配服務虛擬 IP 位址的網路範圍大小。如未設定,系統會使用預設值23。KUBERNETES_VERSION:叢集的 Kubernetes 版本,例如1.26.5-gke.2100。如要列出可設定的 Kubernetes 版本,請參閱「列出叢集可用的 Kubernetes 版本」。MACHINE_TYPE:節點集區 worker 節點的機型。查看可用的機型,瞭解可設定的項目。NODE_POOL_NAME:節點集區的名稱。NUMBER_OF_WORKER_NODES:要在節點集區中佈建的 worker 節點數量。TAINTS:要套用至這個節點集區節點的污點。這是選填欄位。LABELS:要套用至這個節點集區節點的標籤。其中包含鍵/值組合清單。這是選填欄位。GPU_PARTITION_SCHEME:GPU 分割配置 (如果您執行 GPU 工作負載)。此為選填欄位。 例如,mixed-2。如未設定這個欄位,GPU 就不會分區。如要進一步瞭解可用的多實體 GPU (MIG) 設定檔,請參閱「支援的 MIG 設定檔」。
在 Terraform 設定檔中,插入下列程式碼片段,建立
ProjectBinding自訂資源:provider "kubernetes" { config_path = "MANAGEMENT_API_SERVER" } resource "kubernetes_manifest" "PROJECT_BINDING_RESOURCE_NAME" { manifest = { "apiVersion" = "resourcemanager.gdc.goog/v1" "kind" = "ProjectBinding" "metadata" = { "name" = "CLUSTER_NAME-PROJECT_NAME" "namespace" = "platform" "labels" = { "resourcemanager.gdc.goog/projectbinding-for-user-project" = "true" } } "spec" = { "clusterRef" = { "name" = "CLUSTER_NAME" } "selector" = { "nameSelector" = { "matchNames" = [ "PROJECT_NAME", ] } } } } }更改下列內容:
MANAGEMENT_API_SERVER:可用區 API 伺服器的 kubeconfig 路徑。PROJECT_BINDING_RESOURCE_NAME:專案繫結的 Terraform 資源名稱,例如project-binding-1。Terraform 會使用這個名稱來識別專案繫結,GDC 則不會使用。CLUSTER_NAME:叢集名稱。PROJECT_NAME:要繫結的專案名稱。每項ProjectBinding資源只能對應至一個叢集。如果專案需要存取多個叢集,則必須為每個叢集建立專屬的ProjectBinding。
您必須先將專案附加至叢集,開發人員才能將容器工作負載部署至叢集。
使用 Terraform 套用新的自訂資源:
terraform apply
共用叢集最多可能需要 90 分鐘才能建立完成。