本指南将引导您在具有受支持操作系统的 OpenStack 虚拟机 (VM) 上部署 Google Distributed Cloud 的示例。该部署使用脚本来简化 OpenStack 虚拟机中混合集群的安装。本指南还介绍了一种启用负载均衡即服务 (LBaaS) 的方法。您可以使用 OpenStack LBaaS 和 Google Distributed Cloud 中的 Kubernetes OpenStack Cloud Provider 在 OpenStack 集群外部公开 Kubernetes 服务。
Google Distributed Cloud 不会自动预配 OpenStack 虚拟机,预配虚拟机超出了本指南的讨论范围。如需了解虚拟机要求并查看部署示例,请查看创建 OpenStack 虚拟机的 Terraform 示例。
本指南包含以下部分:
部署 Google Distributed Cloud
在 Google Distributed Cloud 中配置适用于 Kubernetes 的 OpenStack Cloud Provider,以与 Octavia 负载均衡器集成
验证适用于 Kubernetes 的 OpenStack Cloud Provider 集成
本指南使用 OpenStack Ussuri,但 Google Distributed Cloud 对 OpenStack 的特定版本没有要求。本指南使用 OpenStack 虚拟机提供在 OpenStack 上运行的双节点 Google Distributed Cloud 概念验证环境。如需了解如何创建具有高可用性控制平面的生产环境,请参阅 Google Distributed Cloud 文档了解生产环境要求。
部署示例
本指南提供与 OpenStack LBaaS 集成的 OpenStack 上的 Google Distributed Cloud 部署示例。您必须了解并调整命令和配置值,以匹配您的 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 | GKE 集群控制平面:此主机运行 Kubernetes 控制平面和负载均衡器。 |
abm-w1 | 10.200.0.12 | GKE 集群工作器节点:此主机运行 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 Distributed Cloud 的 Google Cloud 项目。
gcloud config set project PROJECT_ID
在管理员工作站中为您的用户账号设置应用默认凭据 (ADC)。使用
bmctl
工具创建集群时将需要使用此凭据。gcloud auth application-default login
创建
bm-gcr
服务账号。您将使用此服务账号从 Google Distributed Cloud 集群进行身份验证。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 gsutil cp gs://anthos-baremetal-release/bmctl/1.29.200-gke.243/linux-amd64/bmctl . chmod a+x bmctl sudo mv bmctl /usr/local/sbin/
为集群创建 Google Distributed Cloud 工作区。
bmctl create config -c CLUSTER_NAME
为 Google Distributed Cloud 集群创建配置文件。
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.29.200-gke.243 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 向 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
后续步骤
- 如需在新创建的 Google Distributed Cloud 集群上安装 OpenStack Cloud Provider,请按照配置适用于 Kubernetes 的 OpenStack Cloud Provider 指南操作