本指南將逐步說明如何使用支援的作業系統,在 OpenStack 虛擬機器 (VM) 的裸機上安裝 Google Distributed Cloud (僅限軟體)。部署作業會使用指令碼,簡化在 OpenStack VM 中安裝混合式叢集的程序。本指南也會說明如何啟用負載平衡即服務 (LBaaS)。您可以搭配使用 OpenStack LBaaS 和 Kubernetes OpenStack Cloud Provider 與 Google Distributed Cloud,將 Kubernetes 服務公開給 OpenStack 叢集外部。
Google Distributed Cloud 不會自動佈建 OpenStack VM,且佈建 VM 不在本指南的範圍內。如要瞭解 VM 需求並查看部署範例,請參閱使用 Terraform 建立 OpenStack VM 的範例。
本指南包含以下章節:
部署 Google Distributed Cloud
在已安裝的叢集中,設定 Kubernetes 適用的 OpenStack 雲端服務供應商,以便與 Octavia 負載平衡器整合
驗證 Kubernetes 整合的 OpenStack 雲端服務供應商
本指南使用 OpenStack Ussuri,但 Google Distributed Cloud 並未規定 OpenStack 的特定版本。本指南使用 OpenStack VM,為您提供在 OpenStack 上執行的雙節點概念驗證環境。如要瞭解 Google Distributed Cloud 的正式版安裝需求,請參閱安裝必要條件。
部署範例
本指南提供在 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 | 叢集工作站節點: 這個主機會執行 Kubernetes 工作負載。 |
部署 Google Distributed Cloud
本節說明如何完成下列工作:
安裝所需工具
擷取
abm-ws
VM 的公開浮動 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-ws
VM,並以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-ws
VM 上下載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-ws
VM 上安裝 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.33.0-gke.799/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.33.0-gke.799 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
指令會開始設定新的混合式叢集。包括對節點執行前置檢查、建立管理員和使用者叢集,以及使用 Connect Agent 向 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...
驗證及與叢集互動
您可以在 abm-ws
VM 的 bmctl-workspace
目錄中找到叢集 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 Cloud Provider,請按照「為 Kubernetes 設定 OpenStack Cloud Provider」指南操作。