本文說明如何在 Google Distributed Cloud (GDC) 實體隔離區域中建立標準 Kubernetes 叢集。標準叢集提供專案範圍內高度可設定的 Kubernetes 叢集,其中包含最少量的代管服務。與共用叢集相比,標準叢集在服務設定方面更具彈性,但管理負擔也較重。如要進一步瞭解標準叢集,請參閱「Kubernetes 叢集設定」。
標準叢集是區域資源,無法跨越多個可用區。如要在多區域的環境中運作叢集,必須在每個區域中手動建立叢集。
本文適用於應用程式運算子群組中的應用程式開發人員等對象,他們負責管理機構內的容器工作負載。詳情請參閱 GDC 氣隙環境適用的目標對象說明文件。
事前準備
確認您已完成適當設定,可存取及管理標準叢集。 詳情請參閱「管理標準叢集的存取權」。
如要取得建立標準叢集所需的權限,請要求機構 IAM 管理員授予您專案 IAM 管理員 (
project-iam-admin) 和標準叢集管理員 (standard-cluster-admin) 角色。這些角色會繫結至專案命名空間。規劃 Kubernetes 叢集的下列 Google Distributed Cloud (GDC) 氣隙隔離限制:
- 每個機構 16 個叢集
- 每個叢集 42 個工作站節點,且至少要有三個工作站節點
- 每個叢集 4620 個 Pod
- 每個節點 110 個 Pod
規劃 Pod CIDR 區塊
如要為工作負載分配適當大小的 Pod CIDR 區塊,您必須先計算 Kubernetes 叢集所需的 IP 位址數量,再建立叢集。叢集建立後,大多數網路參數就無法再變更。
Kubernetes 叢集會遵循下列邏輯分配 IP 位址:
- Kubernetes 會為每個節點指派
/24CIDR 區塊,內含 256 個位址。這個數量符合 Kubernetes 叢集每個節點預設最多 110 個 Pod 的上限。 - 指派給節點的 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
根據所需節點數,判斷要為 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 區塊後,請在下一節中,於叢集建立工作流程中設定該區塊。
建立標準叢集
如要建立標準叢集,請完成下列步驟:
API
建立
Cluster自訂資源,並儲存為 YAML 檔案,例如cluster.yaml:apiVersion: cluster.gdc.goog/v1 kind: Cluster metadata: name: CLUSTER_NAME namespace: PROJECT_NAME 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更改下列內容:
CLUSTER_NAME:叢集名稱。叢集名稱結尾不得為-system。-system後置字串保留給 GDC 建立的叢集。PROJECT_NAME:要在其中建立叢集的專案名稱。POD_CIDR:網路範圍的大小,Pod 虛擬 IP 位址會從這個範圍分配。如未設定,系統會使用預設值21。SERVICE_CIDR:網路範圍的大小,服務虛擬 IP 位址會從這個範圍分配。如未設定,系統會使用預設值23。KUBERNETES_VERSION:叢集的 Kubernetes 版本,例如1.26.5-gke.2100。如要列出可供設定的 Kubernetes 版本,請參閱「列出叢集可用的 Kubernetes 版本」。MACHINE_TYPE:節點集區工作站節點的機器類型。如要瞭解可設定的項目,請參閱可用的機器類型。NODE_POOL_NAME:節點集區的名稱。NUMBER_OF_WORKER_NODES:要在節點集區中佈建的工作站節點數量。TAINTS:要套用至這個節點集區節點的 taint。此為選填欄位。LABELS:要套用至這個節點集區節點的標籤。其中包含鍵/值組合清單。這是選填欄位。GPU_PARTITION_SCHEME:GPU 分割配置 (如果您執行 GPU 工作負載)。此為選填欄位。 例如,mixed-2。如果未設定這個欄位,GPU 就不會分割。如要進一步瞭解可用的多重執行個體 GPU (MIG) 設定檔,請參閱「支援的 MIG 設定檔」。
將自訂資源套用至 GDC 執行個體:
kubectl apply -f cluster.yaml --kubeconfig MANAGEMENT_API_SERVER將
MANAGEMENT_API_SERVER替換為區域 API 伺服器的 kubeconfig 路徑。如果您尚未在目標區域中為 API 伺服器產生 kubeconfig 檔案,請參閱「登入」。
建立標準叢集最多可能需要 60 分鐘。
Terraform
在 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" = "PROJECT_NAME" } "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 路徑。如果您尚未在目標區域中為 API 伺服器產生 kubeconfig 檔案,請參閱「登入」。CLUSTER_NAME:叢集名稱。叢集名稱結尾不得為-system。-system後置字串保留給 GDC 建立的叢集。PROJECT_NAME:要在其中建立叢集的專案名稱。POD_CIDR:網路範圍的大小,Pod 虛擬 IP 位址會從這個範圍分配。如未設定,系統會使用預設值21。SERVICE_CIDR:網路範圍的大小,服務虛擬 IP 位址會從這個範圍分配。如未設定,系統會使用預設值23。KUBERNETES_VERSION:叢集的 Kubernetes 版本,例如1.26.5-gke.2100。如要列出可供設定的 Kubernetes 版本,請參閱「列出叢集可用的 Kubernetes 版本」。MACHINE_TYPE:節點集區工作站節點的機器類型。如要瞭解可設定的項目,請參閱可用的機器類型。NODE_POOL_NAME:節點集區的名稱。NUMBER_OF_WORKER_NODES:要在節點集區中佈建的工作站節點數量。TAINTS:要套用至這個節點集區節點的 taint。此為選填欄位。LABELS:要套用至這個節點集區節點的標籤。其中包含鍵/值組合清單。這是選填欄位。GPU_PARTITION_SCHEME:GPU 分割配置 (如果您執行 GPU 工作負載)。此為選填欄位。 例如,mixed-2。如果未設定這個欄位,GPU 就不會分割。如要進一步瞭解可用的多重執行個體 GPU (MIG) 設定檔,請參閱「支援的 MIG 設定檔」。
使用 Terraform 套用新的標準叢集:
terraform apply
建立標準叢集最多可能需要 60 分鐘。