Distributed Cloud 軟體僅適用於裸機,可讓您在 OpenStack 虛擬機器 (VM) 上部署混合式叢集。這項部署作業可讓您整合 OpenStack 負載平衡即服務 (LBaaS) 和 OpenStack 雲端服務供應商 for Kubernetes,在 OpenStack 環境外公開 Kubernetes 服務。
Google Distributed Cloud 不會自動佈建 OpenStack VM。如要查看 VM 需求並設定雙節點概念驗證環境,請參閱「建立 OpenStack VM 的 Terraform 範例」。雖然這項部署作業示範的是 OpenStack Ussuri,但 Google Distributed Cloud 不需要特定 OpenStack 版本。如需正式環境,請參閱安裝必要條件。
部署範例
本指南提供在 OpenStack 上部署裸機叢集的範例,該叢集會與 OpenStack LBaaS 整合。您必須瞭解並調整指令和設定值,以符合 OpenStack 環境。下圖顯示部署結果:

必要條件
- OpenStack Ussuri 已部署 LBaaS v2 且可正常運作
- 用於下載 bmctl 工具的服務帳戶
- 按照範例部署作業所示,設定 OpenStack VM 和網路。如要在 OpenStack 環境中佈建類似的設定,可以選擇下列選項:
- 使用這個 Terraform 指令碼自動佈建資源。
- 手動佈建資源。
- 下列 OpenStack VM 必須準備就緒,且可透過 SSH 存取:
| 名稱 | IP 位址 | 目的 |
|---|---|---|
| abm-ws |
10.200.0.10 (私人 IP) floating_ip (公開 IP) |
做為管理員工作站:用於將 Google Distributed Cloud 部署至其他機器。 |
| abm-cp1 | 10.200.0.11 | 叢集控制層:這個主機執行 Kubernetes 控制層和負載平衡器。 |
| abm-w1 | 10.200.0.12 | 叢集 worker 節點:這個主機負責執行 Kubernetes 工作負載。 |
部署 Google Distributed Cloud
本節說明如何完成下列工作:
安裝所需工具
擷取
abm-wsVM 的公開浮動 IP 位址:export OPENSTACK_IPS=$(openstack floating ip list --tags=abm_ws_floatingip -f json) export FLOATING_IP=$(jq -c '.[]."Floating IP Address"' <<< $OPENSTACK_IPS | tr -d '"')確認您可以使用 SSH 安全連線至
abm-wsVM,並以root使用者身分登入。Terraform 指令碼設定的root使用者為abm。ssh ubuntu@$FLOATING_IP sudo -u abm -i確認您可以使用 SSH 連線至其他節點:
ssh abm@10.200.0.11 'echo SSH to $HOSTNAME succeeded' ssh abm@10.200.0.12 'echo SSH to $HOSTNAME succeeded'上述指令的預期回應如下:
SSH to abm-cp1 succeeded SSH to abm-w1 succeeded在
abm-wsVM 下載kubectl指令列公用程式。curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl" chmod +x kubectl sudo mv kubectl /usr/local/sbin/在
abm-wsVM 上安裝 Docker:curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh sudo usermod -aG docker abm newgrp docker
設定 Google Cloud 專案和服務帳戶
取得使用者帳戶的 Google Cloud CLI 存取憑證。
這些憑證會用於後續的
gcloud指令。gcloud auth login確認 Google Cloud CLI 已設為使用要註冊叢集的 Google Cloud 專案。
gcloud config set project PROJECT_ID在管理員工作站中,為使用者帳戶設定應用程式預設憑證 (ADC)。使用
bmctl工具建立叢集時,會用到這個值。gcloud auth application-default login建立
bm-gcr服務帳戶。您會使用這個服務帳戶從叢集進行驗證。gcloud iam service-accounts create bm-gcr gcloud iam service-accounts keys create bm-gcr.json \ --iam-account=bm-gcr@PROJECT_ID.iam.gserviceaccount.com啟用必要的 API:
gcloud services enable \ anthos.googleapis.com \ anthosaudit.googleapis.com \ anthosgke.googleapis.com \ cloudresourcemanager.googleapis.com \ connectgateway.googleapis.com \ container.googleapis.com \ gkeconnect.googleapis.com \ gkehub.googleapis.com \ gkeonprem.googleapis.com \ iam.googleapis.com \ logging.googleapis.com \ monitoring.googleapis.com \ opsconfigmonitoring.googleapis.com \ serviceusage.googleapis.com \ stackdriver.googleapis.com \ storage.googleapis.com將額外權限授予
bm-gcr服務帳戶。新增權限後,您就不必為個別服務建立多個服務帳戶。gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/gkehub.connect" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/gkehub.admin" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/logging.logWriter" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.dashboardEditor" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/stackdriver.resourceMetadata.writer" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/opsconfigmonitoring.resourceMetadata.writer"
建立叢集設定檔
下載
bmctl指令列公用程式。mkdir baremetal && cd baremetal gcloud storage cp gs://anthos-baremetal-release/bmctl/1.36.200-gke.118/linux-amd64/bmctl . chmod a+x bmctl sudo mv bmctl /usr/local/sbin/為叢集建立叢集設定檔:
bmctl create config -c CLUSTER_NAME更新設定檔,以便與 OpenStack 搭配使用:
cat > bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME.yaml << EOB --- gcrKeyPath: /home/abm/bm-gcr.json sshPrivateKeyPath: /home/abm/.ssh/id_rsa gkeConnectAgentServiceAccountKeyPath: /home/abm/bm-gcr.json gkeConnectRegisterServiceAccountKeyPath: /home/abm/bm-gcr.json cloudOperationsServiceAccountKeyPath: /home/abm/bm-gcr.json --- apiVersion: v1 kind: Namespace metadata: name: openstack-cluster-ns --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: CLUSTER_NAME namespace: openstack-cluster-ns annotations: baremetal.cluster.gke.io/external-cloud-provider: "true" spec: type: hybrid anthosBareMetalVersion: 1.36.200-gke.118 gkeConnect: projectID: PROJECT_ID controlPlane: nodePoolSpec: clusterName: CLUSTER_NAME nodes: - address: 10.200.0.11 clusterNetwork: pods: cidrBlocks: - 192.168.0.0/16 services: cidrBlocks: - 10.96.0.0/20 loadBalancer: mode: manual ports: controlPlaneLBPort: 443 vips: controlPlaneVIP: 10.200.0.101 ingressVIP: 10.200.0.102 clusterOperations: location: us-central1 projectID: PROJECT_ID storage: lvpNodeMounts: path: /mnt/localpv-disk storageClassName: node-disk lvpShare: numPVUnderSharedPath: 5 path: /mnt/localpv-share storageClassName: standard nodeAccess: loginUser: abm --- apiVersion: baremetal.cluster.gke.io/v1 kind: NodePool metadata: name: node-pool-1 namespace: openstack-cluster-ns spec: clusterName: CLUSTER_NAME nodes: - address: 10.200.0.12 EOB
建立叢集
建立叢集:
bmctl create cluster -c CLUSTER_NAME
執行 bmctl 指令後,系統會開始設定新的混合式叢集。包括對節點執行預檢、建立管理員和使用者叢集,以及使用連線代理程式向 Google Cloud 註冊叢集。整個設定程序最多可能需要 15 分鐘。建立叢集時,您會看到下列輸出內容:
Please check the logs at bmctl-workspace/CLUSTER_NAME/log/create-cluster-20210926-020741/create-cluster.log
[2021-09-26 02:07:59+0000] Creating bootstrap cluster... ⠦ kind get kubeconfig --name bmctl > ~/.kube/config && k get pods --all-namespaces
[2021-09-26 02:07:59+0000] Creating bootstrap cluster... OK
[2021-09-26 02:10:48+0000] Installing dependency components... OK
[2021-09-26 02:13:42+0000] Waiting for preflight check job to finish... OK
[2021-09-26 02:15:22+0000] - Validation Category: machines and network
[2021-09-26 02:15:22+0000] - [PASSED] gcp
[2021-09-26 02:15:22+0000] - [PASSED] node-network
[2021-09-26 02:15:22+0000] - [PASSED] 10.200.0.11
[2021-09-26 02:15:22+0000] - [PASSED] 10.200.0.11-gcp
[2021-09-26 02:15:22+0000] - [PASSED] 10.200.0.12
[2021-09-26 02:15:22+0000] - [PASSED] 10.200.0.12-gcp
[2021-09-26 02:15:22+0000] Flushing logs... OK
[2021-09-26 02:15:23+0000] Applying resources for new cluster
[2021-09-26 02:15:24+0000] Waiting for cluster to become ready OK
[2021-09-26 02:25:04+0000] Writing kubeconfig file
[2021-09-26 02:25:04+0000] kubeconfig of created cluster is at bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig, please run
[2021-09-26 02:25:04+0000] kubectl --kubeconfig bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig get nodes
[2021-09-26 02:25:04+0000] to get cluster node status.
[2021-09-26 02:25:04+0000] Please restrict access to this file as it contains authentication credentials of your cluster.
[2021-09-26 02:25:04+0000] Waiting for node pools to become ready OK
[2021-09-26 02:25:24+0000] Moving admin cluster resources to the created admin cluster
[2021-09-26 02:25:53+0000] Flushing logs... OK
[2021-09-26 02:25:53+0000] Deleting bootstrap cluster...
驗證叢集並與其互動
您可以在 bmctl-workspace 目錄中的 abm-ws VM 上找到叢集 kubeconfig 檔案。如要驗證部署作業,請完成下列步驟:
使用叢集設定檔的路徑設定
KUBECONFIG環境變數,以便在叢集上執行kubectl指令:export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig kubectl get nodes您應該會看到叢集的節點,輸出內容大致如下:
NAME STATUS ROLES AGE VERSION abm-cp1 Ready control-plane,master 5m24s v1.20.5-gke.1301 abm-w1 Ready <none> 2m17s v1.20.5-gke.1301
透過 Google Cloud 控制台登入叢集
如要在 Google Cloud 控制台觀察工作負載,必須登入叢集。如需操作說明和登入叢集的詳細資訊,請參閱「透過 Google Cloud 控制台使用叢集」。
清除所用資源
您可以在管理員工作站 (abm-ws) VM 中發出下列指令,清除叢集:
export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
bmctl reset --cluster CLUSTER_NAME
後續步驟
- 如要在新建立的叢集上安裝 OpenStack 雲端服務供應商,請按照「為 Kubernetes 設定 OpenStack 雲端服務供應商」指南操作。