本指南引导您完成在具有受支持操作系统的 OpenStack 虚拟机 (VM) 上安装 Google Distributed Cloud on Bare Metal(纯软件)的示例。该部署使用脚本来简化在 OpenStack 虚拟机中安装混合集群的过程。该指南还介绍了一种启用负载均衡即服务 (LBaaS) 的方式。您可以将 OpenStack LBaaS 和 Kubernetes OpenStack Cloud Provider 与 Google Distributed Cloud 搭配使用,以在 OpenStack 集群外部公开 Kubernetes 服务。
Google Distributed Cloud 不会自动预配 OpenStack 虚拟机,并且预配虚拟机不在本指南的讨论范围内。如需了解虚拟机要求并查看部署示例,请查看创建 OpenStack 虚拟机的 Terraform 示例。
本指南包含以下部分:
部署 Google Distributed Cloud
在已安装的集群中配置适用于 Kubernetes 的 OpenStack Cloud Provider,以与 Octavia 负载均衡器集成
验证适用于 Kubernetes 的 OpenStack Cloud Provider 集成
本指南使用 OpenStack Ussuri,但 Google Distributed Cloud 对 OpenStack 的特定版本没有要求。本指南使用 OpenStack 虚拟机为您提供在 OpenStack 上运行的双节点概念验证环境。如需了解 Google Distributed Cloud 的生产安装要求,请参阅安装前提条件。
部署示例
本指南提供与 OpenStack LBaaS 集成的 OpenStack 上的裸金属集群部署示例。您必须了解并调整命令和配置值,以匹配您的 OpenStack 环境。下图显示了生成的部署:

前提条件
- 部署了 LBaaS v2 且可正常运行的 OpenStack Ussuri
- 用于下载 bmctl 工具的服务账号
- 如示例部署中所示配置 OpenStack 虚拟机和网络。如需在 OpenStack 环境中预配类似设置,您有以下选择:
- 使用此 Terraform 脚本自动预配资源。
- 手动预配资源。
- 以下 OpenStack 虚拟机必须准备就绪并可通过 SSH 使用:
| 名称 | IP 地址 | 用途 |
|---|---|---|
| abm-ws |
10.200.0.10 (专用 IP) float_ip (公共 IP) |
充当管理员工作站:用于将 Google Distributed Cloud 部署到其他机器。 |
| abm-cp1 | 10.200.0.11 | 集群控制平面:此主机运行 Kubernetes 控制平面和负载均衡器。 |
| abm-w1 | 10.200.0.12 | 集群工作器节点:此主机运行 Kubernetes 工作负载。 |
部署 Google Distributed Cloud
本指南介绍如何完成以下任务:
安装所需的工具
提取
abm-ws虚拟机的公共浮动 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虚拟机,并以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虚拟机上下载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虚拟机上安装 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.200-gke.70/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.200-gke.70 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 虚拟机的 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) 虚拟机中发出以下命令来清理集群:
export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
bmctl reset --cluster CLUSTER_NAME
后续步骤
- 如需在新创建的集群上安装 OpenStack Cloud Provider,请按照配置适用于 Kubernetes 的 OpenStack Cloud Provider 指南进行操作。