在 Google Distributed Cloud 中,工作負載會在一個以上的使用者叢集上執行。本文說明如何建立使用者叢集。如要使用拓撲網域,請參閱「建立要搭配拓撲網域使用的使用者叢集」。
本文適用於負責設定、監控及管理技術基礎架構的管理員、架構師和作業人員。如要進一步瞭解我們在 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。
您可以使用下列幾種工具建立使用者叢集:
gkectl
- Google Cloud 控制台
Google Cloud CLI
- Terraform
其中三項工具 (主控台、gcloud CLI 和 Terraform) 是 GKE On-Prem API 的用戶端。
如果啟用進階叢集,就必須使用 gkectl
建立叢集。
如需選擇工具來管理叢集生命週期的指引,請參閱這篇文章。
事前準備
如果您打算使用
gkectl
建立使用者叢集,請務必按照「建立管理員工作站」一文所述,設定並登入管理員工作站。確認管理員工作站已安裝必要版本的
gkectl
。 一般來說,您使用的gkectl
版本會與建立叢集時使用的版本相同。您可以在叢集設定檔的gkeOnPremVersion
欄位中指定叢集版本。建立叢集時,系統會強制執行下列版本規則:gkectl
次要版本不得低於叢集的次要版本。舉例來說,您無法使用gkectl
1.29 版建立 1.30 叢集。修補程式版本不重要。舉例來說,您可以使用gkectl
1.29.0-gke.1456 版建立修補程式版本較高的叢集,例如 1.29.1000-gke.94。gkectl
次要版本不得高於叢集版本超過兩個次要版本。舉例來說,如果您要建立 1.28 版叢集,gkectl
版本可以是 1.29 或 1.30。但您無法使用gkectl
1.31 版,因為該版本比叢集版本高出三個子版本。
如有需要,請參閱「下載
gkectl
」一文,瞭解如何取得支援的gkectl
版本。如果尚未設定 Google Cloud 資源,請按照下列文件說明操作:
設定機群主機專案時,請留意您選擇的工具,因為如果您選擇其中一個 GKE On-Prem API 用戶端,就必須啟用其他 API。如需 API 清單,請參閱「在車隊主專案中啟用 API」。
決定要安裝的使用者叢集版本。建立使用者叢集時,您通常會安裝與管理員叢集版本相符的版本。如要在使用者叢集上安裝其他版本,請參閱「版本規則」。
如果您打算安裝 1.30 以上版本,則必須使用 Controlplane V2。即使您安裝的是 1.29 以下版本,我們仍建議啟用 Controlplane V2。啟用 Controlplane V2 後,使用者叢集的控制層會在使用者叢集的一或多個節點上執行。或者,您也可以建立使用 kubeception 的使用者叢集。在 kubeception 案例中,使用者叢集的控制層會在管理員叢集的一或多個節點上執行。
請參閱IP 位址規劃文件,確認您有足夠的可用 IP 位址。
請參閱負載平衡總覽,重新考慮要使用的負載平衡器類型。您可以使用套裝組合的 MetalLB 負載平衡器,也可以手動設定偏好的負載平衡器。如要進行手動負載平衡,您必須先設定負載平衡器,才能建立使用者叢集。
請考慮需要多少節點集區,以及要在每個集區中執行的作業系統。
請考慮是否要為管理員叢集和使用者叢集使用個別的 vSphere 叢集,以及是否要使用個別的資料中心。此外,請考慮是否要使用個別的 vCenter Server 執行個體。
在 1.29 以上版本中,伺服器端預檢預設為啟用。伺服器端預檢需要額外的防火牆規則。在「管理員叢集適用的防火牆規則」中,搜尋「Preflight checks」,並確認已設定所有必要的防火牆規則。
透過伺服器端預檢檢查,使用
gkectl
建立使用者叢集時,預檢檢查會在管理員叢集上執行,而不是在管理員工作站本機執行。如果您使用 Google Cloud 控制台、Google Cloud CLI 或 Terraform 建立使用者叢集,系統也會執行伺服器端預檢。
使用您選擇的工具建立使用者叢集
本節提供使用 gkectl
、控制台、gcloud CLI 和 Terraform 建立使用者叢集的步驟。
gkectl
在 1.32 以上版本中,使用 gkectl
建立的新叢集預設會啟用進階叢集功能。請務必先詳閱執行進階叢集時的差異。如不想啟用進階叢集,您必須在設定檔中將 enableAdvancedCluster
設為 false
。
程序總覽
使用 gkectl
建立使用者叢集的主要步驟如下:
- 填寫設定檔
- 填寫使用者叢集設定檔、憑證設定檔,以及可能的 IP 區塊檔案,指定新叢集的詳細資料。
- (選用) 將 OS 映像檔匯入 vSphere,並視需要將容器映像檔推送至私人登錄檔。
- 執行
gkectl prepare
。
- 建立使用者叢集
- 執行
gkectl create cluster
,按照設定檔中的指定方式建立叢集。
- 確認使用者叢集正在執行中
- 使用
kubectl
查看叢集節點。
完成這項程序後,您將擁有執行中的使用者叢集,可供部署工作負載。
如果您使用 VPC Service Controls,執行部分 gkectl
指令 (例如 "Validation Category: GCP - [UNKNOWN] GCP
service: [Stackdriver] could not get GCP services"
) 時可能會看到錯誤訊息。如要避免發生這些錯誤,請在指令中加入 --skip-validation-gcp
參數。
填寫設定檔
如果您使用 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
。如果管理員叢集已啟用進階叢集,這個欄位必須設為 true
。
請注意,進階叢集預覽功能有下列限制:
- 您只能在建立新的 1.31 叢集時啟用進階叢集。
- 啟用進階叢集後,您將無法將叢集升級至 1.32 版。請僅在測試環境中啟用進階叢集。
enableControlplaneV2
如要建立啟用 Controlplane V2 的使用者叢集,請將 enableControlplaneV2
設為 true
。
如果啟用進階叢集,則必須將 enableControlplaneV2
設為 true
。
啟用 Controlplane V2 後,使用者叢集的控制層會在使用者叢集的節點上執行。強烈建議您啟用 Controlplane V2。
kubeception
如果將此欄位設為 false
,叢集會使用 kubecetption。使用 kubeception 時,使用者叢集的控制層會在管理員叢集的節點上執行。
如果是 kubeception 叢集:
將
enableControlplaneV2
設為false
。請勿填寫
controlPlaneIPBlock
區段。在管理員叢集的IP 區塊檔案中,指定使用者叢集控制層節點的 IP 位址。
enableDataplaneV2
將
enableDataplaneV2
設為 true
。
vCenter
您在管理員叢集設定檔的 vCenter
區段中設定的值是全域值。也就是說,這些設定會套用至管理員叢集和相關聯的使用者叢集。
您可以選擇覆寫所建立每個使用者叢集的某些全域 vCenter
值。
如要覆寫任何全域 vCenter
值,請在使用者叢集設定檔的 vCenter
區段中填入相關欄位。
具體來說,您可能會想為管理員叢集和使用者叢集使用不同的 vSphere 叢集,也可能會想為管理員叢集和使用者叢集使用不同的資料中心。
使用一個資料中心和一個 vSphere 叢集
預設選項是為管理員叢集和使用者叢集使用一個資料中心和一個 vSphere 叢集。如要使用這個選項,請勿在使用者叢集設定檔中設定任何 vCenter
值。vCenter
值會沿用管理叢集的值。
使用不同的 vSphere 叢集
如要建立位於專屬 vSphere 叢集中的使用者叢集,請在使用者叢集設定檔中指定 vCenter.cluster
的值。
如果管理員叢集和使用者叢集位於不同的 vSphere 叢集,則可以位於相同或不同的資料中心。
使用不同的 vSphere 資料中心
使用者叢集和管理員叢集可以位於不同的資料中心。在這種情況下,這些叢集也會位於不同的 vSphere 叢集。
如果您在使用者叢集設定檔中指定 vCenter.datacenter
,則也必須指定:
vCenter.networkName
vCenter.datastore
或vCenter.storagePolicyName
vCenter.cluster
或vCenter.resourcePool
使用個別 vCenter 帳戶
使用者叢集可使用與管理員叢集不同的 vCenter 帳戶,以及不同的 vCenter.credentials
。管理員叢集的 vCenter 帳戶需要存取管理員叢集資料中心,而使用者叢集的 vCenter 帳戶只需要存取使用者叢集資料中心。
使用個別的 vCenter Server 執行個體
在某些情況下,建立使用專屬 vCenter Server 執行個體的使用者叢集是合理的做法。也就是說,管理員叢集和相關聯的使用者叢集會使用不同的 vCenter Server 執行個體。
舉例來說,在邊緣位置,您可能需要執行 vCenter Server 的實體機器,以及執行 ESXi 的一或多部實體機器。然後,您可以使用 vCenter Server 的本機執行個體建立 vSphere 物件階層,包括資料中心、叢集、資源集區、資料儲存庫和資料夾。
填寫使用者叢集設定檔的整個
vCenter
部分。具體來說,請為 vCenter.address
指定的值,與您在管理員叢集設定檔中指定的 vCenter Server 位址不同。例如:
vCenter: address: "vc-edge.example" datacenter: "vc-edge" cluster: "vc-edge-workloads" resourcePool: "vc-edge-pool datastore: "vc-edge-datastore caCertPath: "/usr/local/google/home/me/certs/edge-cacert.pem" credentials: fileRef: path: "credential.yaml" entry: "vCenter-edge" folder: "edge-vm-folder"
同時填寫
network.vCenter.networkName
欄位。
network
決定工作站節點取得 IP 位址的方式。選項如下:
來自您預先設定的 DHCP 伺服器。將
network.ipMode.type
設為"dhcp"
。從您提供的靜態 IP 位址清單中。將
network.ipMode.type
設為"static"
,並建立提供靜態 IP 位址的 IP 區塊檔案。如需 IP 區塊檔案範例,請參閱「已填寫的設定檔範例」。
如果您決定為工作站節點使用靜態 IP 位址,請填寫 network.ipMode.ipBlockFilePath
欄位。
使用者叢集的控制層節點必須從您提供的靜態位址清單取得 IP 位址。即使工作節點是透過 DHCP 伺服器取得位址,也一樣會發生這種情況。如要為控制層節點指定靜態 IP 位址,請填寫 network.controlPlaneIPBlock
區段。如要建立高可用性 (HA) 使用者叢集,請指定三個 IP 位址。否則請指定一個 IP 位址。
填寫 hostConfig
部分,指定 DNS 和 NTP 伺服器。這些 DNS 和 NTP 伺服器適用於控制層節點。如果工作站節點使用靜態 IP 位址,這些 DNS 和 NTP 伺服器也會用於工作站節點。
network.podCIDR 和 network.serviceCIDR 都有預先填入的值,除非與網路中已使用的位址衝突,否則可以保留不變。Kubernetes 會使用這些範圍,將 IP 位址指派給叢集中的 Pod 和 Service。
無論您是依賴 DHCP 伺服器,還是指定靜態 IP 位址清單,都必須為使用者叢集提供足夠的 IP 位址。如要瞭解需要多少 IP 位址,請參閱「規劃 IP 位址」。
loadBalancer
為使用者叢集的 Kubernetes API 伺服器預留 VIP。請為使用者叢集的 Ingress Service 保留另一個虛擬 IP 位址。將 VIP 提供為 loadBalancer.vips.controlPlaneVIP
和 loadBalancer.vips.ingressVIP
的值。
決定要使用的負載平衡類型。選項如下:
MetalLB 套裝組合負載平衡。將
loadBalancer.kind
設為"MetalLB"
。此外,請填寫「loadBalancer.metalLB.addressPools
」部分,並將至少一個節點集區的enableLoadBalancer
設為true
。詳情請參閱使用 MetalLB 進行套裝組合負載平衡。手動負載平衡。將
loadBalancer.kind
設為"ManualLB"
,然後填寫「manualLB
」部分。詳情請參閱手動負載平衡。
如要進一步瞭解負載平衡選項,請參閱「負載平衡總覽」。
advancedNetworking
如要建立輸出 NAT 閘道,請將advancedNetworking設為 true
。
multipleNetworkInterfaces
決定是否要為 Pod 設定多個網路介面,並據此設定 multipleNetworkInterfaces。
storage
如要停用 vSphere CSI 元件的部署作業,請將 storage.vSphereCSIDisabled 設為 true
。
masterNode
在 masterNode
區段中,您可以指定使用者叢集的控制層節點數量:如要建立高可用性 (HA) 叢集,請指定 3
;如要建立非 HA 叢集,請指定 1
。您也可以指定控制層節點的資料存放區,以及是否要啟用控制層節點的自動調整大小功能。
如果 enableAdvancedCluster
欄位為 true
,則必須將 replicas
欄位設為 3
。進階叢集僅支援高可用性使用者叢集。
回想一下,您在network.controlPlaneIPBlock
部分中,為控制層節點指定了 IP 位址。
nodePools
節點集區是叢集中具有相同配置的一組節點。舉例來說,一個集區中的節點可以執行 Windows,另一個集區中的節點則可以執行 Linux。
您必須填寫nodePools
部分,指定至少一個節點集區。
如果啟用進階叢集,請將 nodePools[i]osImageType
設為 ubuntu_cgroupv2
或 ubuntu_containerd
。
antiAffinityGroups
將 antiAffinityGroups.enabled
設為 true
或 false
。
這個欄位會指定 Google Distributed Cloud 是否要為工作站節點建立 Distributed Resource Scheduler (DRS) 反相依性規則,使其分散於資料中心內至少三個實體主機上。
stackdriver
如要為叢集啟用 Cloud Logging 和 Cloud Monitoring,請填寫 stackdriver
區段。
系統預設會顯示這個部分。也就是說,如果您未填寫這個部分,執行 gkectl create cluster
時就必須加上 --skip-validation-stackdriver
旗標。
請注意新叢集的下列需求:
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 不同,叢集建立作業就會失敗。
在 1.28 以上版本中,您可以視需要指定 Fleet 和 Connect 服務在 gkeConnect.location
中執行的區域。如果您未加入這個欄位,叢集會使用這些服務的全球執行個體。
如果在設定檔中加入 gkeConnect.location
,您指定的區域必須與 cloudAuditLogging.clusterLocation
、stackdriver.clusterLocation
和 gkeOnPremAPI.location
中設定的區域相同。如果區域不同,叢集建立作業就會失敗。
gkeOnPremAPI
在 1.16 以上版本中,如果專案已啟用 GKE On-Prem API,專案中的所有叢集都會自動註冊 GKE On-Prem API,並使用 stackdriver.clusterLocation
中設定的區域。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
部分。
請注意下列要求:
如果啟用進階叢集,請將
cloudAuditLogging.serviceAccountKeyPath
設為與stackdriver.serviceAccountKeyPath
相同的路徑。cloudAuditLogging.projectID
中的 ID 必須與gkeConnect.projectID
和stackdriver.projectID
中的 ID 相同。cloudAuditLogging.clusterLocation
中的區域必須與gkeConnect.location
和stackdriver.clusterLocation
中設定的區域相同。 此外,如果gkeOnPremAPI.enabled
是true
,則必須在gkeOnPremAPI.location
中設定相同區域。
如果專案 ID 和區域不同,叢集建立作業就會失敗。
填寫完畢的設定檔範例
以下是 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
user-cluster.yaml
cat user-cluster.yaml apiVersion: v1 kind: UserCluster name: "my-user-cluster" gkeOnPremVersion: 1.32.100-gke.106 enableControlplaneV2: true enableDataplaneV2: true network: hostConfig: dnsServers: - "203.0.113.2" - "198.51.100.2" ntpServers: - "216.239.35.4" ipMode: type: "static" ipBlockFilePath: "user-ipblock.yaml" serviceCIDR: 10.96.0.0/20 podCIDR: 192.168.0.0/16 controlPlaneIPBlock: netmask: "255.255.255.0" gateway: "172.16.21.1" ips: - ip: "172.16.21.6" hostname: "cp-vm-1" - ip: "172.16.21.7" hostname: "cp-vm-2" - ip: "172.16.21.8" hostname: "cp-vm-3" loadBalancer: vips: controlPlaneVIP: "172.16.21.40" ingressVIP: "172.16.21.30" kind: MetalLB metalLB: addressPools: - name: "address-pool-1" addresses: - "172.16.21.30-172.16.21.39" masterNode: cpus: 4 memoryMB: 8192 replicas: 3 nodePools: - name: "worker-node-pool" cpus: 4 memoryMB: 8192 replicas: 3 enableLoadBalancer: true antiAffinityGroups: enabled: true 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 位址。
DNS 和 NTP 伺服器是在
hostConfig
區段中指定。在這個範例中,這些 DNS 和 NTP 伺服器適用於控制平面節點和工作節點。這是因為工作站節點具有靜態 IP 位址。如果工作站節點要從 DHCP 伺服器取得 IP 位址,這些 DNS 和 NTP 伺服器就只適用於控制層節點。三個控制層節點的靜態 IP 位址是在使用者叢集設定檔的
network.controlPlaneIPBlock
區段中指定。這個區塊不需要額外的 IP 位址。已啟用 Controlplane V2。
masterNode.replicas
欄位設為3
,因此叢集將具備高可用性控制層。控制層 VIP 和 Ingress VIP 都與工作節點和控制層節點位於同一個 VLAN。
為 LoadBalancer 類型服務預留的 VIP 會在使用者叢集設定檔的
loadBalancer.metalLB.addressPools
區段中指定。這些 VIP 與工作站節點和控制層節點位於相同的 VLAN。本節中指定的 VIP 組合必須包含 Ingress VIP,且不得包含控制層 VIP。使用者叢集設定檔不包含
vCenter
區段。因此,使用者叢集會使用與管理員叢集相同的 vSphere 資源。
驗證設定檔
填寫使用者叢集設定檔後,請執行 gkectl check-config
驗證檔案是否有效:
gkectl check-config --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
更改下列內容:
ADMIN_CLUSTER_KUBECONFIG:管理員叢集的 kubeconfig 檔案路徑
USER_CLUSTER_CONFIG:使用者叢集設定檔的路徑
如果指令傳回任何失敗訊息,請修正問題並再次驗證檔案。
如要略過耗時的驗證,請傳遞 --fast
旗標。
如要略過個別驗證,請使用 --skip-validation-xxx
標記。如要進一步瞭解 check-config
指令,請參閱執行預檢。
(選用) 將 OS 映像檔匯入 vSphere,並將容器映像檔推送至私人登錄檔
如果符合下列任一條件,請執行 gkectl prepare
:
使用者叢集與管理員叢集位於不同的 vSphere 資料中心。
使用者叢集與管理員叢集使用不同的 vCenter Server。
使用者叢集與管理員叢集使用不同的 vCenter 資料夾。
使用者叢集使用的私人容器登錄檔與管理員叢集使用的私人登錄檔不同。
gkectl prepare --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --bundle-path BUNDLE \ --user-cluster-config USER_CLUSTER_CONFIG
更改下列內容:
ADMIN_CLUSTER_KUBECONFIG:管理員叢集 kubeconfig 檔案的路徑
BUNDLE:套件檔案的路徑。這個檔案位於管理員工作站的
/var/lib/gke/bundles/
中。例如:/var/lib/gke/bundles/gke-onprem-vsphere-1.32.100-gke.106-full.tgz
USER_CLUSTER_CONFIG:使用者叢集設定檔的路徑
建立使用者叢集
執行下列指令來建立使用者叢集:
gkectl create cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
如果您使用 VPC Service Controls,執行部分 gkectl
指令 (例如 "Validation Category: GCP - [UNKNOWN] GCP
service: [Stackdriver] could not get GCP services"
) 時可能會看到錯誤訊息。如要避免發生這些錯誤,請在指令中加入 --skip-validation-gcp
參數。
找出使用者叢集 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
控制台
開始使用
前往 Google Cloud 控制台的「建立 VM 叢集」頁面。
選取要建立叢集的 Google Cloud 專案。 所選專案會做為機群主專案。這必須是管理員叢集註冊的專案。建立使用者叢集後,系統會自動向所選專案的機群註冊。
在「選擇叢集類型」部分中,選取「為現有的管理員叢集建立使用者叢集」。
叢集基本資訊
輸入叢集的基本資訊。
輸入使用者叢集的名稱。
在「管理員叢集」下方,從清單中選取管理員叢集。如果您在建立管理員叢集時未指定名稱,系統會以
gke-admin-[HASH]
格式產生名稱。如果不認得管理員叢集名稱,請在管理員工作站執行下列指令:KUBECONFIG=ADMIN_CLUSTER_KUBECONFIG kubectl get OnPremAdminCluster -n kube-system -o=jsonpath='{.items[0].metadata.name}'
如果沒有顯示要使用的管理員叢集,請參閱疑難排解一節「管理員叢集未顯示在『叢集基本資訊』下拉式清單中」。
在「GCP API Location」(GCP API 位置) 欄位中,從清單選取 Google Cloud 區域。這項設定會指定下列 API 和服務的執行區域:
- GKE On-Prem API (
gkeonprem.googleapis.com
) - 車隊服務 (
gkehub.googleapis.com
) - 連結服務 (
gkeconnect.googleapis.com
)
這項設定也會控管下列項目的儲存區域:
- GKE On-Prem API 管理叢集生命週期所需的使用者叢集中繼資料
- 系統元件的 Cloud Logging 和 Cloud Monitoring 資料
- Cloud 稽核記錄建立的管理員稽核記錄
叢集名稱、專案和位置資訊會共同識別 Google Cloud中的叢集。
- GKE On-Prem API (
為使用者叢集選取 Google Distributed Cloud 版本。
身為叢集建立者,您會獲得叢集的叢集管理員權限。視需要,在「授權」部分的「叢集管理員使用者」欄位中,輸入其他叢集管理員使用者的電子郵件地址。
建立叢集時,GKE On-Prem API 會將 Kubernetes 依據角色的存取權控管 (RBAC) 政策套用至叢集,授予您和其他管理員使用者 Kubernetes
clusterrole/cluster-admin
角色,讓使用者能完整存取叢集和所有命名空間中的全部資源。按一下「下一步」前往「控制層」部分。
控制層
「控制平面」部分的所有欄位都設有預設值。 檢查預設值,並視需要變更。
在「Control-plane node vCPUs」(控制層節點 vCPU 數量) 欄位中,輸入每個使用者叢集控制層節點的 vCPU 數量 (至少 4 個)。
在「控制層節點記憶體」欄位中,輸入每個使用者叢集控制層的記憶體大小 (以 MiB 為單位,至少須有 8192 MiB,且必須為 4 的倍數)。
在「控制層節點」下方,選取使用者叢集的控制層節點數量。舉例來說,您可以為開發環境選取 1 個控制層節點,並為高可用性 (HA) 生產環境選取 3 個控制層節點。
(選用) 選取「自動調整節點大小」。調整大小是指系統會自動調整指派給節點的 vCPU 和記憶體資源。這項功能啟用之後,使用者叢集的控制層節點就會依據叢集內的工作站節點數量調整大小。因此,當您在使用者叢集中新增更多工作站節點時,控制層節點的大小也會增加。
在「控制層節點 IP」部分,輸入閘道、子網路遮罩和控制層節點的 IP 位址。
按一下「下一步」前往「網路」部分。
網路
在本節中,您將指定叢集節點、Pod 和 Service 的 IP 位址。使用者叢集需要為每個節點提供一個 IP 位址,並為叢集升級、更新和自動修復期間所需的暫時節點提供額外 IP 位址。詳情請參閱「使用者叢集需要多少 IP 位址?」。
在「節點 IP」部分,選取使用者叢集的「IP 模式」。 請選取下列其中一個選項:
DHCP:如要讓叢集節點從 DHCP 伺服器取得 IP 位址,請選擇「DHCP」。
靜態:如要為叢集節點提供靜態 IP 位址,或手動設定負載平衡,請選擇「靜態」。
如果選取「DHCP」,請跳至下一個步驟,指定「服務和 Pod CIDR」。如果是靜態 IP 模式,請提供下列資訊:
輸入使用者叢集的「閘道」IP 位址。
輸入使用者叢集節點的子網路遮罩。
在「IP Addresses」(IP 位址) 專區中,輸入使用者叢集中節點的 IP 位址,以及選用的主機名稱。您可以輸入個別的 IPv4 位址 (例如 192.0.2.1),也可以輸入 IPv4 位址的 CIDR 區塊 (例如 192.0.2.0/24)。
如果您輸入 CIDR 區塊,請勿輸入主機名稱。
如果您輸入個別 IP 位址,可以選擇輸入主機名稱。如果未輸入主機名稱,Google Distributed Cloud 會使用 vSphere 中的 VM 名稱做為主機名稱。
視需要按一下「+ 新增 IP 位址」,輸入更多 IP 位址。
在「Service and Pod CIDRs」(服務和 Pod CIDR) 區段中,主控台會提供 Kubernetes Service 和 Pod 的下列位址範圍:
- 服務 CIDR:10.96.0.0/20
- Pod CIDR:192.168.0.0/16
如要自行輸入位址範圍,請參閱「Pod 和 Service 的 IP 位址」一文,瞭解最佳做法。
如果選取「靜態 IP 模式」或「啟用控制平面 v2」,請在「主機設定」部分指定下列資訊:
- 輸入 DNS 伺服器的 IP 位址。
- 輸入 NTP 伺服器的 IP 位址。
- (選用) 輸入 DNS 搜尋網域。
按一下「Next」(下一步),前往「Load balancer」(負載平衡器) 部分。
負載平衡器
選擇要為叢集設定的負載平衡器。詳情請參閱負載平衡器總覽。
從清單中選取「負載平衡器類型」。
隨附於 MetalLB
使用 MetalLB 設定套裝組合負載平衡。只有在管理員叢集使用 SeeSaw 或 MetalLB 時,才能在使用者叢集使用 MetalLB。這個選項只需要最少的設定。MetalLB 可直接在叢集節點上執行,不需要額外的 VM。如要進一步瞭解使用 MetalLB 的優點,以及與其他負載平衡選項的比較,請參閱「使用 MetalLB 進行套裝組合負載平衡」。在「位址集區」部分中,設定至少一個位址集區,如下所示:
輸入位址集區名稱。
以 CIDR 標記法 (例如 192.0.2.0/26) 或範圍標記法 (例如 192.0.2.64-192.0.2.72)。如要在集區中指定單一 IP 位址,請在 CIDR 標記法中使用 /32 (例如 192.0.2.1/32)。
如果類型為
LoadBalancer
的 Service IP 位址與 Ingress VIP 不在同一個 IP 位址範圍內,請按一下「+ Add IP Address Range」(+ 新增 IP 位址範圍),然後輸入另一個位址範圍。每個集區中的 IP 位址均不得重疊,而且必須與叢集節點位於相同的子網路。
在「指派 IP 位址」下方,選取下列其中一個選項:
自動:如果您希望 MetalLB 控制器自動將位址集區中的 IP 位址指派給
LoadBalancer
類型的服務,請選擇這個選項手動:如要使用集區中的位址,手動指定
LoadBalancer
類型的 Service 位址,請選擇這個選項。
如要避免 MetalLB 控制器使用結尾為 .0 或 .255 的集區位址,請按一下「避免使用發生錯誤的 IP 位址」。這樣可避免發生錯誤的消費者裝置誤將傳送至這些特殊 IP 位址的流量捨棄。
完成後,請按一下「完成」。
如有需要,請按一下「新增位址集區」。
在「虛擬 IP」部分中,輸入下列資訊:
控制層 VIP:傳送至使用者叢集 Kubernetes API 伺服器的流量所使用的目的地 IP 位址。使用者叢集的 Kubernetes API 伺服器會在管理員叢集的節點上執行。這個 IP 位址必須與管理員叢集節點位於相同的 L2 網域。請勿在「位址集區」部分新增這個地址。
Ingress VIP:要在 Ingress Proxy 的負載平衡器上設定的 IP 位址。您必須將此項目新增至「位址集區」部分中的位址集區。
按一下「繼續」。
F5 BIG-IP
只有在管理員叢集使用 F5 BIG-IP 時,您才能為使用者叢集使用 F5 BIG-IP。請務必先安裝及設定 F5 BIG-IP ADC,再整合至 Google Distributed Cloud。F5 使用者名稱和密碼會從管理員叢集繼承。
在「虛擬 IP」部分中,輸入下列內容:
控制層 VIP:傳送至 Kubernetes API 伺服器的流量所適用的目的地 IP 位址。
Ingress VIP:要在 Ingress Proxy 的負載平衡器上設定的 IP 位址。
在「位址」欄位中,輸入 F5 BIG-IP 負載平衡器的位址。
在「Partition」(分區) 欄位中,輸入您為使用者叢集建立的 BIG-IP 分區名稱。
在「sNAT pool name」(SNAT 集區名稱) 欄位中,輸入 SNAT 集區的名稱 (如適用)。
按一下「繼續」。
手動
只有在管理員叢集使用手動負載平衡器時,您才能為使用者叢集使用手動負載平衡器。在 Google Distributed Cloud 中,Kubernetes API 伺服器和 Ingress Proxy 各自會由LoadBalancer
類型的 Kubernetes Service 公開。請提供這些 Service 的 nodePort
值 (必須介於 30000 與 32767 之間),以 Ingress Proxy 來說,請提供同時適用於 HTTP 和 HTTPS 流量的 nodePort
值。詳情請參閱「啟用手動負載平衡模式」。
在「虛擬 IP」部分中,輸入下列資訊:
控制層 VIP:傳送至 Kubernetes API 伺服器的流量所適用的目的地 IP 位址。
Ingress VIP:要在 Ingress Proxy 的負載平衡器上設定的 IP 位址。
在「Control-plan node port」(控制層節點通訊埠) 欄位中,輸入 Kubernetes API 伺服器的
nodePort
值。在「Ingress HTTP node port」(Ingress HTTP 節點通訊埠) 欄位中,輸入傳送至 Ingress Proxy 的 HTTP 流量適用的
nodePort
值。在「Ingress HTTPS node port」(Ingress HTTPS 節點通訊埠) 欄位中,輸入傳送至 Ingress Proxy 的 HTTPS 流量適用的
nodePort
值。在「Konnectivity server node port」(Konnectivity 伺服器節點通訊埠) 欄位中,輸入 Konnectivity 伺服器的
nodePort
值。按一下「繼續」。
功能
這個部分會顯示叢集上已啟用的功能和作業。
系統會自動啟用下列功能,且無法停用:
系統服務的 Cloud Logging 記錄
系統服務的 Cloud Monitoring
下列功能預設為啟用,但您可以停用:
啟用 vSphere CSI 驅動程式:又稱 vSphere Container Storage 外掛程式。Container Storage Interface (CSI) 驅動程式會在部署於 vSphere 中的 Kubernetes 叢集中執行,以便在 vSphere 儲存空間中佈建永久磁碟區。詳情請參閱使用 vSphere 容器儲存介面驅動程式。
啟用反相依性群組:系統會自動為使用者叢集節點建立 VMware Distributed Resource Scheduler (DRS) 反相依性規則,使其分散於資料中心內至少 3 個實體主機上。確認 vSphere 環境符合需求條件。
點選「下一步」設定節點集區
節點集區
您建立的叢集至少會含有一個節點集區。節點集區是這個叢集中建立的 worker 節點群組範本。詳情請參閱「建立及管理節點集區 」。
在「節點集區預設值」部分中,完成下列步驟:
- 輸入「節點集區名稱」,或接受「default-pool」做為名稱。
- 輸入集區中每個節點的 vCPUs 數量 (每個使用者叢集工作站至少須有 4 個)。
- 輸入集區中每個節點的記憶體大小 (以 MiB 為單位,每個使用者叢集工作站節點至少須有 8192 MiB,且必須為 4 的倍數)。
- 在「節點」欄位中,輸入集區中的節點數量 (至少 3 個)。如果您在「Networking」(網路) 部分輸入「Node IPs」(節點 IP),請確認您輸入的 IP 位址數量足以容納這些使用者叢集節點。
- 選取「OS 映像檔類型」:Ubuntu、Ubuntu Containerd 或 COS。
- 輸入開機磁碟大小 (以 GiB 為單位,至少須有 40 GiB)。
- 如果您使用 MetalLB 做為負載平衡器,則必須在至少一個節點集區中啟用 MetalLB。請保留選取的「使用這個節點集區執行 MetalLB 負載平衡」,或新增其他節點集區來執行 MetalLB。
在「節點集區中繼資料 (選用)」專區中,如要新增 Kubernetes 標籤和汙點,請按照下列步驟操作:
- 按一下「+ Add Kubernetes Labels」(+ 新增 Kubernetes 標籤)。輸入標籤的「Key」(鍵) 和「Value」(值)。視需要重複上述步驟。
- 按一下「+ Add Taint」(新增汙染)。輸入汙染的「鍵」、「值」和「效果」。視需要重複上述步驟。
按一下「驗證並完成」,建立使用者叢集。建立使用者叢集需要 15 分鐘以上。主控台會顯示狀態訊息,驗證設定並在資料中心建立叢集。
如果驗證設定時發生錯誤,控制台會顯示錯誤訊息,您應該能據此修正設定問題,然後再次嘗試建立叢集。
如要進一步瞭解可能發生的錯誤及修正方式,請參閱「在 Google Cloud 控制台中排解使用者叢集建立作業的問題」。
gcloud CLI
您可以使用下列指令建立使用者叢集:
gcloud container vmware clusters create
建立叢集後,您需要使用下列指令建立至少一個節點集區:
gcloud container vmware node-pools create
建立叢集和節點集區的大部分標記,都對應至使用者叢集設定檔中的欄位。如要開始使用,請在範例部分測試完整指令。
收集資訊
收集建立叢集所需的資訊。
取得管理員叢集的名稱和機群成員位置:
gcloud container fleet memberships list \ --project=FLEET_HOST_PROJECT_ID
將
FLEET_HOST_PROJECT_ID
替換為管理員叢集註冊的專案 ID。輸出結果會與下列內容相似:
NAME EXTERNAL_ID LOCATION admin-cluster-1 bb7803b4-8438-4b22-859f-4559b4b29072 global admin-cluster-2 ee16ee2b-6ec0-49fc-9413-3c89cbc70854 global admin-cluster-3 fc2b7ef5-39ff-4b63-b919-04c5adc67be4 us-west1
位置會指定 Fleet 和 Connect 服務的執行位置。1.28 之前的管理叢集是由全域機群和 Connect 服務管理。在 1.28 以上版本中,建立管理叢集時,您可以指定
global
或 Google Cloud 區域。在下列範例指令中,您會在--admin-cluster-membership-location
旗標中指定區域。取得可用版本清單:
gcloud container vmware clusters query-version-config \ --admin-cluster-membership=ADMIN_CLUSTER_NAME \ --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership-location=ADMIN_CLUSTER_REGION \ --location=REGION
更改下列內容:
ADMIN_CLUSTER_NAME
:管理員叢集的名稱。FLEET_HOST_PROJECT_ID
:管理員叢集註冊的專案 ID。ADMIN_CLUSTER_REGION
:管理員叢集的 Fleet 成員區域。這可以是全域或 Google Cloud區域。使用gcloud container fleet memberships list
輸出內容中的管理員叢集位置。REGION
:建立使用者叢集時要使用的 Google Cloud 區域。這是 GKE On-Prem API 執行及儲存中繼資料的區域。如果管理員叢集已向 GKE On-Prem API 註冊,請使用與管理員叢集相同的區域。如要找出管理員叢集的區域,請執行下列指令:
gcloud container vmware admin-clusters list \ --project=FLEET_HOST_PROJECT_ID \ --location=-
如果管理員叢集未註冊 GKE On-Prem API,請指定
us-west1
或其他支援的區域。如果後續要向 GKE On-Prem API 註冊管理員叢集,請使用與使用者叢集相同的區域。
gcloud container vmware clusters query-version-config
指令的輸出內容如下所示:versions: - isInstalled: true version: 1.28.800-gke.109 - version: 1.29.0-gke.1456 - version: 1.29.100-gke.248 - version: 1.29.200-gke.245 - version: 1.29.300-gke.184
這個指令也會輸出說明,指出可用於建立或升級使用者叢集的版本。允許的版本會以
isInstalled: true
註解,表示管理員叢集具有管理該版本使用者叢集所需的版本專屬元件。如要使用管理員叢集上安裝的版本,請跳至「範例」一節,建立使用者叢集。
安裝其他版本
管理員叢集可以管理不同版本的使用者叢集。query-version-config
指令的輸出內容會列出您在建立叢集時可使用的其他版本。如要建立與管理員叢集不同版本的使用者叢集,請下載並部署管理員叢集管理該版本使用者叢集所需的元件,步驟如下:
gcloud container vmware admin-clusters update ADMIN_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=REGION \ --required-platform-version=VERSION
將 VERSION
替換為 query-version-config
指令輸出內容中列出的其中一個版本。
這項指令會將您在 --required-platform-version
中指定的元件版本下載至管理員叢集,然後部署元件。您現在可以建立指定版本的使用者叢集。
如果重新執行 gcloud container vmware clusters query-version-config
,您指定的版本會加上 isInstalled: true
註解。
範例
以下範例說明如何建立使用者叢集,並啟用 Controlplane V2 和不同的負載平衡器。啟用 Controlplane V2 後,使用者叢集的控制層會在使用者叢集的一或多個節點上執行。建議您啟用 Controlplane V2,且在 1.30 以上版本中,新使用者叢集必須啟用 Controlplane V2。如要瞭解可用的負載平衡選項,請參閱負載平衡器總覽。
大部分範例都使用預設值來設定控制層節點。如要變更任何預設值,請加入「控制平面標記」一節所述的標記。視需要變更部分 vSphere 設定。
執行 gcloud
指令建立叢集前,您可以加入 --validate-only
,驗證您在 gcloud
指令的旗標中指定的設定。準備好建立叢集時,請移除這個標記並執行指令。
如果 gcloud container vmware clusters create
指令執行約一分鐘後發生錯誤,請執行下列指令,檢查叢集是否已部分建立:
gcloud container vmware clusters list \ --project=FLEET_HOST_PROJECT_ID \ --location=-
如果輸出內容未列出叢集,請修正錯誤並重新執行 gcloud container vmware clusters create
。
如果輸出內容中列出叢集,請使用下列指令刪除叢集:
gcloud container vmware clusters delete USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=REGION \ --force \ --allow-missing
然後修正錯誤並重新執行 gcloud container vmware clusters create
。
叢集執行後,您必須先新增節點集區,才能部署工作負載,詳情請參閱「建立節點集區」一節。
MetalLB 和 DHCP
本範例說明如何使用隨附的 MetalLB 負載平衡器建立使用者叢集,並使用 DHCP 伺服器取得叢集工作站節點的 IP 位址。只有在管理員叢集使用 MetalLB 時,您才能在使用者叢集使用 MetalLB。這個負載平衡選項只需要最少的設定。MetalLB 可直接在叢集節點上執行,不需要額外的 VM。如要進一步瞭解使用 MetalLB 的優點,以及 MetalLB 與其他負載平衡選項的比較,請參閱「使用 MetalLB 進行套裝組合負載平衡」。
範例指令會建立具有下列特徵的使用者叢集,您可以視環境需求修改。
旗標 | 說明 |
---|---|
--admin-users |
授予您和其他使用者叢集的完整管理權限。 |
--enable-control-plane-v2 |
啟用 Controlplane V2,建議使用這個選項,且 1.30 以上版本必須啟用。 |
--control-plane-ip-block |
控制層節點的 IP 位址。如要建立高可用性 (HA) 使用者叢集,請指定三個 IP 位址,並新增 --replicas=3 標記。 |
--metal-lb-config-address-pools |
MetalLB 負載平衡器的兩個位址集區。您至少需要一個位址集區,並可視需要指定更多集區。為方便起見,範例包含名為「ingress-vip-pool」的位址集區,提醒您 Ingress VIP 的 IP 位址必須位於其中一個位址集區。如要為單一 IP 位址指定 CIDR,請在 IP 位址後方附加 /32 。 |
gcloud container vmware clusters create USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership=ADMIN_CLUSTER_NAME \ --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership-location=ADMIN_CLUSTER_REGION \ --location=REGION \ --version=VERSION \ --admin-users=YOUR_EMAIL_ADDRESS \ --admin-users=ANOTHER_EMAIL_ADDRESS \ --service-address-cidr-blocks=10.96.0.0/20 \ --pod-address-cidr-blocks=192.168.0.0/16 \ --metal-lb-config-address-pools='pool=NAME,avoid-buggy-ips=AVOID_BUGGY_IPS,manual-assign=MANUAL_ASSIGN,addresses=IP_ADDRESS_RANGE_1' \ --metal-lb-config-address-pools='pool=ingress-vip-pool,avoid-buggy-ips=False,manual-assign=True,addresses=INGRESS_VIP/32' \ --enable-control-plane-v2 \ --dns-servers=DNS_SERVER_1 \ --ntp-servers=NTP_SERVER_1 \ --control-plane-ip-block 'gateway=CP_GATEWAY,netmask=CP_NETMASK,ips=CP_IP_ADDRESS_1 CP_HOST_1' \ --control-plane-vip=CONTROL_PLANE_VIP \ --ingress-vip=INGRESS_VIP \ --enable-dhcp
更改下列內容:
-
USER_CLUSTER_NAME
:使用者叢集的名稱,可自行選擇。叢集建立完成後即無法變更名稱。 名稱必須符合以下條件:- 最多可包含 40 個半形字元
- 只能包含小寫英數字元或連字號 (
-
) - 開頭必須是字母字元
- 結尾為英數字元
-
FLEET_HOST_PROJECT_ID
:要在其中建立叢集的專案 ID。指定的專案也會做為機群主專案。這必須是管理員叢集註冊的專案。建立使用者叢集後,系統會自動向所選專案的機群註冊該叢集。叢集建立後,機群主機專案就無法變更。 -
ADMIN_CLUSTER_NAME
:管理使用者叢集的管理員叢集名稱。在--admin-cluster-membership
旗標中,您可以使用完整指定的叢集名稱,格式如下:projects/FLEET_HOST_PROJECT_ID/locations/ADMIN_CLUSTER_REGION/memberships/ADMIN_CLUSTER_NAME
或者,您可以將
--admin-cluster-membership
設為管理員叢集的名稱,如範例指令所示。只使用管理員叢集名稱時,請使用--admin-cluster-membership-project
設定管理員叢集的專案 ID,並使用--admin-cluster-membership-location
設定位置。管理叢集的位置可以是global
或 Google Cloud 地區。如需尋找區域,請執行gcloud container fleet memberships list
。 -
REGION
:GKE On-Prem API (gkeonprem.googleapis.com
)、Fleet 服務 (gkehub.googleapis.com
) 和 Connect 服務 (gkeconnect.googleapis.com
) 執行的 Google Cloud 區域。指定us-west1
或其他支援的區域。叢集建立後,就無法變更區域。這項設定會指定下列項目的儲存區域:- GKE On-Prem API 管理叢集生命週期所需的使用者叢集中繼資料
- 系統元件的 Cloud Logging 和 Cloud Monitoring 資料
- Cloud 稽核記錄建立的管理員稽核記錄
叢集名稱、專案和位置資訊會共同識別 Google Cloud中的叢集。
-
VERSION
:使用者叢集的 Google Distributed Cloud 版本。 -
YOUR_EMAIL_ADDRESS
和ANOTHER_EMAIL_ADDRESS
: 如果您未加入--admin-users
旗標,身為叢集建立者,系統預設會授予您叢集管理員權限。但如果加入--admin-users
指定其他使用者為管理員,就會覆寫預設值,因此必須同時加入您的電子郵件地址和其他管理員的電子郵件地址。舉例來說,如要新增兩位管理員:--admin-users=sara@example.com \ --admin-users=amal@example.com
建立叢集時,GKE On-Prem API 會將 Kubernetes 角色型存取權控管 (RBAC) 政策套用至叢集,授予您和其他管理員使用者 Kubernetes
clusterrole/cluster-admin
角色,讓您能完整存取叢集和所有命名空間中的全部資源。
-
SERVICE_CIDR_BLOCK
:以 CIDR 格式表示的 IP 位址範圍,用於叢集中的服務。至少須為 /24 範圍。範例:
--service-address-cidr-blocks=10.96.0.0/20
-
POD_CIDR_BLOCK
:IP 位址範圍 (CIDR 格式),用於叢集中的 Pod。至少須為 /18 範圍。範例:
--pod-address-cidr-blocks=192.168.0.0/16
-
--metal-lb-config-address-pools
:加入這個旗標,指定 MetalLB 負載平衡器要使用的位址集區設定。旗標的值採用以下格式:--metal-lb-config-address-pool 'pool=NAME,avoid-buggy-ips=True|False,manual-assign=True|False,addresses=IP_ADDRESS_RANGE_1;IP_ADDRESS_RANGE_2;...' \
值包含以關鍵字
pool
、avoid-buggy-ip
、manual-assign
和addresses
開頭的區隔。請用半形逗號分隔每個區隔。-
pool
:您為集區選用的名稱。 -
avoid-buggy-ips
1:如果將此值設為True
,MetalLB 控制器就不會將結尾為 .0 或 .255 的 IP 位址指派給 Service。這樣可避免有問題的消費型裝置誤將傳送至這些特殊 IP 位址的流量捨棄。如未指定,則預設為False
。 -
manual-assign
:如不希望 MetalLB 控制器自動將這個集區的 IP 位址指派給 Service,請將此值設為True
。 接著,開發人員可以建立LoadBalancer
類型的 Service,然後手動指定集區中的其中一個位址。如未指定,manual-assign
會設為False
。 -
在
addresses
清單中:每個位址都必須是範圍,且採用 CIDR 標記法或連字號範圍格式。如要在集區中指定單一 IP 位址 (例如 Ingress VIP),請使用 CIDR 標記法中的 /32,例如:192.0.2.1/32
。
注意事項:
- 以單引號括住整個值。
- 不得包含空白字元。
- 請以半形分號分隔各 IP 位址範圍。
例如:
--metal-lb-config-address-pool 'pool=pool1,avoid-buggy-ips=True,manual-assign=True,addresses=10.251.134.80/32;192.168.1.0/26;192.168.1.2-192.168.1.3'
-
-
CONTROL_PLANE_VIP
:您選擇在使用者叢集的 Kubernetes API 伺服器負載平衡器上設定的 IP 位址。範例:
--control-plane-vip=203.0.113.3
-
INGRESS_VIP
:您選擇在負載平衡器上設定的 IP 位址,用於輸入 Proxy。範例:
--ingress-vip=10.251.134.80
Ingress VIP 的 IP 位址必須位於其中一個 MetalLB 位址集區。
--enable-dhcp
:如要讓叢集節點從您提供的 DHCP 伺服器取得 IP 位址,請加入--enable-dhcp
。如要為叢集節點提供靜態 IP 位址,或設定手動負載平衡,請不要加入這個旗標。
MetalLB 和靜態 IP
本範例說明如何使用隨附的 MetalLB 負載平衡器建立使用者叢集,並為叢集工作站節點指派靜態 IP 位址。只有在管理員叢集使用 MetalLB 時,您才能在使用者叢集使用 MetalLB。這個負載平衡選項只需要最少的設定。MetalLB 可直接在叢集節點上執行,不需要額外的 VM。如要進一步瞭解使用 MetalLB 的優點,以及 MetalLB 與其他負載平衡選項的比較,請參閱「使用 MetalLB 進行套裝組合負載平衡」。
範例指令會建立具有下列特徵的使用者叢集,您可以視環境需求修改。
旗標 | 說明 |
---|---|
--admin-users |
授予您和其他使用者叢集的完整管理權限。 |
--enable-control-plane-v2 |
啟用 Controlplane V2,建議使用這個選項,且 1.30 以上版本必須啟用。 |
--control-plane-ip-block |
控制層節點的 IP 位址。如要建立高可用性 (HA) 使用者叢集,請指定三個 IP 位址,並新增 --replicas=3 標記。 |
--metal-lb-config-address-pools |
MetalLB 負載平衡器的兩個位址集區。您至少需要一個位址集區,並可視需要指定更多集區。為方便起見,範例包含名為「ingress-vip-pool」的位址集區,提醒您 Ingress VIP 的 IP 位址必須位於其中一個位址集區。如要為單一 IP 位址指定 CIDR,請在 IP 位址後方附加 /32 。 |
--static-ip-config-ip-blocks |
叢集中的工作站節點有四個 IP 位址。包括升級和更新期間可使用的額外節點位址。如有需要,可以指定更多 IP 位址。主機名稱為選填項目。 |
gcloud container vmware clusters create USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership=ADMIN_CLUSTER_NAME \ --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership-location=ADMIN_CLUSTER_REGION \ --location=REGION \ --version=VERSION \ --admin-users=YOUR_EMAIL_ADDRESS \ --admin-users=ANOTHER_EMAIL_ADDRESS \ --service-address-cidr-blocks=10.96.0.0/20 \ --pod-address-cidr-blocks=192.168.0.0/16 \ --metal-lb-config-address-pools='pool=NAME,avoid-buggy-ips=AVOID_BUGGY_IPS,manual-assign=MANUAL_ASSIGN,addresses=IP_ADDRESS_RANGE_1' \ --metal-lb-config-address-pools='pool=ingress-vip-pool,avoid-buggy-ips=False,manual-assign=True,addresses=INGRESS_VIP/32' \ --enable-control-plane-v2 \ --control-plane-ip-block 'gateway=CP_GATEWAY,netmask=CP_NETMASK,ips=CP_IP_ADDRESS_1 CP_HOST_1' \ --control-plane-vip=CONTROL_PLANE_VIP \ --ingress-vip=INGRESS_VIP \ --static-ip-config-ip-blocks='gateway=GATEWAY,netmask=NETMASK,ips=IP_ADDRESS_1 HOST_1;IP_ADDRESS_2 HOST_2;IP_ADDRESS_3 HOST_3;IP_ADDRESS_4 HOST_4' \ --dns-servers=DNS_SERVER_1 \ --ntp-servers=NTP_SERVER_1
更改下列內容:
-
USER_CLUSTER_NAME
:使用者叢集的名稱,可自行選擇。叢集建立完成後即無法變更名稱。 名稱必須符合以下條件:- 最多可包含 40 個半形字元
- 只能包含小寫英數字元或連字號 (
-
) - 開頭必須是字母字元
- 結尾為英數字元
-
FLEET_HOST_PROJECT_ID
:要在其中建立叢集的專案 ID。指定的專案也會做為機群主專案。這必須是管理員叢集註冊的專案。建立使用者叢集後,系統會自動向所選專案的機群註冊該叢集。叢集建立後,機群主機專案就無法變更。 -
ADMIN_CLUSTER_NAME
:管理使用者叢集的管理員叢集名稱。在--admin-cluster-membership
旗標中,您可以使用完整指定的叢集名稱,格式如下:projects/FLEET_HOST_PROJECT_ID/locations/ADMIN_CLUSTER_REGION/memberships/ADMIN_CLUSTER_NAME
或者,您可以將
--admin-cluster-membership
設為管理員叢集的名稱,如範例指令所示。只使用管理員叢集名稱時,請使用--admin-cluster-membership-project
設定管理員叢集的專案 ID,並使用--admin-cluster-membership-location
設定位置。管理叢集的位置可以是global
或 Google Cloud 地區。如需尋找區域,請執行gcloud container fleet memberships list
。 -
REGION
:GKE On-Prem API (gkeonprem.googleapis.com
)、Fleet 服務 (gkehub.googleapis.com
) 和 Connect 服務 (gkeconnect.googleapis.com
) 執行的 Google Cloud 區域。指定us-west1
或其他支援的區域。叢集建立後,就無法變更區域。這項設定會指定下列項目的儲存區域:- GKE On-Prem API 管理叢集生命週期所需的使用者叢集中繼資料
- 系統元件的 Cloud Logging 和 Cloud Monitoring 資料
- Cloud 稽核記錄建立的管理員稽核記錄
叢集名稱、專案和位置資訊會共同識別 Google Cloud中的叢集。
-
VERSION
:使用者叢集的 Google Distributed Cloud 版本。 -
YOUR_EMAIL_ADDRESS
和ANOTHER_EMAIL_ADDRESS
: 如果您未加入--admin-users
旗標,身為叢集建立者,系統預設會授予您叢集管理員權限。但如果加入--admin-users
指定其他使用者為管理員,就會覆寫預設值,因此必須同時加入您的電子郵件地址和其他管理員的電子郵件地址。舉例來說,如要新增兩位管理員:--admin-users=sara@example.com \ --admin-users=amal@example.com
建立叢集時,GKE On-Prem API 會將 Kubernetes 角色型存取權控管 (RBAC) 政策套用至叢集,授予您和其他管理員使用者 Kubernetes
clusterrole/cluster-admin
角色,讓您能完整存取叢集和所有命名空間中的全部資源。
-
SERVICE_CIDR_BLOCK
:以 CIDR 格式表示的 IP 位址範圍,用於叢集中的服務。至少須為 /24 範圍。範例:
--service-address-cidr-blocks=10.96.0.0/20
-
POD_CIDR_BLOCK
:IP 位址範圍 (CIDR 格式),用於叢集中的 Pod。至少須為 /18 範圍。範例:
--pod-address-cidr-blocks=192.168.0.0/16
-
--metal-lb-config-address-pools
:加入這個旗標,指定 MetalLB 負載平衡器要使用的位址集區設定。旗標的值採用以下格式:--metal-lb-config-address-pool 'pool=NAME,avoid-buggy-ips=True|False,manual-assign=True|False,addresses=IP_ADDRESS_RANGE_1;IP_ADDRESS_RANGE_2;...' \
值包含以關鍵字
pool
、avoid-buggy-ip
、manual-assign
和addresses
開頭的區隔。請用半形逗號分隔每個區隔。-
pool
:您為集區選用的名稱。 -
avoid-buggy-ips
1:如果將此值設為True
,MetalLB 控制器就不會將結尾為 .0 或 .255 的 IP 位址指派給 Service。這樣可避免有問題的消費型裝置誤將傳送至這些特殊 IP 位址的流量捨棄。如未指定,則預設為False
。 -
manual-assign
:如不希望 MetalLB 控制器自動將這個集區的 IP 位址指派給 Service,請將此值設為True
。 接著,開發人員可以建立LoadBalancer
類型的 Service,然後手動指定集區中的其中一個位址。如未指定,manual-assign
會設為False
。 -
在
addresses
清單中:每個位址都必須是範圍,且採用 CIDR 標記法或連字號範圍格式。如要在集區中指定單一 IP 位址 (例如 Ingress VIP),請使用 CIDR 標記法中的 /32,例如:192.0.2.1/32
。
注意事項:
- 以單引號括住整個值。
- 不得包含空白字元。
- 請以半形分號分隔各 IP 位址範圍。
例如:
--metal-lb-config-address-pool 'pool=pool1,avoid-buggy-ips=True,manual-assign=True,addresses=10.251.134.80/32;192.168.1.0/26;192.168.1.2-192.168.1.3'
-
-
CONTROL_PLANE_VIP
:您選擇在使用者叢集的 Kubernetes API 伺服器負載平衡器上設定的 IP 位址。範例:
--control-plane-vip=203.0.113.3
-
INGRESS_VIP
:您選擇在負載平衡器上設定的 IP 位址,用於輸入 Proxy。範例:
--ingress-vip=10.251.134.80
Ingress VIP 的 IP 位址必須位於其中一個 MetalLB 位址集區。
-
--static-ip-config-ip-blocks
:指定預設閘道、子網路遮罩,以及使用者叢集中工作站節點的靜態 IP 位址清單。旗標的值格式如下:--static-ip-config-ip-blocks 'gateway=GATEWAY,netmask=NETMASK,ips=IP_ADDRESS_1;IP_ADDRESS_2 HOST_2;...'
值含有以關鍵字
gateway
、netmask
和ips
開頭的區隔。並以半形逗號分隔各區隔。注意事項:
- 以單引號括住整個值。
- IP 位址和主機名稱之間除外,不得有空白字元。
在 IP 位址清單中:
- 您可以指定個別 IP 位址,或是 IP 位址的 CIDR 區塊。
- 請以半形分號分隔各 IP 位址或 CIDR 區塊。
- 如果是個別 IP 位址,您可以在 IP 位址後方選擇性指定主機名稱。 IP 位址和主機名稱之間請以半形空格分隔。如果未指定主機名稱,Google Distributed Cloud 會使用 vSphere 中的 VM 名稱做為主機名稱。
- 如果指定 CIDR 區塊,請勿指定主機名稱的值。
例如:
--static-ip-config-ip-blocks 'gateway=172.16.23.254,netmask=255.255.252.0,ips=172.16.20.10;172.16.20.11 host2;172.16.20.12/30'
-
DNS_SERVER
:以半形逗號分隔的 VM DNS 伺服器 IP 位址清單。 -
DNS_SEARCH_DOMAIN
:以半形逗號分隔的清單,當中列有供主機使用的 DNS 搜尋網域。可做為部分的網域搜尋清單。例如:
--dns-search-domains example.com,examplepetstore.com
-
NTP_SERVER
:VM 要使用的時間伺服器 IP 位址清單 (以半形逗號分隔)。
手動負載平衡器和靜態 IP
本範例說明如何建立具有手動負載平衡器的使用者叢集,並為叢集工作站節點指派靜態 IP 位址。只有在管理員叢集使用手動負載平衡器時,您才能為使用者叢集使用手動負載平衡器。在 Google Distributed Cloud 中,Kubernetes API 伺服器、Ingress Proxy 和記錄匯總外掛程式服務,都會由 LoadBalancer
類型的 Kubernetes Service 公開。請提供這些 Service 的 nodePort
值 (必須介於 30000 與 32767 之間)。以 Ingress Proxy 來說,請提供同時適用於 HTTP 和 HTTPS 流量的 nodePort
值。詳情請參閱「啟用手動負載平衡模式」。
範例指令會建立具有下列特徵的使用者叢集,您可以視環境需求修改。
旗標 | 說明 |
---|---|
--admin-users |
授予您和其他使用者叢集的完整管理權限。 |
--enable-control-plane-v2 |
啟用 Controlplane V2,建議使用這個選項,且 1.30 以上版本必須啟用。 |
--control-plane-ip-block |
控制層節點的 IP 位址。如要建立高可用性 (HA) 使用者叢集,請指定三個 IP 位址,並新增 --replicas=3 標記。 |
--static-ip-config-ip-blocks |
叢集中的工作站節點有四個 IP 位址。包括升級和更新期間可使用的額外節點位址。如有需要,可以指定更多 IP 位址。主機名稱為選填項目。 |
gcloud container vmware clusters create USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership=ADMIN_CLUSTER_NAME \ --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership-location=ADMIN_CLUSTER_REGION \ --location=REGION \ --version=VERSION \ --admin-users=YOUR_EMAIL_ADDRESS \ --admin-users=ANOTHER_EMAIL_ADDRESS \ --service-address-cidr-blocks=10.96.0.0/20 \ --pod-address-cidr-blocks=192.168.0.0/16 \ --enable-control-plane-v2 \ --control-plane-ip-block 'gateway=CP_GATEWAY,netmask=CP_NETMASK,ips=CP_IP_ADDRESS_1 CP_HOST_1' \ --control-plane-vip=CONTROL_PLANE_VIP \ --ingress-vip=INGRESS_VIP \ --ingress-http-node-port=INGRESS_HTTP_NODE_PORT \ --ingress-https-node-port=INGRESS_HTTPS_NODE_PORT \ --static-ip-config-ip-blocks='gateway=GATEWAY,netmask=NETMASK,ips=IP_ADDRESS_1 HOST_1;IP_ADDRESS_2 HOST_2;IP_ADDRESS_3 HOST_3;IP_ADDRESS_4 HOST_4' \ --dns-servers=DNS_SERVER_1 \ --ntp-servers=NTP_SERVER_1
更改下列內容:
-
USER_CLUSTER_NAME
:使用者叢集的名稱,可自行選擇。叢集建立完成後即無法變更名稱。 名稱必須符合以下條件:- 最多可包含 40 個半形字元
- 只能包含小寫英數字元或連字號 (
-
) - 開頭必須是字母字元
- 結尾為英數字元
-
FLEET_HOST_PROJECT_ID
:要在其中建立叢集的專案 ID。指定的專案也會做為機群主專案。這必須是管理員叢集註冊的專案。建立使用者叢集後,系統會自動向所選專案的機群註冊該叢集。叢集建立後,機群主機專案就無法變更。 -
ADMIN_CLUSTER_NAME
:管理使用者叢集的管理員叢集名稱。在--admin-cluster-membership
旗標中,您可以使用完整指定的叢集名稱,格式如下:projects/FLEET_HOST_PROJECT_ID/locations/ADMIN_CLUSTER_REGION/memberships/ADMIN_CLUSTER_NAME
或者,您可以將
--admin-cluster-membership
設為管理員叢集的名稱,如範例指令所示。只使用管理員叢集名稱時,請使用--admin-cluster-membership-project
設定管理員叢集的專案 ID,並使用--admin-cluster-membership-location
設定位置。管理叢集的位置可以是global
或 Google Cloud 地區。如需尋找區域,請執行gcloud container fleet memberships list
。 -
REGION
:GKE On-Prem API (gkeonprem.googleapis.com
)、Fleet 服務 (gkehub.googleapis.com
) 和 Connect 服務 (gkeconnect.googleapis.com
) 執行的 Google Cloud 區域。指定us-west1
或其他支援的區域。叢集建立後,就無法變更區域。這項設定會指定下列項目的儲存區域:- GKE On-Prem API 管理叢集生命週期所需的使用者叢集中繼資料
- 系統元件的 Cloud Logging 和 Cloud Monitoring 資料
- Cloud 稽核記錄建立的管理員稽核記錄
叢集名稱、專案和位置資訊會共同識別 Google Cloud中的叢集。
-
VERSION
:使用者叢集的 Google Distributed Cloud 版本。 -
YOUR_EMAIL_ADDRESS
和ANOTHER_EMAIL_ADDRESS
: 如果您未加入--admin-users
旗標,身為叢集建立者,系統預設會授予您叢集管理員權限。但如果加入--admin-users
指定其他使用者為管理員,就會覆寫預設值,因此必須同時加入您的電子郵件地址和其他管理員的電子郵件地址。舉例來說,如要新增兩位管理員:--admin-users=sara@example.com \ --admin-users=amal@example.com
建立叢集時,GKE On-Prem API 會將 Kubernetes 角色型存取權控管 (RBAC) 政策套用至叢集,授予您和其他管理員使用者 Kubernetes
clusterrole/cluster-admin
角色,讓您能完整存取叢集和所有命名空間中的全部資源。
-
SERVICE_CIDR_BLOCK
:以 CIDR 格式表示的 IP 位址範圍,用於叢集中的服務。至少須為 /24 範圍。範例:
--service-address-cidr-blocks=10.96.0.0/20
-
POD_CIDR_BLOCK
:IP 位址範圍 (CIDR 格式),用於叢集中的 Pod。至少須為 /18 範圍。範例:
--pod-address-cidr-blocks=192.168.0.0/16
CONTROL_PLANE_VIP
:您選擇在使用者叢集的 Kubernetes API 伺服器負載平衡器上設定的 IP 位址。範例:
--control-plane-vip=203.0.113.3
INGRESS_VIP
:您選擇在 Ingress Proxy 負載平衡器上設定的 IP 位址。範例:
--ingress-vip=203.0.113.4
INGRESS_HTTP_NODE_PORT
:傳送至 Ingress 代理程式的 HTTP 流量nodePort
值 (例如30243
)。INGRESS_HTTPS_NODE_PORT
:傳送至 Ingress 代理程式的 HTTPS 流量的nodePort
值 (例如30879
)。
-
--static-ip-config-ip-blocks
:指定預設閘道、子網路遮罩,以及使用者叢集中工作站節點的靜態 IP 位址清單。旗標的值格式如下:--static-ip-config-ip-blocks 'gateway=GATEWAY,netmask=NETMASK,ips=IP_ADDRESS_1;IP_ADDRESS_2 HOST_2;...'
值含有以關鍵字
gateway
、netmask
和ips
開頭的區隔。並以半形逗號分隔各區隔。注意事項:
- 以單引號括住整個值。
- IP 位址和主機名稱之間除外,不得有空白字元。
在 IP 位址清單中:
- 您可以指定個別 IP 位址,或是 IP 位址的 CIDR 區塊。
- 請以半形分號分隔各 IP 位址或 CIDR 區塊。
- 如果是個別 IP 位址,您可以在 IP 位址後方選擇性指定主機名稱。 IP 位址和主機名稱之間請以半形空格分隔。如果未指定主機名稱,Google Distributed Cloud 會使用 vSphere 中的 VM 名稱做為主機名稱。
- 如果指定 CIDR 區塊,請勿指定主機名稱的值。
例如:
--static-ip-config-ip-blocks 'gateway=172.16.23.254,netmask=255.255.252.0,ips=172.16.20.10;172.16.20.11 host2;172.16.20.12/30'
-
DNS_SERVER
:以半形逗號分隔的 VM DNS 伺服器 IP 位址清單。 -
DNS_SEARCH_DOMAIN
:以半形逗號分隔的清單,當中列有供主機使用的 DNS 搜尋網域。可做為部分的網域搜尋清單。例如:
--dns-search-domains example.com,examplepetstore.com
-
NTP_SERVER
:VM 要使用的時間伺服器 IP 位址清單 (以半形逗號分隔)。
控制層旗標
如要為控制平面設定使用非預設值,請加入下列一或多個旗標:
--cpus=vCPUS
:每個使用者叢集控制層節點的 vCPU 數量 (至少 4 個)。如未指定,則預設值為 4 個 vCPU。--memory=MEMORY
:每個使用者叢集控制層的記憶體大小 (以 MiB 為單位)。最小值為 8192,且必須是 4 的倍數。如未指定,則預設值為 8192。--replicas=NODES
:使用者叢集的控制層節點數量。舉例來說,您可以為開發環境選取 1 個控制層節點,並為高可用性 (HA) 生產環境選取 3 個控制層節點。--enable-auto-resize
:如要啟用使用者叢集控制層節點的自動調整大小功能,請加入--enable-auto-resize
。調整大小是指系統會自動調整指派給節點的 vCPU 和記憶體資源。這項功能啟用之後,系統就會依據使用者叢集內的工作站節點數量,調整使用者叢集的控制層節點大小。因此,當您在使用者叢集中新增更多工作站節點時,控制層節點的大小也會增加。--enable-control-plane-v2
:如要啟用建議使用的 Controlplane V2,請加入這個旗標。啟用 Controlplane V2 後,使用者叢集的控制層會在使用者叢集的一或多個節點上執行。在 1.30 以上版本中,必須使用 Controlplane V2。啟用 Controlplane V2 時,您也必須指定下列旗標:
--dns-servers=DNS_SERVER_1,...
:以半形逗號分隔的 VM DNS 伺服器 IP 位址清單。--ntp-servers=NTP_SERVER_1,...
:以逗號分隔的 VM 時間伺服器 IP 位址清單。--control-plane-ip-block
,格式如下:--control-plane-ip-block 'gateway=CP_GATEWAY,netmask=CP_NETMASK,ips=CP_IP_ADDRESS_1;CP_IP_ADDRESS_2 CP_HOST_2'
值包含以關鍵字
gateway
、netmask
和ips
開頭的區隔。並以半形逗號分隔各個區隔。注意事項:
- 以單引號括住整個值。
IP 位址和主機名稱之間除外,不得有空白字元。
在 IP 位址清單中:
您可以指定個別 IP 位址,也可以指定 IP 位址的 CIDR 區塊。
請以半形分號分隔各 IP 位址或 CIDR 區塊。
如果是個別 IP 位址,您可以在 IP 位址後方選擇指定主機名稱。以空格分隔 IP 位址和主機名稱。
如果指定 CIDR 區塊,請勿指定主機名稱的值。
例如:
--control-plane-ip-block 'gateway=192.168.0.1,netmask=255.0.0.0,ips=192.168.1.1;192.168.1.2 hostname-2;192.168.2.2/28`
選用:
--dns-search-domains=DNS_SEARCH_DOMAIN_1,...
: 供主機使用的 DNS 搜尋網域清單 (以半形逗號分隔)。 可做為部分的網域搜尋清單,例如:
--dns-search-domains example.com,examplepetstore.com
如需旗標的完整清單和說明,請參閱 gcloud CLI 參考資料。
vSphere 旗標
視需要指定下列選用旗標:
--disable-aag-config
:如果您未加入這個標記,系統會自動為使用者叢集節點建立 VMware Distributed Resource Scheduler (DRS) 反相依性規則,使其分散於資料中心內至少 3 個實體主機上。請確認 vSphere 環境符合需求。如果叢集不符合規定,請加入這個旗標。--disable-vsphere-csi
:如果未加入這個標記,vSphere 容器儲存介面 (CSI) 元件就會部署在使用者叢集中。CSI 驅動程式會在部署於 vSphere 中的原生 Kubernetes 叢集中執行,以便在 vSphere 儲存空間中佈建永久磁碟區。詳情請參閱使用 vSphere 容器儲存介面驅動程式。如不想部署 CSI 元件,請加入這個標記。如需旗標的完整清單和說明,請參閱 gcloud CLI 參考資料。
追蹤叢集建立進度
叢集建立指令的輸出內容類似於下列內容:
Waiting for operation [projects/example-project-12345/locations/us-west1/operations/operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179] to complete.
在範例輸出內容中,字串
operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179
是長時間執行的作業的OPERATION_ID
。您可以使用下列指令查詢作業狀態:gcloud container vmware operations describe OPERATION_ID \ --project=FLEET_HOST_PROJECT_ID \ --location=REGION
詳情請參閱 gcloud container vmware operations。
建立使用者叢集需要 15 分鐘以上的時間。您可以在 Google Cloud 控制台的「GKE 叢集」頁面中查看叢集。
建立節點集區
建立叢集後,您必須先建立至少一個節點集區,才能部署工作負載。
gcloud container vmware node-pools create NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=REGION \ --image-type=IMAGE_TYPE \ --boot-disk-size=BOOT_DISK_SIZE \ --cpus=vCPUS \ --memory=MEMORY \ --replicas=NODES \ --enable-load-balancer
更改下列內容:
NODE_POOL_NAME
:您為節點集區選用的名稱。名稱必須符合下列規定:- 最多可包含 40 個半形字元
- 只能包含小寫英數字元或連字號 (
-
) - 開頭必須是字母字元
- 結尾為英數字元
USER_CLUSTER_NAME
:新建立的使用者叢集名稱。FLEET_HOST_PROJECT_ID
:叢集註冊的專案 ID。REGION
:建立叢集時指定的 Google Cloud 區域。IMAGE_TYPE
:要在節點集區內 VM 執行的 OS 映像檔類型。設為ubuntu_containerd
或cos
。BOOT_DISK_SIZE
:集區中每個節點的開機磁碟大小 (以 GiB 為單位)。最低為 40 GiB。vCPUs
:節點集區中每個節點的 vCPU 數量。最少 4 個。MEMORY
:集區中每個節點的記憶體大小 (以 MiB 為單位)。每個使用者叢集工作站節點至少須有 8192 MiB,且必須為 4 的倍數。NODES
:節點集區中的節點數量。最少 3 個。如果使用 MetalLB 做為負載平衡器,可以視需要加入
--enable-load-balancer
,允許 MetalLB speaker 在集區中的節點上執行。至少須在一個節點集區中啟用 MetalLB。 如未加入這個標記,您必須建立另一個節點集區,供 MetalLB 使用。如要瞭解選用標記,請參閱「新增節點集區」和 gcloud CLI 參考資料。
gcloud 指令範例
MetalLB 和 DHCP
gcloud container vmware clusters create user-cluster-1 \ --project=example-project-12345 \ --location=us-west1 \ --admin-cluster-membership=projects/example-project-12345/locations/us-west1/memberships/admin-cluster-1 \ --version=1.32.0-gke.1087 \ --admin-users=sara@example.com \ --admin-users=amal@example.com \ --enable-dhcp \ --service-address-cidr-blocks=10.96.0.0/20 \ --pod-address-cidr-blocks=192.168.0.0/16 \ --metal-lb-config-address-pools='pool=lb-pool-1,manual-assign=False,avoid-buggy-ips=True,addresses=192.0.2.0/26;pool=lb-ingress-vip-pool,manual-assign=True,addresses=198.51.100.1/32' \ --enable-control-plane-v2 \ --control-plane-vip=203.0.113.1 \ --ingress-vip=198.51.100.1
MetalLB 和靜態 IP
gcloud container vmware clusters create user-cluster-3 \ --project=example-project-12345 \ --location=europe-west1 \ --admin-cluster-membership=projects/example-project-12345/locations/global/memberships/admin-cluster-1 \ --version=1.32.0-gke.1087 \ --admin-users=sara@example.com \ --admin-users=amal@example.com \ --static-ip-config-ip-blocks='gateway=192.0.2.254,netmask=255.255.255.0,ips=192.0.2.10 user-vm-1;192.0.2.11 user-vm-2' \ --static-ip-config-ip-blocks='gateway=192.0.2.254,netmask=255.255.255.0,ips=192.0.2.12 user-vm-3;192.0.2.13 extra-vm' \ --dns-servers=203.0.113.1,203.0.113.2 \ --dns-search-domains=example.com,altostrat.com \ --ntp-servers=203.0.113.3,203.0.113.4 \ --service-address-cidr-blocks=10.96.0.0/20 \ --pod-address-cidr-blocks=192.168.0.0/16 \ --enable-control-plane-v2 \ --control-plane-ip-block 'gateway=192.0.2.254,netmask=255.255.255.0,ips=198.51.100.1 cp-vm-1;198.51.100.2 cp-vm-2;198.51.100.3 cp-vm-3' \ --replicas=3 \ --metal-lb-config-address-pools='pool=lb-pool-1,manual-assign=False,avoid-buggy-ips=True,addresses=192.0.2.0/26;lb-ingress-vip-pool,manual-assign=True,addresses=198.51.100.1/32' \ --control-plane-vip=172.16.20.61 \ --ingress-vip=172.16.20.62
手動負載平衡器和靜態 IP
gcloud container vmware clusters create user-cluster-4 \ --project=example-project-12345 \ --location=asia-east1 \ --admin-cluster-membership=projects/example-project-12345/locations/asia-east1/memberships/admin-cluster-1 \ --version=1.32.0-gke.1087 \ --admin-users=sara@example.com \ --admin-users=amal@example.com \ --static-ip-config-ip-blocks='gateway=192.0.2.254,netmask=255.255.255.0,ips=192.0.2.10 user-vm-1;192.0.2.11 user-vm-2';ips=192.0.2.12 user-vm-3;192.0.2.13 extra-vm'\ --dns-servers=203.0.113.1,203.0.113.2 \ --ntp-servers=203.0.113.3,203.0.113.4 \ --service-address-cidr-blocks=10.96.0.0/20 \ --pod-address-cidr-blocks=192.168.0.0/16 \ --enable-control-plane-v2 \ --control-plane-ip-block 'gateway=192.0.2.254,netmask=255.255.255.0,ips=198.51.100.1 cp-vm-1;198.51.100.2 cp-vm-2;198.51.100.3 cp-vm-3' \ --replicas=3 \ --control-plane-vip=192.0.2.60 \ --ingress-vip=192.0.2.50 \ --ingress-http-node-port=30243 \ --ingress-https-node-port=30879
Terraform
事前準備
取得管理員叢集的名稱和機群成員位置:
gcloud container fleet memberships list \ --project=FLEET_HOST_PROJECT_ID
將
FLEET_HOST_PROJECT_ID
替換為管理員叢集註冊的專案 ID。輸出結果會與下列內容相似:
NAME EXTERNAL_ID LOCATION admin-cluster-1 bb7803b4-8438-4b22-859f-4559b4b29072 global admin-cluster-2 ee16ee2b-6ec0-49fc-9413-3c89cbc70854 global admin-cluster-3 fc2b7ef5-39ff-4b63-b919-04c5adc67be4 us-west1
位置會指定 Fleet 和 Connect 服務的執行位置。1.28 之前的管理叢集是由全域機群和 Connect 服務管理。在 1.28 以上版本中,您可以在建立叢集時指定
global
或 Google Cloud 區域。取得可用版本清單:
gcloud container vmware clusters query-version-config \ --admin-cluster-membership=ADMIN_CLUSTER_NAME \ --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership-location=ADMIN_CLUSTER_REGION \ --location=REGION
更改下列內容:
ADMIN_CLUSTER_NAME
:管理員叢集的名稱。FLEET_HOST_PROJECT_ID
:管理員叢集註冊的專案 ID。ADMIN_CLUSTER_REGION
:管理員叢集的 Fleet 成員區域。這可以是全域或 Google Cloud區域。使用gcloud container fleet memberships list
輸出內容中的管理員叢集位置。REGION
:建立叢集時使用的 Google Cloud 區域。這是 GKE On-Prem API 和 Fleet 與 Connect 服務的執行區域。指定us-west1
或其他支援的區域。
指令會輸出類似以下的結果:
versions: - isInstalled: true version: 1.14.3-gke.25 - version: 1.14.4-gke.54 - version: 1.15.0-gke.581
這個指令也會輸出說明,指出可用於建立或升級使用者叢集的版本。允許的版本會以
isInstalled: true
註解,表示管理員叢集具有管理該版本使用者叢集所需的版本專屬元件。如要使用管理員叢集上安裝的版本,請跳至「範例」一節,建立使用者叢集。
安裝其他版本
管理員叢集可以管理不同版本的使用者叢集。query-version-config
指令的輸出內容會列出您在建立叢集時可使用的其他版本。如要建立與管理員叢集不同版本的使用者叢集,請下載並部署管理員叢集管理該版本使用者叢集所需的元件,步驟如下:
gcloud container vmware admin-clusters update ADMIN_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=REGION \ --required-platform-version=VERSION
將 VERSION
替換為 query-version-config
指令輸出內容中列出的其中一個版本。
這項指令會將您在 --required-platform-version
中指定的元件版本下載至管理員叢集,然後部署元件。您現在可以建立指定版本的使用者叢集。
如果重新執行 gcloud container vmware clusters query-version-config
,您指定的版本會加上 isInstalled: true
註解。
範例
您可以使用下列基本設定範例,建立搭載 MetalLB 負載平衡器和一個節點集區的使用者叢集。
如需更多資訊和其他範例,請參閱 google_gkeonprem_vmware_cluster
參考說明文件。
在 terraform.tfvars
中設定變數
範例提供範例變數檔案,可傳遞至 main.tf
,說明如何設定隨附的 MetalLB 負載平衡器,並讓叢集節點從您提供的 DHCP 伺服器取得 IP 位址。
複製
anthos-samples
存放區,並變更為 Terraform 範例所在的目錄:git clone https://github.com/GoogleCloudPlatform/anthos-samples cd anthos-samples/anthos-onprem-terraform/avmw_user_cluster_metallb
建立
terraform.tfvars.sample
檔案副本:cp terraform.tfvars.sample terraform.tfvars
修改
terraform.tfvars
中的參數值。變數說明如下:
project_id
:要在其中建立叢集的專案 ID。指定的專案也會做為機群主專案。這必須與管理員叢集註冊的專案相同。建立使用者叢集後,系統會自動將其註冊至所選專案的機群。叢集建立後,就無法變更機群主機專案。region
:GKE On-Prem API (gkeonprem.googleapis.com
)、Fleet 服務 (gkehub.googleapis.com
) 和 Connect 服務 (gkeconnect.googleapis.com
) 執行的 Google Cloud 區域。指定us-west1
或其他支援的區域。admin_cluster_name
:管理使用者叢集的管理員叢集名稱。這個範例假設管理員叢集使用 global 做為區域。如果您有區域管理員叢集:- 在文字編輯器中開啟
main.tf
。 - 搜尋
admin_cluster_membership
,看起來如下所示:
admin_cluster_membership = "projects/${var.project_id}/locations/global/memberships/${var.admin_cluster_name}"
- 將
global
變更為管理員叢集使用的區域,然後儲存檔案。
- 在文字編輯器中開啟
on_prem_version
:使用者叢集的 Google Distributed Cloud 版本。admin_user_emails
:要授予叢集管理權限的使用者電子郵件地址清單。如果您打算管理叢集,請務必新增電子郵件地址。建立叢集時,GKE On-Prem API 會將 Kubernetes 依據角色的存取權控管 (RBAC) 政策套用至叢集,授予管理員使用者 Kubernetes
clusterrole/cluster-admin
角色,讓使用者能完整存取叢集和所有命名空間中的全部資源。使用者也能透過 Google 身分登入控制台。cluster_name
:使用者叢集的名稱,可自行選擇。叢集建立完成後即無法變更名稱。名稱必須符合下列規定:- 最多可包含 40 個半形字元
- 只能包含小寫英數字元或連字號 (
-
) - 開頭必須是字母字元
- 結尾為英數字元
control_plane_node_cpus
:使用者叢集每個控制層節點的 vCPU 數量。最少需要 4 個 vCPU。control_plane_node_memory
:使用者叢集每個控制層的記憶體大小 (以 MiB 為單位)。最小值為 8192,且必須是 4 的倍數。control_plane_node_replicas
:使用者叢集的控制層節點數量。舉例來說,您可以為開發環境輸入 1 個控制層節點,並為高可用性 (HA) 生產環境輸入 3 個控制層節點。control_plane_vip
:您選擇在使用者叢集的 Kubernetes API 伺服器負載平衡器上設定的虛擬 IP 位址 (VIP)。ingress_vip
:您選擇在負載平衡器上設定的 IP 位址,用於輸入 Proxy。lb_address_pools
:定義 MetalLB 負載平衡器所用位址集區的地圖清單。Ingress VIP 必須位於其中一個集區。指定下列屬性:name
:集區的名稱。addresses
:以 CIDR 標記法或連字號範圍格式表示的位址範圍。如要在集區中指定單一 IP 位址 (例如 Ingress VIP),請使用 CIDR 標記法中的 /32,例如:192.0.2.1/32
。
請將範例 IP 位址改成您的值,並視需要新增其他位址集區。
在
terraform.tfvars
中儲存變更。如不想對main.tf
進行任何選用變更,請跳至下一個章節「建立叢集和一個節點集區」。
設定 Controlplane V2
在 1.30 以上版本中,您必須啟用 Controlplane V2。範例中的 main.tf
檔案不會啟用 Controlplane V2。您必須變更 main.tf
,才能啟用 Controlplane V2,並新增閘道、網路遮罩和控制層節點的 IP 位址。變更前,請先備份 main.tf
:
cp main.tf main.tf.bak
如要設定 Controlplane V2,請對 main.tf
進行下列變更:
在
resource
區塊中新增下列程式碼:enable_control_plane_v2 = "true"
將
control_plane_v2_config
地圖新增至network_config
區塊,例如:control_plane_v2_config { control_plane_ip_block { netmask = "255.255.252.0" gateway = "10.250.71.254" ips { ip = "10.250.68.54" hostname = "cpv2-vm1" } ips { ip = "10.250.68.128" hostname = "cpv2-vm2" } ips { ip = "10.250.71.50" hostname = "cpv2-vm3" } } }
將
netmask
和gateway
的值替換為網路中的 IP 位址。將ip
和hostname
替換為控制層節點的 IP 位址。
選用:啟用進階叢集
在 1.32 以上版本中,使用 Terraform 建立的使用者叢集預設不會啟用進階叢集。如要啟用進階叢集,請將下列頂層欄位新增至 main.tf
:
enable_advanced_cluster = true
啟用進階叢集前,請務必先查看執行進階叢集時的差異。
選用:工作站節點 IP 位址模式
本節說明您可以在 main.tf
中進行的一些選用設定變更。變更前,請先備份 main.tf
:
cp main.tf main.tf.bak
根據預設,main.tf
會設定叢集使用您提供的 DHCP 伺服器,為叢集的背景工作節點指派 IP 位址。如要設定 DHCP,請在 network_config
區塊中加入 dhcp_config
對應。如要為工作節點提供靜態 IP 位址,請對 main.tf
進行下列變更:
取代
network_config
區塊,並加入static_ip_config
區塊。 例如:network_config { service_address_cidr_blocks = ["10.96.0.0/12"] pod_address_cidr_blocks = ["192.168.0.0/16"] host_config { dns_servers = ["10.254.41.1"] ntp_servers = ["216.239.35.8"] } static_ip_config { ip_blocks { netmask = "255.255.252.0" gateway = "10.251.31.254" ips { ip = "10.251.30.153" hostname = "vm-1" } ips { ip = "10.251.31.206" hostname = "vm-2" } ips { ip = "10.251.31.193" hostname = "vm-3" } ips { ip = "10.251.30.230" hostname = "vm-4" } } } }
將下列項目替換為您的值:
service_address_cidr_blocks
:以 CIDR 格式表示的 IP 位址範圍,用於叢集中的服務。至少須為 /24 範圍。pod_address_cidr_blocks
:以 CIDR 格式表示的 IP 位址範圍,用於叢集中的 Pod。至少須為 /18 範圍。dns_servers
:VM 的 DNS 伺服器 IP 位址清單。ntp_servers
:供 VM 使用的時間伺服器 IP 位址清單。在
static_ip_config
區塊中,將netmask
和gateway
的值替換為網路的位址。將ip
和hostname
替換為工作節點的 IP 位址和主機名稱。
建立叢集和一個節點集區
初始化並建立 Terraform 方案:
terraform init
Terraform 會安裝任何需要的程式庫,例如 Google Cloud 供應商。
檢查設定並視需要進行變更:
terraform plan
套用 Terraform 方案,建立使用者叢集:
terraform apply
建立使用者叢集大約需要 15 分鐘以上,建立節點集區則需要另外 15 分鐘。您可以在 Google Cloud 控制台的「GKE 叢集」頁面中查看叢集。
選用:在建立資源前執行指令列工具
如有需要,您可以在建立資源前執行 gcloud CLI 和 gkectl
等指令列工具,完成設定或配置工作。您可以使用 local-exec
佈建工具,在 Terraform 設定檔中定義要執行的指令列,並重複使用已定義的 Terraform 變數。
下列範例說明如何修改 main.tf
,在建立叢集前執行 gkectl prepare
指令:
resource "null_resource" "gkectl_prepare" {
provisioner "local-exec" {
command = "gkectl prepare --kubeconfig=${var.kubeconfig} --cluster-name=${var.cluster_name} --vcenter-username=${var.vcenter_username} --vcenter-password=${var.vcenter_password} --vcenter-address=${var.vcenter_address} --datacenter=${var.datacenter} --datastore=${var.datastore} --network=${var.network} --os-image=${var.os_image} --service-account-key-file=${var.service_account_key_file} --location=${var.location}"
working_dir = path.module # Important: Set working directory
environment = {
# Optional: set environment variables if needed.
# Example: GOOGLE_APPLICATION_CREDENTIALS = "/path/to/your/credentials.json"
}
}
}
resource "google_gkeonprem_vmware_cluster" "cluster" {
# ... your cluster configuration ...
# Ensure this depends on the null_resource
depends_on = [null_resource.gkectl_prepare]
# ... rest of your cluster configuration ...
location = var.location
name = var.cluster_name
# ... other required fields ...
}
疑難排解
請參閱「建立及升級叢集疑難排解」。
後續步驟
- 從 Google Cloud 控制台連線至叢集。
- 部署應用程式。