如果您已使用 Terraform 管理 VMware 資源和內部部署 VMware 資源,請使用 Terraform 為 Google Distributed Cloud 軟體建立 VMware 專用的管理員叢集。 Google Cloud 您也可以使用 gkectl 或 Google Cloud console 建立管理員叢集。
事前準備
請確認您已設定管理員工作站,並能登入,如「建立管理員工作站」一文所述。
請確認服務帳戶的 JSON 金鑰檔案位於管理工作站。
查看 IP 位址規劃文件。確認您有足夠的 IP 位址,可供三個控制層節點和一個控制層 VIP 使用。如果您打算建立任何kubeception 使用者叢集,則必須為這些使用者叢集的控制層節點預留充足的 IP 位址。
請參閱負載平衡總覽,重新考慮要使用的負載平衡器類型。如果是手動負載平衡器,您必須先設定負載平衡器,才能建立管理員叢集。
如果您使用
gkectl建立管理員叢集,請決定要為 Google Distributed Cloud 元件使用公開或私有登錄檔。如要瞭解如何使用私密 Docker 登錄檔,請參閱privateRegistry。Terraform 和 Google Cloud 控制台都不支援使用私人 Docker 登錄檔做為系統元件。決定要在管理員叢集節點上執行的作業系統類型。
如果貴機構規定輸出流量必須通過 Proxy 伺服器,請務必將必要 API 和 Artifact Registry 位址加入許可清單。
在 1.29 以上版本中,預設會啟用伺服器端預檢。伺服器端預檢需要額外的防火牆規則。在「管理員叢集的防火牆規則」中,搜尋「Preflight checks」,並確認已設定所有必要的防火牆規則。伺服器端前置檢查會在啟動叢集上執行,而不是在管理員工作站本機執行。
程序總覽
建立管理員叢集前,您需要在管理工作站上執行 gkectl register bootstrap 指令。這個指令會在管理員工作站上部署 Docker 中的 Kubernetes (kind) 叢集。這個啟動叢集會託管建立管理員叢集所需的 Kubernetes 控制器。建立管理員叢集時,啟動叢集上的控制器會佈建節點、執行預檢,並將管理員叢集註冊至機群。管理員叢集建立完成後,啟動叢集就會自動刪除。
以下是使用 Terraform 建立管理員叢集的大致步驟:
填寫設定檔。使用 google_gkeonprem_vmware_admin_cluster 資源和下列範例,建立
main.tf設定檔。建立
bootstrap叢集。執行gkectl register bootstrap來建立啟動叢集。指令完成啟動叢集建立作業後,輸出內容會通知您完成管理員叢集設定。這個程序會持續執行,直到建立管理員叢集為止。建立管理員叢集。在另一個終端機視窗或可存取 GKE On-Prem API 的另一部電腦上,執行
terraform指令,按照您填寫的main.tf設定檔指定內容,建立新的管理員叢集。
填寫設定檔
以下範例說明如何使用 MetalLB 建立具有三個控制平面節點的高可用性 (HA) 管理員叢集。在 1.28 以上版本中,新的管理員叢集必須具備高可用性。因此,您必須將 control_plane_node.replicas 設為 3。
如需更多資訊和其他範例,請參閱 google_gkeonprem_vmware_admin_cluster 參考文件。如要瞭解如何使用私人登錄檔儲存系統映像檔,請參閱「設定私人容器登錄檔」。
在下列範例中填入預留位置變數,然後複製並貼到 main.tf。如果您使用 gkeadm 建立管理員工作站,請開啟管理員工作站設定檔,以便將 vCenter 區段中的值複製到對應的預留位置變數。
resource "google_gkeonprem_vmware_admin_cluster" "admin-cluster-metallb" {
provider = google-beta
name = "ADMIN_CLUSTER_NAME"
project = "PROJECT_ID"
location = "REGION"
description = "DESCRIPTION"
bootstrap_cluster_membership = "projects/PROJECT_ID/locations/REGION/memberships/bootstrap-ADMIN_CLUSTER_NAME"
on_prem_version = "VERSION"
image_type = "IMAGE_TYPE"
vcenter {
address = "VCENTER_ADDRESS"
datacenter = "DATA_CENTER"
cluster = "VCENTER_CLUSTER"
resource_pool = "RESOURCE_POOL"
datastore = "DATASTORE"
ca_cert_data = "CA_CERT_DATA"
}
network_config {
service_address_cidr_blocks = ["10.96.232.0/24"]
pod_address_cidr_blocks = ["192.168.0.0/16"]
vcenter_network = "NETWORK"
dhcp_ip_config {
enabled = true
}
host_config {
dns_servers = ["DNS_SERVERS"]
ntp_servers = ["NTP_SERVERS"]
}
ha_control_plane_config {
control_plane_ip_block {
gateway = "GATEWAY"
netmask = "NETMASK"
ips {
hostname = "CONTROL_PLANE_HOST_1"
ip = "CONTROL_PLANE_NODE_IP_1"
}
ips {
hostname = "CONTROL_PLANE_HOST_2"
ip = "CONTROL_PLANE_NODE_IP_2"
}
ips {
hostname = "CONTROL_PLANE_HOST_3"
ip = "CONTROL_PLANE_NODE_IP_3"
}
}
}
}
control_plane_node {
cpus = NUM_CPUS
memory = MEMORY
replicas = 3
}
load_balancer {
vip_config {
control_plane_vip = "CONTROL_PLANE_VIP"
}
metal_lb_config {
enabled = true
}
}
}
更改下列內容:
ADMIN_CLUSTER_NAME:管理叢集的名稱。名稱長度上限為 20 個字元。PROJECT_ID: Google Cloud 專案 ID。REGION:GKE On-Prem API (gkeonprem.googleapis.com)、Fleet 服務 (gkehub.googleapis.com) 和 Connect 服務 (gkeconnect.googleapis.com) 執行的 Google Cloud 區域。指定us-west1或其他支援的區域。location欄位對應於gkectl register bootstrap指令中的--location旗標。DESCRIPTION:管理員叢集的說明。VERSION:叢集的 Google Distributed Cloud 版本。 只有 1.28 以上版本支援使用 Terraform 建立叢集。您在此指定的版本必須與gkectl register bootstrap指令中--bundle-path旗標指定的 Bundle 版本相符。如需版本清單,請參閱 Google Distributed Cloud 版本。IMAGE_TYPE:要在管理員叢集節點上執行的 OS 映像檔類型。請指定下列其中一個值:「ubuntu_containerd」、「cos」、「ubuntu_cgv2」或「cos_cgv2」。VCENTER_ADDRESS:vCenter 伺服器位址。管理員工作站設定檔:使用
vCenter.credentials.address欄位中的值。vcenter.address欄位對應於gkectl register bootstrap指令中的--vcenter-address旗標。
DATA_CENTER:vCenter 資料中心的名稱。管理員工作站設定檔:使用
vCenter.datacenter欄位中的值。vcenter.datacenter欄位對應於gkectl register bootstrap指令中的--vcenter-datacenter旗標。
VCENTER_CLUSTER:vCenter 叢集的名稱。管理員工作站設定檔:使用
vCenter.cluster欄位中的值。vcenter.cluster欄位對應於gkectl register bootstrap指令中的--vcenter-cluster旗標。
RESOURCE_POOL:vCenter 資源集區的名稱或路徑。管理員工作站設定檔:使用
vCenter.resourcePool欄位中的值。vcenter.resource_pool欄位對應於gkectl register bootstrap指令中的--vcenter-resource-pool旗標。
DATASTORE:vCenter 資料儲存庫的名稱。您指定的值必須是名稱,而非路徑。如要輸入路徑,請新增下列欄位:folder = "FOLDER"管理員工作站設定檔:使用
vCenter.datastore欄位中的值。vcenter.datastore欄位對應於gkectl register bootstrap指令中的--vcenter-datastore旗標。
如要為叢集節點使用 VM 儲存空間政策,請移除
vcenter.datastore欄位,並改為新增vcenter.storage_policy_name。此外,請將--vcenter-storage-policy旗標新增至gkectl register bootstrap指令。你必須指定vcenter.datastore或vcenter.storage_policy_name的值,但不能同時指定兩者。FOLDER:要存放叢集 VM 的 vCenter 資料夾名稱。如果未使用資料夾,請移除這個欄位。管理員工作站設定檔:使用
vCenter.folder欄位中的值。vcenter.folder欄位對應於gkectl register bootstrap指令中的--vcenter-folder旗標。
CA_CERT_DATA:PEM 格式的 vCenter CA 憑證,但所有換行符都已替換為\n字串。執行下列指令,將換行符號替換為
\n:awk 'ORS="\\n" {print}' CA_CERT_PATH_LOCAL將
CA_CERT_PATH_LOCAL替換為 vCenter Server 的根 CA 憑證路徑。如果您使用gkeadm建立管理員工作站,可以使用管理員工作站設定檔中caCertPath欄位的值,也就是本機電腦上的路徑。gkeadm已將 CA 憑證檔案複製到管理員工作站。您必須在gkectl register bootstrap指令的--vcenter-ca-cert-path標記中指定管理員工作站路徑。複製上一個指令的輸出內容,然後貼到
CA_CERT_DATA預留位置變數。
NETWORK:vCenter 網路的名稱。管理員工作站設定檔:使用
vCenter.network欄位的值。network_config.vcenter_network欄位對應於gkectl register bootstrap指令中的--vcenter-network旗標。
GATEWAY:具有控制層叢集節點的子網路預設閘道 IP 位址。NETMASK:具有控制平面叢集節點的子網路網路遮罩。DNS_SERVERS:DNS 伺服器的 IP 位址。NTP_SERVERS:時間 (NTP) 伺服器的 IP 位址。在
control_plane_ip_block.ips區段中,輸入三個控制層節點的 IP 位址,並視需要輸入主機名稱。如果沒有輸入主機名稱,請從設定中移除hostname欄位。NUM_CPUS:管理員叢集中每個控制層節點的 vCPU 數量。至少要有 4 個。MEMORY:管理員叢集中每個控制平面節點的記憶體量,以 MiB 為單位。不得小於 8192,但建議為 16384。CONTROL_PLANE_VIP:您選擇在管理員叢集的 Kubernetes API 伺服器負載平衡器上設定的 IP 位址。
選用:設定私人註冊資料庫
根據預設,在叢集建立或升級期間,Google Distributed Cloud 會使用元件存取服務帳戶,從 gcr.io/gke-on-prem-release 提取系統映像檔。您也可以選擇提供自己的容器登錄伺服器,這樣系統映像檔就會改為從您的私人登錄伺服器提取。
如要設定私人登錄檔,請按照下列步驟操作:
在管理員叢集設定檔中新增下列項目:
private_registry_config { address = "ADDRESS" ca_cert = "CA_CERT" }更改下列內容:
ADDRESS:執行私人登錄檔的機器的 IP 位址或 FQDN (完整網域名稱)。CA_CERT:公開金鑰的 CA 憑證資料,但所有換行符號都已替換為字串\n。
執行下列指令,將換行符號替換為
\n:awk 'ORS="\\n" {print}' PUBLIC_KEY_PATH將
PUBLIC_KEY_PATH替換為公開金鑰的路徑。複製上一個指令的輸出內容,然後貼到
CA_CERT預留位置變數。
如果網路使用 Proxy 伺服器,請新增下列項目:
proxy { url: "PROXY_SERVER_ADDRESS" no_proxy: "BYPASS_LIST" }更改下列內容:
PROXY_SERVER_ADDRESS:Proxy 伺服器的 HTTP 位址。即使通訊埠編號與架構的預設通訊埠相同,也請一併加入。BYPASS_LIST:逗號分隔的 IP 位址、IP 位址範圍、主機名稱和網域名稱清單,這些項目不應透過 Proxy 伺服器。
範例:
url: "http://my-proxy.example.local:80" no_proxy: "192.0.2.0/24,my-host.example.local,198.51.100.0"當 Google Distributed Cloud 將要求傳送至這些位址、主機或網域時,要求會略過 Proxy 伺服器,直接傳送至目的地。
如要進一步瞭解如何使用私人登錄檔,包括一般叢集和進階叢集之間的差異,請參閱「設定私人容器登錄檔」。
驗證設定檔和方案
在 main.tf 所在目錄中執行下列指令:
初始化 Terraform:
terraform initTerraform 會安裝任何需要的程式庫,例如 Google Cloud 供應商。 視需要修正
maint.tf中的錯誤。建立 Terraform 計畫:
terraform plan -out tfplan檢查設定,並視需要進行變更。
套用計畫前,您必須先建立啟動程序叢集,如下一節所述。
建立啟動程序叢集
執行 gkectl register bootstrap 指令時,系統會提示您輸入 vCenter 帳戶的使用者名稱和密碼。請確認您已備妥憑證。如果您使用 gkeadm 建立管理員工作站,使用者名稱和密碼會位於 credential.yaml 檔案中。
使用 SSH 登入管理工作站。
使用 Google Cloud CLI 進行驗證:
gcloud auth login
執行下列指令來建立啟動程序叢集。許多旗標值與
main.tf欄位中的值相同。但請注意,指令會採用其他值,您必須在提供的預留位置變數中指定這些值。gkectl register bootstrap \ --target-cluster-name=ADMIN_CLUSTER_NAME \ --project-id=PROJECT_ID \ --location=REGION \ --vcenter-address=VCENTER_ADDRESS \ --vcenter-datacenter=DATA_CENTER \ --vcenter-cluster=VCENTER_CLUSTER \ --vcenter-resource-pool=RESOURCE_POOL \ --vcenter-datastore=DATASTORE \ --vcenter-network=NETWORK \ --vcenter-ca-cert-path=CA_CERT_PATH \ --bundle-path=BUNDLE_PATH \ --component-access-service-account-key-path=COMPONENT_ACCESS_SA_PATH \ --register-service-account-key-path=CONNECT_REGISTER_SA_PATH \ --stackdriver-service-account-key-path=LOG_MON_SA_PATH \ --cloud-audit-logging-service-account-key-path=CLOUD_AUDIT_SA_PATH \ --admin-kubeconfig-out=KUBECONFIG_NAME將下列項目替換為管理員工作站路徑:
CA_CERT_PATH:vCenter Server 根層級 CA 憑證的路徑。BUNDLE_PATH:套件檔案的路徑。如果您使用gkeadm建立管理員工作站,套裝組合檔案會位於/var/lib/gke/bundles/中。檔案名稱取決於 Google Distributed Cloud 版本,例如gke-onprem-vsphere-1.31.0-gke.889-full.tgz。COMPONENT_ACCESS_SA_PATH:元件存取服務帳戶的金鑰檔案路徑。CONNECT_REGISTER_SA_PATH:connect-register 服務帳戶的金鑰檔案路徑。LOG_MON_SA_PATH:記錄監控服務帳戶的金鑰檔案路徑。CLOUD_AUDIT_SA_PATH:稽核記錄服務帳戶的路徑。如果您未建立稽核記錄服務帳戶,請指定記錄監控服務帳戶的金鑰檔案路徑。KUBECONFIG_NAME:gkectl register bootstrap指令建立的 kubeconfig 檔案名稱。如果未指定這個旗標,指令會在目前的工作目錄中建立名為kubeconfig的檔案。如果已有名為kubeconfig的檔案,這項指令會覆寫該檔案。
視需要修改下列標記的指令:
- 如果您在
main.tf中指定資料夾,請新增下列旗標:--vcenter-folder=FOLDER - 如果您在
main.tf中指定了 VM 儲存空間政策,請移除--vcenter-datastore並新增下列標記:--vcenter-storage-policy-name=STORAGE_POLICY_NAME 如果管理工作站位於 Proxy 伺服器後方的網路上,請新增下列標記:
--proxy-url=PROXY_URL--no-proxy=NO_PROXY
更改下列內容:
- PROXY_URL:Proxy 伺服器的網址。
- NO_PROXY:以半形逗號分隔的網域和 IP 位址值,這些值會從 Proxy 排除。
如果新增標記,請務必加入指令列接續反斜線字元 (\)。
出現提示時,輸入 (或複製並貼上) vCenter 使用者名稱。使用者名稱不會回顯到畫面上。
出現提示時,請輸入 (或複製並貼上) vCenter 密碼。密碼不會回顯到畫面上。
這項指令會執行多項驗證。gkectl 成功建立啟動程序叢集後,畫面會顯示類似以下的輸出內容,為方便閱讀,部分內容已遭截斷:
Running workstation validations
- Validation Category: Workstation
- [SUCCESS] Workstation OS
- [SUCCESS] Workstation Hardware
- [SUCCESS] Workstation Package
- [SUCCESS] Workstation NTP
- [SUCCESS] Workstation Docker
...
All validation results were SUCCESS.
Unpacking GKE on-prem bundle: /var/lib/gke/bundles/gke-onprem-vsphere-1.31.0-gke.889-full.tgz
...
Successfully created and registered the bootstrap cluster
...
Waiting for preflight checks to run or OnPremAdminCluster to be applied...... -
這個程序會持續執行,直到建立管理員叢集為止。
如果在建立管理員叢集前結束 gkectl register bootstrap 指令,管理員叢集建立作業就會失敗,您必須使用下列指令刪除啟動叢集:
gkectl delete bootstrap \
--target-cluster-name=ADMIN_CLUSTER_NAME \
--project-id=PROJECT_ID \
--location=REGION \
--register-service-account-key-path=CONNECT_REGISTER_SA_PATH
建立管理員叢集
套用 Terraform 計畫,建立管理員叢集:
terraform apply "tfplan"
建立管理員叢集大約需要 15 分鐘以上。您可以在 Google Cloud 控制台的「GKE 叢集」頁面中查看叢集。
連線至管理員叢集
gkectl register bootstrap 指令會在管理員工作站上建立管理員叢集的 kubeconfig 檔案。如果您在執行 gkectl register bootstrap 時未指定 --admin-kubeconfig-out 旗標,指令會在您執行指令的目錄中,建立名為 kubeconfig 的 kubeconfig 檔案。
您必須限制這個 kubeconfig 的存取權,因為其中包含叢集的驗證憑證。
此外,您也可以透過連線閘道執行唯讀 kubectl 指令。
在安裝 gcloud CLI 的電腦上執行下列指令,取得可透過連線閘道存取叢集的
kubeconfig項目。gcloud container fleet memberships get-credentials ADMIN_CLUSTER_NAME \ --project=PROJECT_ID輸出結果會與下列內容相似:
Starting to build Gateway kubeconfig... Current project_id: PROJECT_ID A new kubeconfig entry "connectgateway_PROJECT_ID_global_ADMIN_CLUSTER_NAME" has been generated and set as the current context.您現在可以透過連線閘道執行唯讀
kubectl指令,例如:kubectl get pods -A如需管理員叢集的完整管理員權限,請參閱「設定連線閘道」。