本指南介绍了在运行受支持操作系统的 OpenStack 虚拟机 (VM) 上的 Google Distributed Cloud 部署示例。该部署使用脚本来简化在 OpenStack 虚拟机中安装混合集群的操作。本指南还介绍了一种启用负载均衡即服务 (LBaaS) 的方法。您可以使用 Google Distributed Cloud 中的 OpenStack LBaaS 和 Kubernetes OpenStack 云服务提供商在 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 地址 | Purpose |
---|---|---|
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.100-gke.251/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.100-gke.251 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...
验证集群并与之交互
您可以在 bmctl-workspace
目录内的 abm-ws
虚拟机上找到集群 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 指南执行操作