Anthos clusters on Bare Metal 支持将 OpenStack 用作私有云平台。此支持允许您使用以下 OpenStack 服务:
- 基础架构即服务 (IaaS)
- 负载均衡即服务 (LBaaS)
- 存储
您可以在具有受支持操作系统的 OpenStack 虚拟机 (VM) 上部署 Anthos clusters on Bare Metal。Anthos clusters on Bare Metal 不会自动预配虚拟机,预配虚拟机超出了本指南的讨论范围。如需了解虚拟机要求并查看部署示例,请查看创建 OpenStack 虚拟机的 Terraform 示例。
您可以使用 OpenStack LBaaS 和 Anthos Clusters on Bare Metal 中的 Kubernetes OpenStack Cloud Provider 在 OpenStack 集群外部公开 Kubernetes Service。
本指南包含以下部分:
- 部署 Anthos clusters on Bare Metal
- 在 Anthos clusters on Bare Metal 中配置适用于 Kubernetes 的 OpenStack Cloud Provider,以与 Octavia 负载均衡器集成
- 验证适用于 Kubernetes 的 OpenStack Cloud Provider 集成
本指南使用 OpenStack Ussuri,但也可以使用旧版 OpenStack。较旧的 OpenStack 版本尚未经过测试。本指南使用 OpenStack 虚拟机提供在 OpenStack 上运行的双节点 Anthos clusters on Bare Metal 概念验证环境。如需了解如何创建具有高可用性控制平面的生产环境,请参阅 Anthos clusters on Bare Metal 文档,了解生产环境要求。
部署示例
本指南提供与 OpenStack 的 LBaaS 集成的 OpenStack 上的 Anthos clusters on Bare Metal 部署示例。您必须了解并调整命令和配置值,以匹配您的 OpenStack 环境。下图显示了生成的部署:
前提条件
- 部署了 LBaaS v2 且可正常运行的 OpenStack Ussuri
- 用于下载 bmctl 工具的服务帐号
- 如示例部署中所示配置 OpenStack 虚拟机和网络。如需在 OpenStack 环境中预配类似设置,您有以下选择:
- 使用此 Terraform 脚本自动预配资源。
- 手动预配资源。
- 以下 OpenStack 虚拟机必须准备就绪并可通过 SSH 使用:
名称 | 用量 | IP 地址 |
---|---|---|
abm-ws |
10.200.0.10 (专用 IP) float_ip (公共 IP) |
充当管理员工作站,用于将 Anthos on Bare Metal 部署到其他机器。 |
abm-cp1 | 10.200.0.11 | Anthos 集群控制平面:此主机运行 Kubernetes 控制平面和负载均衡器。 |
abm-w1 | 10.200.0.12 | Anthos 集群工作器节点:此主机运行 Kubernetes 工作负载。 |
部署 Anthos clusters on Bare Metal
本指南介绍如何完成以下任务:
安装所需的工具
提取
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 配置为使用您要在其中注册 Anthos clusters on Bare Metal 的 Google Cloud 项目。
gcloud config set project PROJECT_ID
在管理员工作站中为您的用户帐号设置应用默认凭据 (ADC)。使用
bmctl
工具创建集群时将需要使用此凭据。gcloud auth application-default login
创建
bm-gcr
服务帐号。您将使用此服务帐号从 Anthos clusters on Bare Metal 集群进行身份验证。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 \ anthosgke.googleapis.com \ cloudresourcemanager.googleapis.com \ container.googleapis.com \ gkeconnect.googleapis.com \ gkehub.googleapis.com \ serviceusage.googleapis.com \ stackdriver.googleapis.com \ monitoring.googleapis.com \ logging.googleapis.com \ opsconfigmonitoring.googleapis.com \ anthosaudit.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.11.8/linux-amd64/bmctl . chmod a+x bmctl sudo mv bmctl /usr/local/sbin/
为集群创建 Anthos clusters on Bare Metal 工作区。
bmctl create config -c CLUSTER_NAME
为 Anthos clusters on Bare Metal 集群创建配置文件。
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.11.8 gkeConnect: projectID: PROJECT_ID controlPlane: nodePoolSpec: clusterName: CLUSTER_NAME nodes: - address: 10.200.0.11 clusterNetwork: pods: cidrBlocks: - 10.202.0.0/16 services: cidrBlocks: - 10.203.0.0/16 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
后续步骤
您现在可以按照配置适用于 Kubernetes 的 OpenStack Cloud Provider,在新创建的 Anthos clusters on Bare Metal 集群上安装 OpenStack Cloud Provider。这使您可以利用 OpenStack 的 LBaaS 通过 LoadBalancer
类型的服务公开应用。