建立使用者叢集

在 Google Distributed Cloud 中,工作負載會在一或多個使用者叢集上執行。本文說明如何建立使用者叢集。如要使用拓撲網域,請參閱「建立要與拓撲網域搭配使用的使用者叢集」。

本頁面適用於設定、監控及管理技術基礎架構的管理員、架構師和操作員。如要進一步瞭解 Google Cloud 內容中提及的常見角色和工作範例,請參閱「常見的 GKE 使用者角色和工作」。

在 1.33 以上版本中,所有新叢集都會建立為進階叢集。請務必詳閱「執行進階叢集時的差異」。

您可以使用多種工具建立使用者叢集:

  • gkectl
  • Google Cloud 控制台
  • Google Cloud CLI
  • Terraform

其中三項工具 (控制台、gcloud CLI 和 Terraform) 是 GKE On-Prem API 的用戶端。

如需選擇工具的指引,請參閱「選擇管理叢集生命週期的工具」。

事前準備

  • 如果您打算使用 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 以上版本中,伺服器端預檢預設為啟用。伺服器端預檢需要額外的防火牆規則。在「管理員叢集的防火牆規則」中,搜尋「預檢檢查」,並確認已設定所有必要的防火牆規則。

    使用伺服器端預檢時,當您透過 gkectl 建立使用者叢集,預檢會在管理員叢集上執行,而非在本機的管理員工作站上執行。如果您使用 Google Cloud 控制台、Google Cloud CLI 或 Terraform 建立使用者叢集,系統也會執行伺服器端預檢。

使用自選工具建立使用者叢集

本節說明如何使用 gkectl、控制台、gcloud CLI 和 Terraform 建立使用者叢集。

gkectl

程序總覽

使用 gkectl 建立使用者叢集的主要步驟如下:

  1. 填寫設定檔
    填寫使用者叢集設定檔、憑證設定檔,以及 IP 區塊檔案 (如有需要),指定新叢集的詳細資料。
  2. (選用) 將 OS 映像檔匯入 vSphere,並視情況將容器映像檔推送至私人登錄檔。
    執行 gkectl prepare。
  3. 建立使用者叢集
    執行 gkectl create cluster,按照設定檔中的指定方式建立叢集。
  4. 確認使用者叢集正在運作
    使用 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.36.200-gke.118。

請瀏覽使用者叢集設定檔文件,熟悉設定檔。建議您在另一個分頁或視窗中開啟這份文件,以便在完成下列步驟時參考。

name

將 name 欄位設為您為使用者叢集選擇的名稱。

gkeOnPremVersion

系統會自動填入這個欄位。指定 Google Distributed Cloud 的版本。例如 1.36.200-gke.118。

enableAdvancedCluster

在 1.31 版中,如要啟用進階叢集功能,請將 enableAdvancedCluster 設為 true。如果管理員叢集已啟用進階叢集,這個欄位必須設為 true。

請注意版本之間的下列差異:

  • 在 1.31 版中,進階叢集功能處於預先發布版階段:

    • 您只能在建立新的 1.31 叢集時,啟用進階叢集。

    • 啟用進階叢集後,您將無法將叢集升級至 1.32。請只在測試環境中啟用進階叢集。

  • 在 1.32 版中,進階叢集功能已正式發布。

    • 根據預設,使用者叢集會建立為進階叢集。如要建立非進階叢集,則必須明確將 enableAdvancedCluster 設為 false。

    • 如果叢集已啟用進階叢集功能,則支援叢集升級。

  • 在 1.33 以上版本中,所有叢集都會建立為進階叢集。如果將 enableAdvancedCluster 設為 false,叢集建立作業會失敗。

enableControlplaneV2

如要建立已啟用 Controlplane V2 的使用者叢集,請將 enableControlplaneV2 設為 true。

如果啟用進階叢集,則必須將 enableControlplaneV2 設為 true。

啟用 Controlplane V2 後,使用者叢集的控制層會在使用者叢集本身的節點上執行。強烈建議您啟用 Controlplane V2。

kubeception

如果將這個欄位設為 false,叢集會使用 kubeception。使用 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

決定 worker 節點取得 IP 位址的方式。選項如下:

  • 從您預先設定的 DHCP 伺服器取得。將 network.ipMode.type 設為 "dhcp"。

  • 從您提供的靜態 IP 位址清單中選取。將 network.ipMode.type 設為 "static",並建立提供靜態 IP 位址的 IP 區塊檔案。如需 IP 區塊檔案範例,請參閱「填寫完成的設定檔範例」。

如果您決定為 worker 節點使用靜態 IP 位址,請填寫 network.ipMode.ipBlockFilePath 欄位。

使用者叢集的控制層節點必須從您提供的靜態位址清單中取得 IP 位址。即使 worker 節點是從 DHCP 伺服器取得位址,也是如此。如要為控制層節點指定靜態 IP 位址,請填寫 network.controlPlaneIPBlock 區段。如要建立高可用性 (HA) 使用者叢集,請指定三個 IP 位址。否則,請指定一個 IP 位址。

填寫 hostConfig 區段,指定 DNS 和 NTP 伺服器。這些 DNS 和 NTP 伺服器適用於控制層節點。如果 worker 節點使用靜態 IP 位址,這些 DNS 和 NTP 伺服器也會用於 worker 節點。

network.podCIDR 和 network.serviceCIDR 具有預先填入的值,除非這些值與網路中已使用的位址衝突,否則可以保持不變。Kubernetes 會使用這些範圍,將 IP 位址指派給叢集中的 Pod 和 Service。

無論您是依賴 DHCP 伺服器,還是指定靜態 IP 位址清單,都必須為使用者叢集提供足夠的可用 IP 位址。如要瞭解所需的 IP 位址數量,請參閱「規劃 IP 位址」。

loadBalancer

為使用者叢集的 Kubernetes API 伺服器預留 VIP。另外,請為使用者叢集的 Ingress 服務保留另一個 VIP。請提供 VIP 做為 loadBalancer.vips.controlPlaneVIP 和 loadBalancer.vips.ingressVIP 的值。

決定要使用的負載平衡類型。選項如下:

如要進一步瞭解負載平衡選項,請參閱「負載平衡總覽」。

advancedNetworking

如果您打算建立輸出 NAT 閘道,請將 advancedNetworking 設為 true。

multipleNetworkInterfaces

決定是否要為 Pod 設定多個網路介面,並據此設定 multipleNetworkInterfaces。

storage

如要停用 vSphere CSI 元件的部署作業,請將 storage.vSphereCSIDisabled 設為 true。

masterNode

在「masterNode」部分,您可以指定使用者叢集所需的控制層節點數量:指定 3 代表高可用性 (HA) 叢集,指定 1 則代表非高可用性叢集。您也可以指定控制層節點的資料儲存庫,以及是否要啟用控制層節點的自動調整大小功能。

如果 enableAdvancedCluster 欄位為 true,則必須將 replicas 欄位設為 3。進階叢集僅支援高可用性使用者叢集。

請回想一下,您在 network.controlPlaneIPBlock 區段中指定了控制層節點的 IP 位址。

nodePools

節點集區是叢集內設定相同的一組節點。舉例來說,某個集區中的節點可以執行 Windows,而另一個集區中的節點可以執行 Linux。

您必須填寫 nodePools 區段,指定至少一個節點集區。

如要啟用進階叢集,請將 nodePools[i].osImageType 設為 ubuntu_cgv2。

詳情請參閱「節點集區」和「建立及管理節點集區」。

antiAffinityGroups

將 antiAffinityGroups.enabled 設為 true 或 false。

這個欄位會指定 Google Distributed Cloud 是否要為 worker 節點建立分散式資源排程器 (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 以上版本中,如果Google Cloud 專案已啟用 GKE On-Prem API,專案中的所有叢集都會在stackdriver.clusterLocation設定的區域中,自動註冊 GKE On-Prem API。gkeOnPremAPI.location 區域必須與 cloudAuditLogging.clusterLocation、gkeConnect.location (如果設定檔包含該欄位) 和 stackdriver.clusterLocation 中指定的區域相同。

  • 如要將專案中的所有叢集註冊到 GKE On-Prem API,請務必按照「事前準備」中的步驟操作,在專案中啟用及使用 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

apiVersion: v1
kind: UserCluster
name: "my-user-cluster"
gkeOnPremVersion: 1.36.200-gke.118
enableControlplaneV2: true
enableAdvancedCluster: 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"
enableDataplaneV2: true
masterNode:
  cpus: 4
  memoryMB: 8192
  replicas: 3
nodePools:
- name: "worker-node-pool"
  cpus: 4
  memoryMB: 8192
  replicas: 3
  osImageType: "ubuntu_cgv2"
  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"
  serviceAccountKeyPath: "log-mon-sa-2203040617.json"
  disableVsphereResourceMetrics: false
cloudAuditLogging:
  projectID: "my-project-123"
  clusterLocation: "us-central1"
  serviceAccountKeyPath: "log-mon-sa-2203040617.json"
autoRepair:
  enabled: true

以下是上述範例中需要瞭解的重要事項:

  • nodePools.replicas 欄位設為 3,表示 "worker-node-pool" 中有三個 worker 節點。所有 worker 節點都使用靜態 IP 位址,因為 network.ipMode.type 設為 "static"。

  • worker 節點的靜態 IP 位址是在 IP 區塊檔案中指定。雖然只有三個 worker 節點,但 IP 區塊檔案有四個位址。在叢集升級、更新和自動修復期間,需要額外的 IP 位址。

  • DNS 和 NTP 伺服器是在 hostConfig 區段中指定。在本範例中,這些 DNS 和 NTP 伺服器適用於控制層節點和 worker 節點。這是因為 worker 節點具有靜態 IP 位址。如果 worker 節點是從 DHCP 伺服器取得 IP 位址,則這些 DNS 和 NTP 伺服器只會用於控制層節點。

  • 三個控制層節點的靜態 IP 位址,是在使用者叢集設定檔的 network.controlPlaneIPBlock 區段中指定。這個區塊不需要額外的 IP 位址。

  • Controlplane V2 已啟用。

  • masterNode.replicas 欄位設為 3,因此叢集會具備高可用性控制層。

  • 控制層 VIP 和 ingress VIP 與 worker 節點和控制層節點位於同一個 VLAN。

  • 為 LoadBalancer 類型 Service 預留的 VIP,是在使用者叢集設定檔的 loadBalancer.metalLB.addressPools 區段中指定。這些 VIP 與 worker 節點和控制層節點位於相同的 VLAN。本節指定的 VIP 組合必須包含 ingress VIP,且不得包含控制層 VIP。

  • 使用者叢集設定檔不含 vCenter 區段。因此使用者叢集會使用與管理員叢集相同的 vSphere 資源。

驗證設定檔

填寫使用者叢集設定檔後,請執行 gkectl check-config 指令,確認檔案有效。下列版本新增了進階使用者叢集對 gkectl check-config 指令的支援:1.32.700+、1.33.300+ 和 1.34.0 以上版本。如果要在進階叢集上安裝較低版本,指令會失敗。

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 資料夾與管理員叢集不同。

  • 使用者叢集使用的私人 Container Registry,與管理員叢集使用的私人登錄檔不同。

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.36.200-gke.118-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

控制台

開始使用

  1. 前往 Google Cloud 控制台的「Create VM cluster」(建立 VM 叢集) 頁面。

    前往「Create VM cluster」(建立 VM 叢集)

  2. 選取要建立叢集的 Google Cloud 專案。所選專案會做為機群主專案。這必須與管理員叢集註冊的專案相同。使用者叢集建立後,會自動註冊至所選專案的機群。

  3. 在「Choose your cluster type」(選擇叢集類型) 部分,選取「Create a user cluster for an existing admin cluster」(為現有的管理員叢集建立使用者叢集)。

叢集基本資訊

輸入叢集的基本資訊。

  1. 輸入使用者叢集的名稱。

  2. 在「Admin cluster」(管理員叢集) 下方,從清單中選取管理員叢集。如果您在建立管理員叢集時未指定名稱,系統會以 gke-admin-[HASH] 的形式產生名稱。如果您不認得管理員叢集名稱,請在管理員工作站上執行下列指令:

    KUBECONFIG=ADMIN_CLUSTER_KUBECONFIG
    kubectl get OnPremAdminCluster -n kube-system -o=jsonpath='{.items[0].metadata.name}'
    

    如果找不到要使用的管理員叢集,請參閱疑難排解一節:「叢集基本資訊」下拉式選單未顯示管理員叢集。

  3. 在「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中叢集的專屬 ID。

  4. 選取使用者叢集的 Google Distributed Cloud 版本。

  5. 身為叢集建立者,您會獲得叢集的叢集管理員權限。您也可以在「Authorization」(授權) 專區的「Cluster admin user」(叢集管理員使用者) 欄位中,輸入其他要管理叢集的使用者電子郵件地址。

    建立叢集時,GKE On-Prem API 會對叢集套用 Kubernetes 角色式存取控管 (RBAC) 政策,向您和其他管理員使用者授予 Kubernetes clusterrole/cluster-admin 角色,讓您能完整存取叢集和所有命名空間中的全部資源。

  6. 點選「下一步」,前往「控制層」部分。

控制層

「Control plane」(控制層) 區段中的所有欄位都會設為預設值。查看預設值,並視需要變更。

  1. 在「Control-plane node vCPUs」(控制層節點 vCPU) 欄位中,輸入使用者叢集各控制層節點的 vCPU 數量 (至少 4 個)。

  2. 在「Control-plane node memory」(控制層節點記憶體) 欄位中,輸入使用者叢集各控制層的記憶體大小 (以 MiB 為單位,至少須有 8192,且必須為 4 的倍數)。

  3. 在「Control-plane nodes」(控制層節點) 下方,選取使用者叢集的控制層節點數量。例如,您可以為開發環境選取 1 個控制層節點,並為高可用性 (HA) 正式環境選取 3 個控制層節點。

  4. 視需要選取「Automatic node resizing」(自動調整節點大小)。調整大小是指自動調整指派給節點的 vCPU 和記憶體資源。啟用後,使用者叢集的控制層節點會依據叢集中的 worker 節點數量調整大小。因此,當您在使用者叢集中新增更多 worker 節點時,控制層節點的大小也會增加。

  5. 在「Control plane node IPs」(控制層節點 IP) 區段中,輸入閘道、子網路遮罩和控制層節點的 IP 位址。

  6. 點選「下一步」,前往「網路」部分。

網路

在本節中,您將指定叢集節點、Pod 和 Service 的 IP 位址。使用者叢集中的每個節點都需要一個 IP 位址,並為叢集升級、更新和自動修復期間所需的臨時節點提供額外的 IP 位址。詳情請參閱「使用者叢集需要多少 IP 位址?」一文。

  1. 在「Node IPs」(節點 IP) 區段中,選取使用者叢集的「IP mode」(IP 模式)。請選取下列其中一個選項:

    • DHCP:如要讓叢集節點從 DHCP 伺服器取得 IP 位址,請選擇「DHCP」。

    • 靜態:如要為叢集節點提供靜態 IP 位址,或要設定手動負載平衡,請選擇「靜態」。

  2. 如果選取「DHCP」,請跳到下一個步驟,指定「Service and Pod CIDRs」(Service 和 Pod CIDR)。在「Static IP mode」(靜態 IP 模式) 中,提供下列資訊:

    1. 輸入使用者叢集的閘道 IP 位址。

    2. 輸入使用者叢集節點的「子網路遮罩」。

    3. 在「IP Addresses」(IP 位址) 區段中,輸入 IP 位址和使用者叢集中節點的主機名稱 (選用)。您可以輸入個別 IPv4 位址 (例如 192.0.2.1),或 IPv4 位址的 CIDR 區塊 (例如 192.0.2.0/24)。

      • 如果輸入 CIDR 區塊,請勿輸入主機名稱。

      • 如果輸入個別 IP 位址,可以選擇輸入主機名稱。如未輸入主機名稱,Google Distributed Cloud 會使用 vSphere 中的 VM 名稱做為主機名稱。

    4. 視需要按一下「+ 新增 IP 位址」,輸入更多 IP 位址。

  3. 在「Service and Pod CIDRs」(Service 和 Pod CIDR) 區段中,控制台會為 Kubernetes Service 和 Pod 提供下列位址範圍:

    • Service CIDR:10.96.0.0/20
    • Pod CIDR:192.168.0.0/16

    如要自行輸入位址範圍,請參閱「Pod 和 Service 的 IP 位址」一文,瞭解最佳做法。

  4. 如果您選取「Static IP mode」(靜態 IP 模式) 或「Enable control plane v2」(啟用控制層第 2 版),請在「Host config」(主機設定) 區段中指定下列資訊:

    1. 輸入 DNS 伺服器的 IP 位址。
    2. 輸入 NTP 伺服器的 IP 位址。
    3. 視需要輸入 DNS 搜尋網域。
  5. 點選「Next」(下一步),前往「Load balancer」(負載平衡器) 專區。

負載平衡器

選取要為叢集設定的負載平衡器。詳情請參閱「負載平衡器總覽」。

從清單中選取「負載平衡器類型」。

隨附於 MetalLB

使用 MetalLB 設定隨附的負載平衡功能。只有在管理員叢集使用 SeeSaw 或 MetalLB 時,您才能將 MetalLB 用於使用者叢集。這個選項只需要最少的設定。MetalLB 可直接在叢集節點上執行,不需要額外的 VM。如要進一步瞭解使用 MetalLB 的優點,以及與其他負載平衡選項的比較,請參閱「使用 MetalLB 隨附的負載平衡功能」。

  1. 在「Address pools」(位址集區) 區段中,設定至少一個位址集區,如下所示:

    1. 輸入位址集區的名稱。

    2. 輸入包含 ingress VIP 的 IP 位址範圍,格式可以是 CIDR 標記法 (例如 192.0.2.0/26) 或範圍標記法 (例如 192.0.2.64-192.0.2.72)。如要在集區中指定單一 IP 位址,請在 CIDR 標記法中使用 /32 (例如 192.0.2.1/32)。

    3. 如果 LoadBalancer 類型的 Service IP 位址與 Ingress VIP 不在相同的 IP 位址範圍內,請按一下「+ Add IP Address Range」(+ 新增 IP 位址範圍),然後輸入其他位址範圍。

      每個集區中的 IP 位址不得重疊,且必須與叢集節點位於同一個子網路。

    4. 在「Assignment of IP addresses」(指派 IP 位址) 下方,選取下列其中一個選項:

      • 自動:如要讓 MetalLB 控制器自動將位址集區中的 IP 位址指派給 LoadBalancer 類型的服務,請選擇這個選項

      • 手動:如果您打算使用集區中的位址,手動指定 LoadBalancer 類型 Service 的位址,請選擇這個選項。

    5. 如要讓 MetalLB 控制器不使用結尾為 .0 或 .255 的集區位址,請按一下「Avoid buggy IP addresses」(避免使用發生錯誤的 IP 位址)。這可避免有錯誤的消費者裝置誤丟棄傳送至這些特殊 IP 位址的流量。

    6. 完成後,請按一下「完成」。

  2. 視需要按一下「Add Address Pool」(新增位址集區)。

  3. 在「Virtual IPs」(虛擬 IP) 部分,輸入下列內容:

    • 控制層 VIP:傳送至使用者叢集 Kubernetes API 伺服器的流量所使用的目的地 IP 位址。使用者叢集的 Kubernetes API 伺服器會在管理員叢集的節點上執行。這個 IP 位址必須與管理員叢集節點位於相同的 L2 網域。請勿在「Address pools」(位址集區) 區段中新增這個位址。

    • Ingress VIP:要在負載平衡器上為 Ingress Proxy 設定的 IP 位址。您必須在「Address pools」(位址集區) 區段中,將這個位址新增至位址集區。

  4. 按一下「繼續」。

F5 BIG-IP

只有在管理員叢集使用 F5 BIG-IP 時,您才能為使用者叢集使用 F5 BIG-IP。請務必先安裝並設定 F5 BIG-IP ADC,再整合至 Google Distributed Cloud。

F5 使用者名稱和密碼會沿用自管理員叢集。

  1. 在「Virtual IPs」(虛擬 IP) 部分,輸入下列內容:

    • 控制層 VIP:傳送至 Kubernetes API 伺服器的流量所使用的目的地 IP 位址。

    • Ingress VIP:要在負載平衡器上為 Ingress Proxy 設定的 IP 位址。

  2. 在「Address」欄位中,輸入 F5 BIG-IP 負載平衡器的位址。

  3. 在「Partition」(分區) 欄位中,輸入您為使用者叢集建立的 BIG-IP 分區名稱。

  4. 在「sNAT pool name」(sNAT 集區名稱) 欄位中,輸入 SNAT 集區的名稱 (如適用)。

  5. 按一下「繼續」。

手動

只有在管理員叢集使用手動負載平衡器時,您才能為使用者叢集使用手動負載平衡器。在 Google Distributed Cloud 中,Kubernetes API 伺服器和 Ingress Proxy 分別由 LoadBalancer 類型的 Kubernetes Service 公開。請為這些 Service 自行選擇 30000 至 32767 範圍內的 nodePort 值。以 Ingress Proxy 來說,請提供同時適用於 HTTP 和 HTTPS 流量的 nodePort 值。詳情請參閱「啟用手動負載平衡模式」。

  1. 在「Virtual IPs」(虛擬 IP) 部分,輸入下列內容:

    • 控制層 VIP:傳送至 Kubernetes API 伺服器的流量所使用的目的地 IP 位址。

    • Ingress VIP:要在負載平衡器上為 Ingress Proxy 設定的 IP 位址。

  2. 在「Control-plan node port」(控制層節點通訊埠) 欄位中,輸入 Kubernetes API 伺服器的 nodePort 值。

  3. 在「Ingress HTTP node port」(Ingress HTTP 節點通訊埠) 欄位中,輸入傳送至 Ingress Proxy 的 HTTP 流量 nodePort 值。

  4. 在「Ingress HTTPS node port」(Ingress HTTPS 節點通訊埠) 欄位中,輸入傳送至 Ingress Proxy 的 HTTPS 流量 nodePort 值。

  5. 在「Konnectivity server node port」(Konnectivity 伺服器節點通訊埠) 欄位中,輸入 Konnectivity 伺服器的 nodePort 值。

  6. 按一下「繼續」。

功能與特色

這個部分會顯示叢集啟用的功能和作業。

  1. 下列功能會自動啟用,且無法停用:

  2. 下列功能預設為啟用,但您可以停用:

    • 啟用 vSphere CSI 驅動程式:又稱 vSphere Container Storage 外掛程式。Container Storage Interface (CSI) 驅動程式會在部署於 vSphere 的 Kubernetes 叢集中執行,以便在 vSphere 儲存空間中佈建永久磁碟區。詳情請參閱「使用 vSphere Container Storage Interface 驅動程式」。

    • 啟用反相依性群組:系統會自動為使用者叢集節點建立 VMware Distributed Resource Scheduler (DRS) 反相依性規則,使其分散於資料中心內至少 3 個實體主機上。確認 vSphere 環境符合需求條件。

  3. 點選「Next」(下一步),設定節點集區

節點集區

建立的叢集至少會含有一個節點集區。節點集區是在這個叢集建立的一組 worker 節點範本。詳情請參閱「建立及管理節點集區 」。

  1. 在「Node pool defaults」(節點集區預設值) 部分,完成下列操作:

    1. 輸入節點集區名稱,或接受「default-pool」做為名稱。
    2. 輸入集區中每個節點的 vCPUs 數量 (每個使用者叢集 worker 至少須有 4 個)。
    3. 輸入集區中每個節點的記憶體大小 (以 MiB 為單位,每個使用者叢集 worker 節點至少須有 8192 MiB,且必須為 4 的倍數)。
    4. 在「Nodes」(節點) 欄位中,輸入集區中的節點數量 (至少 3 個)。如果您在「Networking」(網路) 區段中輸入「Node IPs」(節點 IP) 的靜態 IP 位址,請確認您輸入的 IP 位址數量足以容納這些使用者叢集節點。
    5. 選取「OS image type」(OS 映像檔類型):「Ubuntu」、「Ubuntu Containerd」或「COS」。
    6. 輸入「Boot disk size」(開機磁碟大小),以 GiB 為單位 (至少 40 GiB)。
    7. 如果您使用 MetalLB 做為負載平衡器,則必須在至少一個節點集區中啟用 MetalLB。您可以保留「Use this node pool for MetalLB load balancing」(使用這個節點集區執行 MetalLB 負載平衡) 選取狀態,或新增其他節點集區用於 MetalLB。
  2. 在「Node pool metadata (optional)」(節點集區中繼資料 (選用)) 區段中,如要新增 Kubernetes 標籤和污點,請執行下列操作:

    1. 按一下「+ Add Kubernetes Labels」(+ 新增 Kubernetes 標籤)。輸入標籤的「Key」(鍵) 和「Value」(值)。視需要重複上述步驟。
    2. 按一下「+ Add Taint」(+ 新增污點)。輸入污點的「Key」(鍵)、「Value」(值)和「Effect」(影響)。視需要重複上述步驟。
  3. 按一下「Verify and Complete」(驗證並完成),建立使用者叢集。建立使用者叢集需要 15 分鐘以上。控制台會顯示狀態訊息,驗證設定並在資料中心建立叢集。

    如果驗證設定時發生錯誤,控制台會顯示錯誤訊息,說明如何修正設定問題,並再次嘗試建立叢集。

    如要進一步瞭解可能發生的錯誤和修正方式,請參閱「排解 Google Cloud 控制台中的使用者叢集建立問題」。

gcloud CLI

您可以使用下列指令建立使用者叢集:

gcloud container vmware clusters create

建立叢集後,您必須使用下列指令建立至少一個節點集區:

gcloud container vmware node-pools create

建立叢集和節點集區的大多數旗標,都對應至使用者叢集設定檔中的欄位。為協助您快速上手,可以先在範例部分測試完整指令。

收集資訊

收集建立叢集所需的資訊。

  1. 取得管理員叢集的名稱和機群成員資格位置:

    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
    

    位置會指定機群和 Connect 服務的執行位置。1.28 版之前建立的管理員叢集,是由全域 Fleet 和 Connect 服務管理。在 1.28 以上版本中,您可以在建立管理員叢集時指定 global 或 Google Cloud 區域。在下列範例指令中,您可以使用 --admin-cluster-membership-location 旗標指定區域。

  2. 取得可用版本清單:

    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:管理員叢集的機群成員資格區域。可以是全域或 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 伺服器取得叢集 worker 節點的 IP 位址。

只有在管理員叢集使用 MetalLB 時,您才能為使用者叢集使用 MetalLB。這個負載平衡選項只需要最少的設定。MetalLB 可直接在叢集節點上執行,不需要額外的 VM。如要進一步瞭解使用 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中叢集的專屬 ID。

  • 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:叢集內 Service 使用的 IP 位址範圍,格式為 CIDR。至少須為 /24 範圍。

    範例:--service-address-cidr-blocks=10.96.0.0/20

  • POD_CIDR_BLOCK:叢集內 Pod 要使用的 IP 位址範圍,格式為 CIDR。至少須為 /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-ips1:如果設為 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:您選擇在負載平衡器上設定的 IP 位址,用於使用者叢集的 Kubernetes API 伺服器。

    範例:--control-plane-vip=203.0.113.3

  • INGRESS_VIP:您選擇在 Ingress Proxy 負載平衡器上設定的 IP 位址。

    範例:--ingress-vip=10.251.134.80

    Ingress VIP 的 IP 位址必須位於其中一個 MetalLB 位址集區。

  • --enable-dhcp:如要讓叢集節點從您提供的 DHCP 伺服器取得 IP 位址,請加入 --enable-dhcp。如要為叢集節點提供靜態 IP 位址,或設定手動負載平衡,請勿加入這個旗標。

MetalLB 和靜態 IP

這個範例說明如何使用隨附的 MetalLB 負載平衡器建立使用者叢集,並為叢集 worker 節點指派靜態 IP 位址。

只有在管理員叢集使用 MetalLB 時,您才能為使用者叢集使用 MetalLB。這個負載平衡選項只需要最少的設定。MetalLB 可直接在叢集節點上執行,不需要額外的 VM。如要進一步瞭解使用 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 叢集內 worker 節點的四個 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中叢集的專屬 ID。

  • 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:叢集內 Service 使用的 IP 位址範圍,格式為 CIDR。至少須為 /24 範圍。

    範例:--service-address-cidr-blocks=10.96.0.0/20

  • POD_CIDR_BLOCK:叢集內 Pod 要使用的 IP 位址範圍,格式為 CIDR。至少須為 /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-ips1:如果設為 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:您選擇在負載平衡器上設定的 IP 位址,用於使用者叢集的 Kubernetes API 伺服器。

    範例:--control-plane-vip=203.0.113.3

  • INGRESS_VIP:您選擇在 Ingress Proxy 負載平衡器上設定的 IP 位址。

    範例:--ingress-vip=10.251.134.80

    Ingress VIP 的 IP 位址必須位於其中一個 MetalLB 位址集區。

  • --static-ip-config-ip-blocks:指定預設閘道、子網路遮罩,以及使用者叢集中 worker 節點的靜態 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

本範例說明如何建立具有手動負載平衡器的使用者叢集,並為叢集 worker 節點指派靜態 IP 位址。

只有在管理員叢集使用手動負載平衡器時,您才能為使用者叢集使用手動負載平衡器。在 Google Distributed Cloud 中,Kubernetes API 伺服器、Ingress Proxy 和記錄匯總外掛程式服務,都是由 LoadBalancer 類型的 Kubernetes Service 公開。請為這些 Service 選擇 30000 至 32767 範圍內的 nodePort 值。以 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 叢集中 worker 節點的四個 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中叢集的專屬 ID。

  • 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:叢集內 Service 使用的 IP 位址範圍,格式為 CIDR。至少須為 /24 範圍。

    範例:--service-address-cidr-blocks=10.96.0.0/20

  • POD_CIDR_BLOCK:叢集內 Pod 要使用的 IP 位址範圍,格式為 CIDR。至少須為 /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:傳送至輸入 Proxy 的 HTTP 流量 nodePort 值 (例如 30243)。

  • INGRESS_HTTPS_NODE_PORT:傳送至輸入 Proxy 的 HTTPS 流量 nodePort 值 (例如 30879)。

  • --static-ip-config-ip-blocks:指定預設閘道、子網路遮罩,以及使用者叢集中 worker 節點的靜態 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 和記憶體資源。啟用後,使用者叢集的控制層節點會依據使用者叢集內 worker 節點的數量調整大小。因此,當您在使用者叢集中新增更多 worker 節點時,控制層節點的大小也會增加。

  • --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 Container Storage Interface (CSI) 元件會部署在使用者叢集中。CSI 驅動程式會在部署於 vSphere 的原生 Kubernetes 叢集運作,在 vSphere 儲存空間佈建永久磁碟區。詳情請參閱「使用 vSphere Container Storage Interface 驅動程式」。如果不想部署 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 作業」。

    建立使用者叢集需要 15 分鐘以上。您可以在 Google Cloud 控制台的「GKE clusters」(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_cgv2 或 cos_cgv2。

  • BOOT_DISK_SIZE:集區中每個節點的開機磁碟大小 (以 GiB 為單位)。下限為 40 GiB。

  • vCPUs:節點集區中每個節點的 vCPU 數量。最低值為 4。

  • MEMORY:集區中每個節點的記憶體大小,以 MiB 為單位。每個使用者叢集 worker 節點至少須有 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.36.200-gke.118 \
    --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.36.200-gke.118 \
    --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.36.200-gke.118 \
    --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

事前準備

  1. 取得管理員叢集的名稱和機群成員資格位置:

    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
    

    位置會指定機群和 Connect 服務的執行位置。1.28 版之前建立的管理員叢集,是由全域 Fleet 和 Connect 服務管理。在 1.28 以上版本中,您可以在建立叢集時指定 global 或 Google Cloud 區域。

  2. 取得可用版本清單:

    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:管理員叢集的機群成員資格區域。可以是全域或 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 註解。

範例

您可以使用下列基本設定範例,透過 Terraform 的 Google 供應商,建立具有套裝 MetalLB 負載平衡器和一個節點集區的使用者叢集。

建立使用者叢集時,Terraform 設定檔必須至少包含一個 google_gkeonprem_vmware_node_pool 資源,才能建立節點集區。不過,Terraform 必須先完成上游 google_gkeonprem_vmware_cluster 使用者叢集資源的所有作業,才能建立節點集區資源。如要強制執行這項依附元件,請在 google_gkeonprem_vmware_node_pool 資源中加入 depends_on 陳述式,如以下 main.tf 檔案範例所示。如要進一步瞭解如何使用 depends_on 指定資源依附元件,請參閱 Terraform 資源說明文件。

如要進一步瞭解這個範例,請點選下列連結:

main.tf:建立使用者叢集

範例 main.tf 包含下列模組和資源:

  • enable_google_apis_primary:在專案中啟用必要的 Google API。您只需要在專案中啟用 API 一次。如果專案已啟用 API,就不必在 Terraform 設定檔中加入這項設定。
  • google_project_service:在專案中啟用 GKE On-Prem API。與其他必要的 Google API 一樣,您只需要啟用 GKE On-Prem API 一次。
  • gcloud_update_admin_cluster_platform_controller:更新管理員叢集上的平台控制器。這是升級使用者叢集的必要步驟。如果管理員叢集已是正確版本,這個模組就不會進行任何變更。雖然這個模組為選用,但如果管理員叢集上的平台控制器版本與您為使用者叢集指定的版本不符,使用者叢集建立作業就會失敗。
  • google_gkeonprem_vmware_cluster:建立使用者叢集。這是必要資源。使用者叢集已在 GKE On-Prem API 中註冊,並與管理員叢集註冊至相同的機群。這個範例會使用隨附的 MetalLB 建立叢集。google_gkeonprem_vmware_cluster 參考文件提供設定手動負載平衡器的範例。
  • google_gkeonprem_vmware_node_pool:建立節點集區。Terraform 設定檔中必須有這項資源。新建立的使用者叢集必須至少有一個節點集區,才能轉換至健康狀態。
module "enable_google_apis_primary" {
  source     = "terraform-google-modules/project-factory/google//modules/project_services"
  version    = "~> 18.0"
  project_id = var.project_id
  activate_apis = [
    "cloudresourcemanager.googleapis.com",
    "anthos.googleapis.com",
    "anthosgke.googleapis.com",
    "container.googleapis.com",
    "gkeconnect.googleapis.com",
    "gkehub.googleapis.com",
    "serviceusage.googleapis.com",
    "stackdriver.googleapis.com",
    "monitoring.googleapis.com",
    "logging.googleapis.com",
    "iam.googleapis.com",
    "compute.googleapis.com",
    "anthosaudit.googleapis.com",
    "opsconfigmonitoring.googleapis.com",
    "file.googleapis.com",
    "connectgateway.googleapis.com"
  ]
  disable_services_on_destroy = false
}

# Enable GKE OnPrem API
resource "google_project_service" "default" {
  project            = var.project_id
  service            = "gkeonprem.googleapis.com"
  disable_on_destroy = false
}

# This module is used to update the platform controller on your admin cluster. This
# is a necessary step for the user cluster version update. If the admin cluster is
# already on the correct version, then this module does not change anything
module "gcloud_update_admin_cluster_platform_controller" {
  source                = "terraform-google-modules/gcloud/google"
  version               = "~> 3.0"
  platform              = "linux"
  create_cmd_entrypoint = "gcloud"
  create_cmd_body       = <<EOT
    beta container vmware admin-clusters               \
    update ${var.admin_cluster_name}                   \
    --required-platform-version=${var.on_prem_version} \
    --project ${var.project_id}                        \
    --location ${var.region}
  EOT
}

# Create an anthos vmware user cluster and enroll it with the gkeonprem API
resource "google_gkeonprem_vmware_cluster" "default" {
  name        = var.cluster_name
  description = "Anthos VMware user cluster with MetalLB"
  provider    = google-beta
  depends_on = [
    google_project_service.default,
    module.gcloud_update_admin_cluster_platform_controller
  ]
  location                 = var.region
  on_prem_version          = var.on_prem_version
  admin_cluster_membership = "projects/${var.project_id}/locations/global/memberships/${var.admin_cluster_name}"
  network_config {
    service_address_cidr_blocks = ["10.96.0.0/12"]
    pod_address_cidr_blocks     = ["192.168.0.0/16"]
    dhcp_ip_config {
      enabled = true
    }
  }
  control_plane_node {
    cpus     = var.control_plane_node_cpus
    memory   = var.control_plane_node_memory
    replicas = var.control_plane_node_replicas
  }
  load_balancer {
    vip_config {
      control_plane_vip = var.control_plane_vip
      ingress_vip       = var.ingress_vip
    }
    metal_lb_config {
      dynamic "address_pools" {
        for_each = var.lb_address_pools
        content {
          pool      = address_pools.value.name
          addresses = address_pools.value.addresses
        }
      }
    }
  }
  authorization {
    dynamic "admin_users" {
      for_each = var.admin_user_emails
      content {
        username = admin_users.value
      }
    }
  }
}

# Create a node pool for the anthos vmware user cluster
resource "google_gkeonprem_vmware_node_pool" "default" {
  name           = "${var.cluster_name}-nodepool"
  display_name   = "Nodepool for ${var.cluster_name}"
  provider       = google-beta
  vmware_cluster = google_gkeonprem_vmware_cluster.default.name
  location       = var.region
  config {
    replicas             = 3
    image_type           = "ubuntu_containerd"
    enable_load_balancer = true
  }
  depends_on = [
    google_gkeonprem_vmware_cluster.default
  ]
}

如需更多資訊和其他範例,請參閱 google_gkeonprem_vmware_cluster 參考文件。

在 terraform.tfvars 中設定變數

範例提供範例變數檔案,可傳遞至 main.tf,說明如何設定隨附的 MetalLB 負載平衡器,並讓叢集節點從您提供的 DHCP 伺服器取得 IP 位址。

  1. 複製 anthos-samples 存放區,然後變更為 Terraform 範例所在的目錄:

    git clone https://github.com/GoogleCloudPlatform/anthos-samples
    cd anthos-samples/anthos-onprem-terraform/avmw_user_cluster_metallb
    
  2. 建立 terraform.tfvars.sample 檔案的副本:

    cp terraform.tfvars.sample terraform.tfvars
    
  3. 修改 terraform.tfvars 中的參數值。

    project_id                  = "FLEET_HOST_PROJECT_ID"
    region                      = "REGION"
    admin_cluster_name          = "ADMIN_CLUSTER_NAME"
    on_prem_version             = "VERSION"
    admin_user_emails           = ["YOUR_EMAIL_ADDRESS", "ADMIN_2_EMAIL_ADDRESS"]
    cluster_name                = "avmw-user-cluster-metallb"
    control_plane_node_cpus     = 4
    control_plane_node_memory   = 8192
    control_plane_node_replicas = 3
    control_plane_vip           = "CONTROL_PLANE_VIP"
    ingress_vip                 = "INGRESS_VIP"
    lb_address_pools            = [
        { name = "lbpool_1", addresses = ["10.200.0.51-10.200.0.70"] }
    ]
    

    以下清單說明這些變數:

    • project_id:要建立叢集的專案 ID。指定的專案也會做為機群主專案。這必須與管理員叢集註冊的專案相同。使用者叢集建立後,會自動註冊至所選專案的機群。叢集建立後,即無法變更機群主專案。

    • region: Google Cloud GKE On-Prem API (gkeonprem.googleapis.com)、Fleet 服務 (gkehub.googleapis.com) 和 Connect 服務 (gkeconnect.googleapis.com) 執行的區域。指定 us-west1 或其他支援的地區。

    • admin_cluster_name:管理使用者叢集的管理員叢集名稱。範例假設管理員叢集使用 global 做為區域。如果您有區域管理員叢集:

      1. 在文字編輯器中開啟 main.tf。
      2. 搜尋 admin_cluster_membership,如下所示:
      admin_cluster_membership = "projects/${var.project_id}/locations/global/memberships/${var.admin_cluster_name}"
      1. 將 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:您選擇在負載平衡器上設定的虛擬 IP 位址 (VIP),用於使用者叢集的 Kubernetes API 伺服器。

    • ingress_vip:您選擇在負載平衡器上為輸入 Proxy 設定的 IP 位址。

    • lb_address_pools:定義 MetalLB 負載平衡器所用位址集區的地圖清單。Ingress VIP 必須位於其中一個集區。指定下列屬性:

      • name:集區名稱。
      • addresses:以 CIDR 標記法或連字號範圍格式表示的位址範圍。如要在集區中指定單一 IP 位址 (例如 Ingress VIP),請使用 CIDR 標記法中的 /32,例如:192.0.2.1/32。

      將範例 IP 位址替換為您的值,並視需要新增其他位址集區。

  4. 儲存 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 進行下列變更:

  1. 在 resource 區塊中加入以下這行程式碼:

      enable_control_plane_v2 = "true"
    
  2. 將 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"
          }
        }
      }
    
  3. 將 netmask 和 gateway 的值替換為網路中的 IP 位址。將 ip 和 hostname 替換為控制層節點的 IP 位址。

選用:啟用進階叢集

在 1.32 以上版本中,使用 Terraform 建立的使用者叢集預設不會啟用進階叢集。如要啟用進階叢集,請將下列頂層欄位新增至 main.tf:

enable_advanced_cluster = true

啟用進階叢集前,請務必詳閱執行進階叢集時的差異。

選用:worker 節點 IP 位址定址模式

本節說明您可以在 main.tf 中進行的一些選用設定變更。進行變更前,請先備份 main.tf:

cp main.tf main.tf.bak

根據預設,main.tf 會設定叢集,使用您提供的 DHCP 伺服器,將 IP 位址指派給叢集的 worker 節點。如要設定 DHCP,請在 network_config 區塊中加入 dhcp_config 對應。如要為 worker 節點提供靜態 IP 位址,請對 main.tf 進行下列變更:

  1. 取代 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"
            }
          }
        }
      }
    
  2. 將下列內容替換為您的值:

    • service_address_cidr_blocks:叢集內 Service 使用的 IP 位址範圍,格式為 CIDR。至少須為 /24 範圍。

    • pod_address_cidr_blocks:叢集內 Pod 使用的 IP 位址範圍,格式為 CIDR。至少須為 /18 範圍。

    • dns_servers:VM 的 DNS 伺服器 IP 位址清單。

    • ntp_servers:VM 可使用的時間伺服器 IP 位址清單。

    • 在 static_ip_config 區塊中,將 netmask 和 gateway 的值替換為網路位址。將 ip 和 hostname 替換為 worker 節點的 IP 位址和主機名稱。

建立叢集和一個節點集區

  1. 初始化並建立 Terraform 方案:

    terraform init
    

    Terraform 會安裝所有必要程式庫,例如 Google Cloud 供應商。

  2. 查看設定,並視需要進行變更:

    terraform plan
    
  3. 套用 Terraform 計畫,建立使用者叢集:

    terraform apply
    

    建立使用者叢集約需 15 分鐘以上,建立節點集區則需另外 15 分鐘。您可以在 Google Cloud 控制台的「GKE clusters」(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 ...
}

疑難排解

請參閱「排解叢集建立和升級問題」。

後續步驟