在 Google Distributed Cloud 中,工作負載會在一個以上的使用者叢集上執行。本頁說明如何建立使用者叢集,以便在 Google Distributed Cloud 拓撲網域中使用。如要使用拓撲網域,必須使用 Google Distributed Cloud 1.31 以上版本。
如要設定拓撲網域,必須啟用進階叢集。請注意,進階叢集預覽功能有下列限制:
- 只有在建立新的 1.31 叢集時,才能啟用進階叢集。
- 啟用進階叢集後,您將無法將叢集升級至 1.32 版。請僅在測試環境中啟用進階叢集。
本文適用於負責設定、監控及管理技術基礎架構的管理員、架構師和營運人員。如要進一步瞭解內容中提及的常見角色和範例工作,請參閱「常見的 GKE 使用者角色和工作」。 Google Cloud
事前準備
請確認您已設定管理員工作站,並能登入,如「建立管理員工作站」一文所述。管理員工作站具備建立使用者叢集所需的工具。在管理工作站上完成這份文件中的所有步驟。
如果尚未設定 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.33.100-gke.89。
請詳閱使用者叢集設定檔文件,瞭解設定檔。建議您在另一個分頁或視窗中開啟這份文件, 因為您會在完成下列步驟時參考這份文件。
name
將
name
欄位設為您選擇的使用者叢集名稱。
gkeOnPremVersion
系統會自動填入這個欄位。指定 Google Distributed Cloud 的版本。例如 1.33.100-gke.89。
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 不同,叢集建立作業就會失敗。
您可以選擇指定車隊和 Connect 服務在 gkeConnect.location 中執行的區域。如果您未加入這個欄位,叢集會使用這些服務的全球執行個體。
如果在設定檔中加入 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.33.100-gke.89
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 控制台連線至叢集。
- 部署應用程式。