在 Google Distributed Cloud 中,工作負載會在一個以上的使用者叢集上執行。本頁說明如何建立使用者叢集,以便在 Google Distributed Cloud 拓撲網域中使用。如要使用拓撲網域,必須使用 Google Distributed Cloud 1.31 以上版本。
如要設定拓撲網域,必須啟用進階叢集。請注意,進階叢集預覽功能有下列限制:
- 您只能在建立新的 1.31 叢集時啟用進階叢集。
- 啟用進階叢集後,您將無法將叢集升級至 1.32 版。請僅在測試環境中啟用進階叢集。
本文適用於負責設定、監控及管理技術基礎架構的管理員、架構師和作業人員。如要進一步瞭解我們在 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。
事前準備
請確認您已設定管理員工作站,並能登入,如「建立管理員工作站」一文所述。管理員工作站具備建立使用者叢集所需的工具。在管理工作站上完成這份文件中的所有步驟。
如果尚未設定 Google Cloud 資源,請按照下列文件說明操作:
建立使用者叢集前,您必須先建立管理員叢集,才能管理使用者叢集。如果尚未建立,請建立管理員工作站和用於拓撲網域的管理員叢集。
決定要安裝的使用者叢集版本。建立使用者叢集時,您通常會安裝與管理員叢集版本相符的版本。如要在使用者叢集上安裝其他版本,請參閱「版本規則」。
請參閱IP 位址規劃文件,確認您有足夠的可用 IP 位址。
設定負載平衡器以進行手動負載平衡。您必須先設定負載平衡器,才能建立使用者叢集。
請考慮需要多少節點集區,以及要在每個集區中執行的作業系統。
收集存取每個 vCenter Server 執行個體所需的資訊。您需要這項資訊,才能填寫 vSphere 基礎架構設定檔中的「
Secret
」和「VSphereInfraConfig.credentials.vCenters
」部分。如要瞭解如何取得所需資訊,請參閱下列文章:
程序總覽
使用 gkectl
建立使用者叢集的主要步驟如下:
- 填寫使用者叢集設定檔
- 在使用者叢集設定檔中,指定新叢集的詳細資料。
- 填寫 IP 區塊檔案
- 在 IP 區塊檔案中,指定閘道、網路遮罩、控制層節點的 IP 位址,以及 (選用) 工作站節點的 IP 位址。
- 建立使用者叢集
- 執行
gkectl create cluster
,根據設定檔中的指定項目建立叢集。
- 確認使用者叢集正在執行中
- 使用
kubectl
查看叢集節點。
完成這項程序後,您將擁有執行中的使用者叢集,可供部署工作負載。
填寫使用者叢集設定檔
如果您使用 gkeadm
建立管理員工作站,gkeadm
會產生名為 user-cluster.yaml
的使用者叢集設定檔範本。此外,gkeadm
還為你填寫了部分欄位。
如果您未使用 gkeadm
建立管理員工作站,可以透過 gkectl
為使用者叢集設定檔產生範本。
如要產生使用者叢集設定檔的範本,請按照下列步驟操作:
gkectl create-config cluster --config=OUTPUT_FILENAME --gke-on-prem-version=VERSION
更改下列內容:
OUTPUT_FILENAME
:您選擇的生成範本路徑。如果省略這個旗標,gkectl
會將檔案命名為 user-cluster.yaml
,並放在目前的目錄中。
VERSION
:所需版本號碼。例如:
gkectl create-config cluster --gke-on-prem-version=1.32.100-gke.106
。
請詳閱使用者叢集設定檔文件,瞭解設定檔內容。建議您在另一個分頁或視窗中開啟這份文件,以便在完成下列步驟時參考。
name
將
name
欄位設為您選擇的使用者叢集名稱。
gkeOnPremVersion
系統會自動填寫這個欄位。指定 Google Distributed Cloud 的版本。例如 1.32.100-gke.106
。
enableAdvancedCluster
將 enableAdvancedCluster
設為 true
。
enableControlplaneV2
所有 1.30 以上版本的使用者叢集都必須使用 Controlplane V2。將 enableControlplaneV2
設為 true
。
啟用 Controlplane V2 後,使用者叢集的控制層會在使用者叢集的節點上執行。
enableDataplaneV2
將
enableDataplaneV2
設為 true
。
vCenter
移除整個部分。您可以在每個拓撲網域的 vSphere 基礎架構設定檔中設定 vCenter 資訊。
network
從設定檔中移除下列項目:
- 整個「
network.hostConfig
」部分。這項資訊是在每個拓撲網域的 vSphere 基礎架構設定檔中設定。 network.vCenter.networkName
欄位。這個欄位是在每個拓撲網域的 vSphere 基礎架構設定檔中設定。- 整個「
network.controlPlaneIPBlock
」部分。閘道、網路遮罩和控制層節點的 IP 位址是在 IP 區塊檔案中設定。
- 整個「
將
network.ipMode.ipBlockFilePath
設為 IP 區塊檔案的路徑。決定工作站節點取得 IP 位址的方式。選項如下:
來自您預先設定的 DHCP 伺服器。將
network.ipMode.type
設為"dhcp"
。從您在 IP 區塊檔案中提供的靜態 IP 位址清單。將
network.ipMode.type
設為"static"
。
使用者叢集的控制層節點必須從您在 IP 區塊檔案中提供的靜態位址清單取得 IP 位址。即使工作站節點是從 DHCP 伺服器取得位址,也適用這項規定。
無論您是依賴 DHCP 伺服器,還是指定靜態 IP 位址清單,都必須為使用者叢集提供足夠的 IP 位址。如要瞭解需要多少 IP 位址,請參閱「規劃 IP 位址」。
network.podCIDR 和 network.serviceCIDR 都有預先填入的值,除非與網路中已使用的位址衝突,否則可以保留不變。Kubernetes 會使用這些範圍,將 IP 位址指派給叢集中的 Pod 和 Service。
loadBalancer
為使用者叢集的 Kubernetes API 伺服器預留 VIP。將 VIP 提供為
loadBalancer.vips.controlPlaneVIP
的值為使用者叢集的 Ingress Service 保留另一個虛擬 IP 位址。將 VIP 做為
loadBalancer.vips.ingressVIP
的值提供。將
loadBalancer.kind
設為"ManualLB"
,然後填寫「manualLB
」部分。詳情請參閱手動負載平衡。
advancedNetworking
如要建立輸出 NAT 閘道,請將advancedNetworking設為 true
。
multipleNetworkInterfaces
將 multipleNetworkInterfaces 設為 false
。拓撲網域不支援 Pod 的多個網路介面。
storage
將storage.vSphereCSIDisabled 設為 true
,即可停用 vSphere CSI 元件的部署作業。
masterNode
如要為使用者叢集的控制平面節點指定 CPU 和記憶體,請填寫
masterNode
部分的cpus
和memoryMB
欄位。僅支援高可用性 (HA) 叢集。將
replicas
欄位設為3
,指定叢集將有三個控制層節點。如要啟用控制層節點的自動調整大小功能,請將
autoResize.enabled
設為true
。移除整個
masterNode.vsphere
部分。在「
masterNode.topologyDomains
」欄位中,填入要讓控制平面節點所在的拓撲網域名稱。
nodePools
節點集區是叢集中具有相同設定的一組工作站節點。舉例來說,您可能會想為每個節點集區分別設定拓撲網域。您必須填寫nodePools
部分,指定至少一個節點集區。
針對您指定的每個節點集區:
在
nodePools[i].topologyDomains
欄位中,填入要將節點集區納入的拓撲網域名稱。移除
nodePools[i].vsphere
區段中的所有欄位,但nodePools[i].vsphere.tags
除外。您可以在每個拓撲網域的 vSphere 基礎架構設定檔中指定這項資訊。將
nodePools[i].osImageType
設為ubuntu_cgroupv2
或ubuntu_containerd
。
如要進一步瞭解節點集區,請參閱「節點集區」和「建立及管理節點集區」。
antiAffinityGroups
將 antiAffinityGroups.enabled
設為 false
。拓撲網域不支援分散式資源排程器 (DRS) 反親和性規則。
stackdriver
填寫「stackdriver
」部分,為叢集啟用 Cloud Logging 和 Cloud Monitoring。
請注意下列要求:
stackdriver.projectID
中的 ID 必須與gkeConnect.projectID
和cloudAuditLogging.projectID
中的 ID 相同。stackdriver.clusterLocation
中設定的 Google Cloud 區域必須與cloudAuditLogging.clusterLocation
和gkeConnect.location
中設定的區域相同。此外,如果gkeOnPremAPI.enabled
是true
,則gkeOnPremAPI.location
中必須設定相同區域。
如果專案 ID 和區域不同,叢集建立作業就會失敗。
gkeConnect
使用者叢集必須註冊至 Google Cloud 機群。
填寫「gkeConnect
」部分,指定車隊主專案和相關聯的服務帳戶。gkeConnect.projectID
中的 ID 必須與 stackdriver.projectID
和 cloudAuditLogging.projectID
中設定的 ID 相同。如果專案 ID 不同,叢集建立作業就會失敗。
您可以選擇在 gkeConnect.location
中指定車隊和 Connect 服務的執行區域。如果您未加入這個欄位,叢集會使用這些服務的全球執行個體。
如果在設定檔中加入 gkeConnect.location
,您指定的區域必須與 cloudAuditLogging.clusterLocation
、stackdriver.clusterLocation
和 gkeOnPremAPI.location
中設定的區域相同。如果區域不同,叢集建立作業就會失敗。
gkeOnPremAPI
本節說明如何向 GKE On-Prem API 註冊叢集。
gkectl
指令列工具是唯一可用的叢集生命週期管理工具,適用於使用拓撲網域的叢集。雖然使用拓撲網域的叢集不支援 Google Cloud 控制台、Google Cloud CLI 和 Terraform,但您可以在建立叢集時,選擇在 GKE On-Prem API 中註冊叢集。
如果專案已啟用 GKE On-Prem API,專案中的所有叢集都會在 stackdriver.clusterLocation
中設定的區域,自動註冊 GKE On-Prem API。Google Cloud gkeOnPremAPI.location
區域必須與 cloudAuditLogging.clusterLocation
、gkeConnect.location
和 stackdriver.clusterLocation
中指定的區域相同。
如要在專案中註冊所有叢集,請務必按照「事前準備」一節中的步驟,在專案中啟用及使用 GKE On-Prem API。
如果不想在 GKE On-Prem API 中註冊叢集,請加入這個區段,並將
gkeOnPremAPI.enabled
設為false
。如果不想在專案中註冊任何叢集,請在專案中停用gkeonprem.googleapis.com
(GKE On-Prem API 的服務名稱)。如需操作說明,請參閱「停用服務」。
cloudAuditLogging
如要整合叢集 Kubernetes API 伺服器的稽核記錄與 Cloud 稽核記錄,請填寫cloudAuditLogging
部分。
請注意下列要求:
# advanced-cluster-change #
將 cloudAuditLogging.serviceAccountKeyPath
設為與 stackdriver.serviceAccountKeyPath
相同的路徑。
cloudAuditLogging.projectID
中的 ID 必須與gkeConnect.projectID
和stackdriver.projectID
中的 ID 相同。cloudAuditLogging.clusterLocation
中的區域必須與gkeConnect.location
中設定的區域相同 (如果設定檔中包含該欄位) 和stackdriver.clusterLocation
。此外,如果gkeOnPremAPI.enabled
為true
,則必須在gkeOnPremAPI.location
中設定相同區域。
如果專案 ID 和區域不同,叢集建立作業就會失敗。
preparedSecrets
移除 preparedSecrets
欄位。
啟用拓撲網域時,系統不支援準備好的憑證。
schedulerConfiguration
如要設定其他會傳遞至 kube-scheduler
的設定,請將 schedulerConfiguration
區段新增至設定檔。
填寫完畢的設定檔範例
以下是 IP 區塊檔案和使用者叢集設定檔的範例:
user-ipblock.yaml
blocks: - netmask: 255.255.255.0 gateway: 172.16.21.1 ips: - ip: 172.16.21.2 hostname: worker-vm-1 - ip: 172.16.21.3 hostname: worker-vm-2 - ip: 172.16.21.4 hostname: worker-vm-3 - ip: 172.16.21.5 hostname: worker-vm-4 - netmask: 255.255.255.0 gateway: 100.115.223.254 ips: - ip: 100.115.222.205 hostname: cp-1 isControlPlane: true - ip: 100.115.222.206 hostname: cp-2 isControlPlane: true - ip: 100.115.222.207 hostname: cp-3 isControlPlane: true
user-cluster.yaml
cat user-cluster.yaml apiVersion: v1 kind: UserCluster name: "my-user-cluster" gkeOnPremVersion: 1.32.100-gke.106 enableAdvancedCluster: true enableControlplaneV2: true enableDataplaneV2: true network: ipMode: type: "static" ipBlockFilePath: "user-ipblock.yaml" serviceCIDR: 10.96.0.0/20 podCIDR: 192.168.0.0/16 loadBalancer: vips: controlPlaneVIP: "100.115.222.200" ingressVIP: "172.16.21.30" kind: "ManualLB" manualLB: ingressHTTPNodePort: 32527 ingressHTTPSNodePort: 30139 controlPlaneNodePort: 30968 masterNode: cpus: 4 memoryMB: 8192 replicas: 3 nodePools: - name: "worker-node-pool1" cpus: 4 memoryMB: 8192 replicas: 3 topologyDomains: - "domain1" antiAffinityGroups: enabled: false gkeConnect: projectID: "my-project-123" location: "us-central1" registerServiceAccountKeyPath: "connect-register-sa-2203040617.json" stackdriver: projectID: "my-project-123" clusterLocation: "us-central1" enableVPC: false serviceAccountKeyPath: "log-mon-sa-2203040617.json" autoRepair: enabled: true
以下是上述範例中需要瞭解的重要事項:
nodePools.replicas
欄位設為3
,表示"worker-node-pool"
中有三個工作站節點。所有工作站節點都會使用靜態 IP 位址,因為network.ipMode.type
已設為"static"
。控制層節點和工作站節點的 IP 位址會指定在 IP 區塊檔案中。即使只有三個工作站節點,IP 區塊檔案仍有四個工作站節點位址。叢集升級、更新和自動修復期間需要額外的工作節點 IP 位址。控制層節點的 IP 位址會標示
isControlPlane: true
旗標。啟用進階叢集、Controlplane V2 和 Dataplane V2。
masterNode.replicas
欄位設為3
,因此叢集將具備高可用性控制層。控制層 VIP 與控制層節點位於相同的 VLAN,而 Ingress VIP 與工作站節點位於相同的 VLAN
填寫 IP 區塊檔案
將 IP 區塊檔案的範本複製到使用者叢集設定檔中 network.ipMode.ipBlockFilePath
欄位指定的目錄檔案。為管理員叢集和每個使用者叢集分別建立 IP 區塊檔案。
將閘道、網路遮罩和控制層節點的 IP 位址新增至 IP 區塊檔案。針對每個控制層節點 IP 位址,新增 isControlPlane: true
,如上一個範例所示。如要建立高可用性 (HA) 使用者叢集,請指定三個 IP 位址。否則,請指定一個 IP 位址。為控制層節點指定的 IP 位址數量,必須與使用者叢集設定檔中 masterNode.replicas
欄位的數量相符。
如果 network.ipMode.type
設為 "static"
,請將工作節點的 IP 位址新增至 IP 區塊檔案。請務必指定一個額外 IP 位址,供叢集升級、更新和自動修復期間使用。
IP 區塊檔案中的每個閘道位址,都必須與 vSphere 基礎架構設定檔中 topologyDomains[i].network.gateway
欄位指定的位址相符。詳情請參閱拓撲網域範例。
建立使用者叢集
執行下列指令來建立使用者叢集:
gkectl create cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
找出使用者叢集 kubeconfig 檔案
gkectl create cluster
指令會在目前目錄中建立名為 USER_CLUSTER_NAME-kubeconfig
的 kubeconfig 檔案。稍後您需要這個 kubeconfig 檔案,才能與使用者叢集互動。
kubeconfig 檔案包含使用者叢集的名稱。如要查看叢集名稱,可以執行:
kubectl config get-clusters --kubeconfig USER_CLUSTER_KUBECONFIG
輸出內容會顯示叢集名稱。例如:
NAME my-user-cluster
您可以視需要變更 kubeconfig 檔案的名稱和位置。
確認使用者叢集正在執行中
確認使用者叢集正在執行:
kubectl get nodes --kubeconfig USER_CLUSTER_KUBECONFIG
將 USER_CLUSTER_KUBECONFIG 替換為使用者叢集 kubeconfig 檔案的路徑。
輸出內容會顯示使用者叢集節點。例如:
cp-vm-1 Ready control-plane,master 18m cp-vm-2 Ready control-plane,master 18m cp-vm-3 Ready control-plane,master 18m worker-vm-1 Ready 6m7s worker-vm-2 Ready 6m6s worker-vm-3 Ready 6m14s
設定「PodTemplate
」
拓撲標籤會填入拓撲網域中節點的標籤。
除非您的拓撲網域設定使用預設限制 "topology.kubernetes.io/zone"
做為拓撲鍵,否則您需要在 Deployment、StatefulSet 或 ReplicaSet 的 Pod 範本中設定拓撲鍵 (視情況而定)。
舉例來說,假設您在拓撲標籤中將鍵定義為 "topology.examplepetstore.com/zone"
。在 PodTemplate
中,您會將金鑰指定為 topologySpreadConstraints.topologyKey
欄位的值。這樣一來,Kubernetes 排程器就能在拓撲網域中分配 Pod,確保高可用性,並避免在發生故障時,Pod 過度集中在單一區域。
疑難排解
請參閱「建立及升級叢集疑難排解」。
後續步驟
- 從 Google Cloud 控制台連線至叢集。
- 部署應用程式。