通过在 Compute Engine 虚拟机 (VM) 上创建演示集群,了解 Google Distributed Cloud。按照本指南创建管理员集群和用户集群可能需要 40 分钟到 1 小时。您在此指南中创建的演示集群可帮助您评估预配和操作 Google Distributed Cloud 集群的过程,但不适用于生产环境。
本文档将引导您完成以下脚本运行过程:
- 预配五个 Compute Engine 虚拟机以安装演示集群
- 设置 VPC 网络以提供集群连接
脚本预配必要资源后,您可以使用以下客户端之一来创建管理员集群和可托管工作负载的附带用户集群:bmctl
、Google Cloud 控制台、Google Cloud CLI 或 Terraform。
过程概览
本指南包含以下主要步骤:
准备本地环境,以便脚本具有所需的环境变量,并且您已收集运行命令所需的基本信息。
使用下载的脚本创建虚拟机和网络。
使用某个受支持的客户端创建管理员集群。
使用某个受支持的客户端创建用户集群。
清理,以移除您使用本指南创建的集群和虚拟机。
1. 准备本地环境
由于本指南使用的是会为您设置网络的脚本,因此您无需收集大量信息或进行任何规划。以下步骤将设置您的本地环境,并在本指南的后续部分收集您需要的基本信息:
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- 请记下项目 ID,因为您需要用它来设置本页面上的脚本和命令中使用的环境变量。如果您选择现有项目,请确保您是 Project Owner 或 Project Editor。
-
您可以在 Cloud Shell 或运行 Linux 或 macOS 的本地机器上运行该脚本。如果您不使用 Cloud Shell:
- 确保您已安装最新的 Google Cloud CLI(用于与 Google Cloud 进行交互的命令行工具)。根据需要更新 gcloud CLI 组件:
gcloud components update
根据 gcloud CLI 的安装方式,您可能会看到以下消息:
You cannot perform this action because the Google Cloud CLI component manager is disabled for this installation. You can run the following command to achieve the same result for this installation:
按照说明复制并粘贴命令以更新组件。
- 确定您已安装
kubectl
。如果您需要安装kubectl
,请运行以下命令:gcloud components install kubectl
- 确保您已安装最新的 Google Cloud CLI(用于与 Google Cloud 进行交互的命令行工具)。根据需要更新 gcloud CLI 组件:
- 设置环境变量:
export PROJECT_ID=PROJECT_ID export ADMIN_CLUSTER_NAME=ADMIN_CLUSTER_NAME export ON_PREM_API_REGION=ON_PREM_API_REGION export ZONE=ZONE
ADMIN_CLUSTER_NAME
:您为管理员集群选择的名称。ON_PREM_API_REGION
:Google Cloud 区域,GKE On-Prem API 在其中运行并存储集群元数据。请指定us-central1
或其他受支持的区域。ZONE
:在其中创建 Compute Engine 虚拟机的 Google Cloud 可用区。您可以使用us-central1-a
或任何其他 Compute Engine 可用区。
- 运行以下命令以设置默认项目和可用区。
gcloud config set project $PROJECT_ID gcloud config set compute/zone $ZONE
如果您收到
PERMISSION_DENIED
错误,请仔细检查您输入的项目 ID。如果项目 ID 正确无误,请运行gcloud auth login
以使用有权访问项目的账号登录 gcloud CLI。 - 获取您可以安装的受支持版本列表:
gcloud container bare-metal admin-clusters query-version-config \ --location=ON_PREM_API_REGION
- 从上一个命令的输出中选择版本,并在环境变量中进行设置:
export BMCTL_VERSION=BMCTL_VERSION
我们建议您选择最高兼容版本,以获取最新的 Google Distributed Cloud 功能和修复程序。
2. 创建虚拟机和网络
在本部分中,您将下载并运行 install_admin_cluster.sh
脚本。
克隆
anthos-samples
代码库并切换到脚本所在的目录:git clone https://github.com/GoogleCloudPlatform/anthos-samples cd anthos-samples/anthos-bm-gcp-bash
运行脚本:
bash install_admin_cluster.sh
在提示时,输入
2
以仅设置 Compute Engine 基础架构,并在系统提示时确认您的选择。该脚本会创建 Compute Engine 虚拟机、创建 VXLAN 网络,并设置管理员工作站和集群节点。此基础架构大约需要 5 分钟才能完成设置。
如需详细了解该脚本,请点击以下链接:
关于脚本
您可以在 anthos-samples GitHub 代码库的
anthos-bm-gcp-bash
文件夹中查看该脚本。该脚本会自动执行以下手动步骤:-
启用以下 Google Cloud API:
anthos.googleapis.com anthosaudit.googleapis.com anthosgke.googleapis.com cloudresourcemanager.googleapis.com connectgateway.googleapis.com container.googleapis.com compute.googleapis.com gkeconnect.googleapis.com gkehub.googleapis.com gkeonprem.googleapis.com serviceusage.googleapis.com stackdriver.googleapis.com monitoring.googleapis.com logging.googleapis.com kubernetesmetadata.googleapis.com iam.googleapis.com opsconfigmonitoring.googleapis.com
-
该脚本不会为其他 API 和服务创建多个服务账号,而是创建一个名为
baremetal-gcr
的服务账号,并向其授予以下 IAM 角色:roles/gkehub.admin
roles/gkehub.connect
roles/logging.logWriter
roles/monitoring.dashboardEditor
roles/monitoring.metricWriter
roles/monitoring.viewer
roles/opsconfigmonitoring.resourceMetadata.writer
roles/serviceusage.serviceUsageViewer
roles/stackdriver.resourceMetadata.writer
- 创建以下虚拟机:
- 一个虚拟机用于管理员工作站。
- 一个虚拟机用于管理员集群的控制平面节点。
- 用户集群的工作器节点的两个虚拟机。
- 一个虚拟机用于用户集群的控制平面节点。
- 验证所有虚拟机是否已启用 SSH,以及管理员工作站是否可通过 SSH 访问为集群节点创建的所有其他虚拟机。
-
为虚拟机之间的第 2 层连接创建虚拟可扩展 LAN (VXLAN) 叠加网络。VXLAN 不是永久性的,因此如果您重新启动虚拟机实例,网络会被销毁。该网络设置为
10.200.0.0/24
子网。捆绑式负载均衡器需要第 2 层连接。 -
在管理员工作站上安装以下工具:
bmctl
kubectl
- Docker
该脚本还会将
baremetal-gcr
服务账号的服务账号密钥下载到管理员工作站。 - 通过执行以下任务,确保来自管理员工作站的
root@10.200.0.x
正常运行:- 在管理员工作站上生成新的 SSH 密钥。
- 将公钥添加到部署中的所有其他虚拟机上。
该脚本会输出其运行的每个命令和状态。完成后,该脚本会输出以下内容:
✅ Successfully set up SSH access from admin workstation to cluster node VMs. ✅ GCE Infrastructure setup complete. Please check the logs for any errors!!! ✅ If you do not see any errors in the output log, then you now have the following setup: |---------------------------------------------------------------------------------------------------------| | VM Name | L2 Network IP (VxLAN) | INFO | |---------------------------------------------------------------------------------------------------------| | abm-admin-cluster-cp | 10.200.0.3 | 🌟 Ready for use as control plane for the admin cluster | | abm-user-cluster-cp | 10.200.0.4 | 🌟 Ready for use as control plane for the user cluster | | abm-user-cluster-w1 | 10.200.0.5 | 🌟 Ready for use as worker for the user cluster | | abm-user-cluster-w2 | 10.200.0.6 | 🌟 Ready for use as worker for the user cluster | |---------------------------------------------------------------------------------------------------------|
-
启用以下 Google Cloud API:
3. 创建管理员集群
bmctl
如需使用 bmctl
创建管理员集群,您可以在终端窗口中访问管理员工作站虚拟机,并从中运行命令:
使用 SSH 以根用户身份访问管理员工作站虚拟机
abm-ws
:gcloud compute ssh root@abm-ws --zone ZONE
将您的用户凭据设置为应用默认凭据 (ADC):
gcloud auth application-default login
按照提示为 ADC 选择 Google 账号。
生成集群配置文件:
bmctl create config -c ADMIN_CLUSTER_NAME --project-id=PROJECT_ID
验证管理员集群配置文件:
以下集群配置文件填充了您之前提供的值。除了您输入的值之外,请注意与生成的配置文件之间的以下差异:
- 此示例中删除了注释,以增强可读性。
- 该脚本会创建一个具有所有所需权限的服务账号,并下载配置文件中引用的
bm-gcr.json
密钥。
gcrKeyPath: /root/bm-gcr.json sshPrivateKeyPath: /root/.ssh/id_rsa gkeConnectAgentServiceAccountKeyPath: /root/bm-gcr.json gkeConnectRegisterServiceAccountKeyPath: /root/bm-gcr.json cloudOperationsServiceAccountKeyPath: /root/bm-gcr.json --- apiVersion: v1 kind: Namespace metadata: name: cluster-ADMIN_CLUSTER_NAME --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: ADMIN_CLUSTER_NAME namespace: cluster-ADMIN_CLUSTER_NAME spec: type: admin profile: default anthosBareMetalVersion: BMCTL_VERSION gkeConnect: projectID: PROJECT_ID controlPlane: nodePoolSpec: nodes: - address: 10.200.0.3 clusterNetwork: pods: cidrBlocks: - 192.168.0.0/16 services: cidrBlocks: - 10.96.0.0/20 loadBalancer: mode: bundled ports: controlPlaneLBPort: 443 vips: controlPlaneVIP: 10.200.0.48 clusterOperations: projectID: PROJECT_ID location: us-central1 storage: lvpNodeMounts: path: /mnt/localpv-disk storageClassName: local-disks lvpShare: path: /mnt/localpv-share storageClassName: local-shared numPVUnderSharedPath: 5 nodeConfig: podDensity: maxPodsPerNode: 110
将管理员工作站上生成的配置文件的内容替换为上面示例中的内容。
打开生成的文件
bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME.yaml
,并将其内容替换为您在上一步中验证的示例内容。创建管理员集群:
bmctl create cluster -c ADMIN_CLUSTER_NAME
bmctl
命令在运行预检检查和创建集群时会向屏幕显示输出。详细信息会写入管理员工作站上的baremetal/bmctl-workspace/abm-user-cluster-metallb/log
文件夹中的日志。集群创建过程可能需要几分钟时间才能完成。
在控制台中,前往 GKE 集群页面。
确保选择了您在其中创建用户集群的项目。您应该会看到列出的管理员集群。
登录管理员集群:
点击集群名称中的链接,然后点击侧面板上的登录。
选择使用您的 Google 身份登录。
点击 Login(登录)。
验证管理员集群
您可以在管理员工作站的根账号的 bmctl-workspace
目录中找到管理员集群的 kubeconfig 文件。如需验证部署,请完成以下步骤:
使用 SSH 以根身份访问管理员工作站:
gcloud compute ssh root@abm-ws --zone ZONE
验证管理员集群已创建且正在运行:
kubectl --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig get nodes
输出类似于以下内容:
NAME STATUS ROLES AGE VERSION abm-admin-cluster-cp Ready control-plane 94m v1.27.4-gke.1600
探索完毕后,输入
exit
以断开与管理员工作站的连接。
控制台
如需在控制台中创建管理员集群,您必须从管理员工作站虚拟机运行 bmctl
register bootstrap
以创建引导集群。在 bmctl register bootstrap
命令运行时,您可以在控制台中执行相应步骤来创建管理员集群。
输入引导环境基本信息
在 Google Cloud 控制台中,转到 GKE 集群页面。
点击创建。
在创建集群对话框中,选择本地,然后点击配置以获取裸机:
确保从项目列表中选择
PROJECT_ID
。在左侧导航栏中,点击安装引导环境。
输入
ADMIN_CLUSTER_NAME
作为管理员集群名称。选择
BMCTL_VERSION
作为管理员集群的版本。该脚本将此版本的bmctl
命令行工具下载到管理员工作站。您安装的 Google Distributed Cloud 版本必须与bmctl
版本匹配。在 Google Cloud API 位置字段中,从列表中选择 ON_PREM_API_REGION。此设置指定 GKE On-Prem API 在其中运行的区域,以及在其中存储以下各项的区域:
- GKE On-Prem API 管理集群生命周期所需的集群元数据
- 系统组件的 Cloud Logging 和 Cloud Monitoring 数据
- Cloud Audit Logs 创建的管理员审核日志
集群名称、项目和位置唯一标识 Google Cloud 中的集群。
请按照下一部分中的步骤(而不是控制台中显示的步骤)创建引导集群。让控制台页面保持打开,因为您将返回该页面创建管理员集群。
创建引导集群
使用 GKE On-Prem API 客户端(例如控制台)创建管理员集群时,您需要在管理员工作站上创建引导集群。此引导集群托管创建管理员集群所需的 Kubernetes 控制器。
在命令行中,使用 SSH 以根身份访问管理员工作站虚拟机:
gcloud compute ssh root@abm-ws --zone ZONE
您可以忽略任何有关更新虚拟机的消息并完成本教程。如果您计划将虚拟机保留为测试环境,则可能需要按照 Ubuntu 文档中的说明更新操作系统或升级到下一个版本。
将您的用户凭据设置为应用默认凭据 (ADC):
gcloud auth application-default login
按照提示为 ADC 选择 Google 账号。
切换到
baremetal/
目录,并运行以下命令以创建引导集群。引导集群名称来源于在管理员集群名称前面加上
bootstrap-
。bmctl register bootstrap \ --ssh-key=/root/.ssh/id_rsa \ --name=bootstrap-ADMIN_CLUSTER_NAME \ --project-id=PROJECT_ID
bmctl
成功创建引导集群后,您会看到如下所示的输出:[2023-03-22 17:35:24+0000] Waiting for the temporary cluster to be registered... OK [2023-03-22 17:35:37+0000] Please go to https://console.cloud.google.com/home/dashboard?project=example-project-12345 to create the cluster [2023-03-22 17:35:37+0000] Waiting for preflight checks and cluster to run..
创建管理员集群
在安装引导环境页面上的从管理员工作站中引导环境部分中,点击检查连接状况。
成功后,控制台会显示
已建立连接。您必须先建立与引导集群的连接,然后才能继续操作。如果连接未建立,请检查您为
bmctl register bootstrap
命令指定的参数:确保
--name
的值与引导环境基本信息部分中显示的派生的引导集群名称匹配。确保
--project-id
的值与您在控制台中选择的项目的 ID 匹配。
如果您需要更改引导集群名称或项目 ID,请输入
Ctrl-C
退出bmctl register bootstrap
,然后重新运行该命令。
网络
点击左侧导航栏中的网络。
在控制平面部分的控制平面节点 IP 1 字段中输入以下内容:
10.200.0.3
这是脚本创建的 VXLAN 中 abm-admin-cluster-cp 虚拟机的 IP 地址。
在负载均衡器部分中,确保选中捆绑。
在虚拟 IP (VIP) 部分的控制平面 VIP 字段中,输入以下内容:
10.200.0.48
以下步骤取决于引导集群的可用性。终端窗口中的
bmctl register bootstrap
命令必须运行几分钟,然后引导集群才会显示为已注册成员。如果几分钟后仍无法使用,请检查您使用的引导集群名称和项目 ID。如果您需要更改引导集群名称或项目 ID,请在另一个终端窗口中输入Ctrl-C
退出bmctl register bootstrap
,然后重新运行该命令。点击验证并创建。
控制台会在验证设置并创建集群时显示状态消息。
创建管理员集群后,管理员工作站上的引导集群会被删除。另一个终端窗口中的
bmctl register bootstrap
命令的输出类似于以下内容:... [2024-04-15 23:10:48+0000] Waiting for cluster to become ready OK [2024-04-15 23:16:38+0000] Please run [2024-04-15 23:16:38+0000] kubectl --kubeconfig bmctl-workspace/gce-admin-gcloud-001/gce-admin-gcloud-001-kubeconfig get nodes [2024-04-15 23:16:38+0000] to get cluster nodes status. [2024-04-15 23:16:38+0000] Waiting for node pools to become ready OK [2024-04-15 23:16:58+0000] Waiting for metrics to become ready in GCP OK [2024-04-15 23:21:58+0000] Waiting for cluster API provider to install in the created admin cluster OK [2024-04-15 23:22:08+0000] Moving admin cluster resources to the created admin cluster [2024-04-15 23:22:10+0000] Waiting for node update jobs to finish OK [2024-04-15 23:24:30+0000] Flushing logs... OK [2024-04-15 23:24:30+0000] Unregistering bootstrap cluster. [2024-04-15 23:24:30+0000] Deleting membership... OK [2024-04-15 23:24:32+0000] Deleting bootstrap cluster.
验证管理员集群
您可以在管理员工作站的根账号的 bmctl-workspace
目录中找到管理员集群的 kubeconfig 文件。如需验证部署,请完成以下步骤:
使用 SSH 以根身份访问管理员工作站:
gcloud compute ssh root@abm-ws --zone ZONE
验证管理员集群已创建且正在运行:
kubectl --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig get nodes
输出类似于以下内容:
NAME STATUS ROLES AGE VERSION abm-admin-cluster-cp Ready control-plane 94m v1.27.4-gke.1600
探索完毕后,输入
exit
以断开与管理员工作站的连接。
gcloud CLI
以下说明需要使用两个终端窗口。在一个终端窗口中,运行 bmctl register bootstrap
以创建引导集群。在 bmctl register bootstrap
命令运行时,您可以在另一个终端窗口中运行 gcloud container
bare-metal admin-clusters create
以创建管理员集群。
创建引导集群
使用 GKE On-Prem API 客户端(例如 gcloud CLI)创建管理员集群时,您需要在管理员工作站上创建引导集群。此引导集群托管创建管理员集群所需的 Kubernetes 控制器。
在命令行中,使用 SSH 以根身份访问管理员工作站虚拟机:
gcloud compute ssh root@abm-ws --zone ZONE
您可以忽略任何有关更新虚拟机的消息并完成本教程。如果您计划将虚拟机保留为测试环境,则可能需要按照 Ubuntu 文档中的说明更新操作系统或升级到下一个版本。
将您的用户凭据设置为应用默认凭据 (ADC):
gcloud auth application-default login
按照提示为 ADC 选择 Google 账号。
切换到
baremetal/
目录,并运行以下命令以创建引导集群。引导集群名称来源于在管理员集群名称前面加上
bootstrap-
。bmctl register bootstrap \ --ssh-key=/root/.ssh/id_rsa \ --name=bootstrap-ADMIN_CLUSTER_NAME \ --project-id=PROJECT_ID
bmctl
成功创建引导集群后,您会看到如下所示的输出:[2023-03-22 17:35:24+0000] Waiting for the temporary cluster to be registered... OK [2023-03-22 17:35:37+0000] Please go to https://console.cloud.google.com/home/dashboard?project=example-project-12345 to create the cluster [2023-03-22 17:35:37+0000] Waiting for preflight checks and cluster to run..
创建管理员集群
在新终端窗口中,确认引导集群已注册为舰队成员:
gcloud container fleet memberships list \ --project=PROJECT_ID
以下步骤中的
gcloud container bare-metal admin-clusters create
命令取决于引导集群的可用性。必须在其他终端窗口中运行bmctl register bootstrap
命令几分钟,才能使引导集群显示为已注册成员。如果几分钟后,它仍未列出,请检查您使用的引导集群名称和项目 ID。如果您需要更改引导集群名称或项目 ID,请在另一个终端窗口中输入Ctrl-C
退出bmctl register bootstrap
,然后重新运行该命令。使用捆绑式负载均衡器创建管理员集群:
确保您指定的值与您之前为脚本指定的环境变量一致。
gcloud container bare-metal admin-clusters create ADMIN_CLUSTER_NAME \ --project=PROJECT_ID \ --location=ON_PREM_API_REGION \ --version=BMCTL_VERSION \ --max-pods-per-node=110 \ --control-plane-vip=10.200.0.48 \ --control-plane-load-balancer-port=443 \ --control-plane-node-configs node-ip=10.200.0.3 \ --island-mode-service-address-cidr-blocks=10.96.0.0/20 \ --island-mode-pod-address-cidr-blocks=192.168.0.0/16 \ --lvp-share-path=/mnt/localpv-share \ --lvp-share-storage-class=local-shared \ --lvp-node-mounts-config-path=/mnt/localpv-disk \ --lvp-node-mounts-config-storage-class=local-disks
在此命令中:
--control-plane-vip
:设置为10.200.0.48
。这是集群的 Kubernetes API 服务器的负载均衡器上的虚拟 IP (VIP)。--control-plane-node-configs
:node-ip
设置为10.200.0.3
。这是脚本创建的 VXLAN 中abm-admin-cluster-cp
虚拟机的 IP 地址。
如需查看标志及其说明的完整列表,请参阅 gcloud CLI 参考文档。
此命令的输出类似如下所示:
Waiting for operation [projects/example-project-12345/locations/us-west1/operations/operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179] to complete.
在示例输出中,字符串
operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179
是长时间运行的操作的OPERATION_ID
。您可以通过在另一个终端窗口中运行以下命令来了解操作的状态:gcloud container bare-metal operations describe OPERATION_ID \ --project=PROJECT_ID \ --location=ON_PREM_API_REGION
当
gcloud container bare-metal admin-clusters create
成功完成时,输出内容类似如下:Created Anthos on bare metal Admin Cluster [https://gkeonprem.googleapis.com/v1/projects/anonuser-anonproject/locations/us-central1/bareMetalAdminClusters/gce-admin-gcloud-001]. NAME LOCATION VERSION MEMBERSHIP STATE abm-cluster-1 us-central1 1.28.300-gke.131 abm-cluster-1 RUNNING
创建管理员集群后,管理员工作站上的引导集群会被删除。另一个终端窗口中的
bmctl register bootstrap
命令的输出类似于以下内容:... [2024-04-15 23:10:48+0000] Waiting for cluster to become ready OK [2024-04-15 23:16:38+0000] Please run [2024-04-15 23:16:38+0000] kubectl --kubeconfig bmctl-workspace/gce-admin-gcloud-001/gce-admin-gcloud-001-kubeconfig get nodes [2024-04-15 23:16:38+0000] to get cluster nodes status. [2024-04-15 23:16:38+0000] Waiting for node pools to become ready OK [2024-04-15 23:16:58+0000] Waiting for metrics to become ready in GCP OK [2024-04-15 23:21:58+0000] Waiting for cluster API provider to install in the created admin cluster OK [2024-04-15 23:22:08+0000] Moving admin cluster resources to the created admin cluster [2024-04-15 23:22:10+0000] Waiting for node update jobs to finish OK [2024-04-15 23:24:30+0000] Flushing logs... OK [2024-04-15 23:24:30+0000] Unregistering bootstrap cluster. [2024-04-15 23:24:30+0000] Deleting membership... OK [2024-04-15 23:24:32+0000] Deleting bootstrap cluster.
验证管理员集群
您可以在管理员工作站的根账号的 bmctl-workspace
目录中找到管理员集群的 kubeconfig 文件。如需验证部署,请完成以下步骤:
使用 SSH 以根身份访问管理员工作站:
gcloud compute ssh root@abm-ws --zone ZONE
验证管理员集群已创建且正在运行:
kubectl --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig get nodes
输出类似于以下内容:
NAME STATUS ROLES AGE VERSION abm-admin-cluster-cp Ready control-plane 94m v1.27.4-gke.1600
探索完毕后,输入
exit
以断开与管理员工作站的连接。
Terraform
以下说明需要使用两个终端窗口。在一个终端窗口中,运行 bmctl register bootstrap
以创建引导集群。在 bmctl register bootstrap
命令运行期间,您可以在另一个终端窗口中运行 Terraform 命令以创建管理员集群。
修改用户集群示例文件以适用于管理员集群
anthos-samples
代码库不包含专门用于创建 Google Distributed Cloud 管理员集群的示例。以下步骤介绍了如何通过修改现有用户集群 Terraform 示例来创建管理员集群。
在您克隆
anthos-samples
的目录中,运行以下命令,将 MetalLB 用户集群示例的示例文件复制到管理员集群的新文件夹中:cp -r anthos-samples/anthos-onprem-terraform/abm_user_cluster_metallb \ anthos-samples/anthos-onprem-terraform/abm_admin_cluster_basic
切换到
abm_admin_cluster_basic
目录:cd anthos-samples/anthos-onprem-terraform/abm_admin_cluster_basic
修改 Terraform 文件:
variables.tf
:为控制平面节点 IP 地址定义一个变量(尽管我们在此演示中只使用一个)。此变量应类似于
variable "control_plane_ips" { ... }
条目。为控制平面 VIP 地址定义一个变量。此变量应类似于
variable "control_plane_vip" { ... }
条目。
terraform.tfvars
:为以下管理员集群设置分配变量值:
控制平面节点 IP 地址:
10.200.0.3
控制平面 VIP 地址:
10.200.0.48
main.tf
:将
google_gkeonprem_bare_metal_cluster
资源替换为google_gkeonprem_bare_metal_admin_cluster
资源。删除
google_gkeonprem_bare_metal_node_pool
资源和相关的lifecycle
部分。更新资源以使用新定义的变量。
以下示例展示了
main.tf
文件在修改为创建管理员集群时的外观:/** * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #[START anthos_onprem_terraform_bare_metal_admin_cluster_basic_main] module "enable_google_apis_primary" { source = "terraform-google-modules/project-factory/google//modules/project_services" version = "~> 14.0" project_id = var.project_id activate_apis = [ "anthos.googleapis.com", "anthosaudit.googleapis.com", "anthosgke.googleapis.com", "cloudresourcemanager.googleapis.com", "compute.googleapis.com", "connectgateway.googleapis.com", "container.googleapis.com", "file.googleapis.com", "gkehub.googleapis.com", "iam.googleapis.com", "kubernetesmetadata.googleapis.com", "logging.googleapis.com", "monitoring.googleapis.com", "opsconfigmonitoring.googleapis.com", "serviceusage.googleapis.com", "stackdriver.googleapis.com" ] disable_services_on_destroy = false } # Enable GKE OnPrem API resource "google_project_service" "default" { project = var.project_id service = "gkeonprem.googleapis.com" disable_on_destroy = false } # Create an anthos baremetal admin cluster and enroll it with the gkeonprem API resource "google_gkeonprem_bare_metal_admin_cluster" "admin-cluster-basic" { name = var.admin_cluster_name description = "Anthos bare metal admin cluster" provider = google depends_on = [google_project_service.default] location = var.region bare_metal_version = var.bare_metal_version network_config { island_mode_cidr { service_address_cidr_blocks = ["0.96.0.0/20"] pod_address_cidr_blocks = ["192.168.0.0/16"] } } node_config { max_pods_per_node = 250 } control_plane { control_plane_node_pool_config { node_pool_config { operating_system = "LINUX" dynamic "node_configs" { for_each = var.admin_cp_ips content { node_ip = node_configs.value } } } } } load_balancer { port_config { control_plane_load_balancer_port = 443 } vip_config { control_plane_vip = var.admin_cp_vip } } storage { lvp_share_config { lvp_config { path = "/mnt/localpv-share" storage_class = "local-shared" } shared_path_pv_count = 5 } lvp_node_mounts_config { path = "/mnt/localpv-disk" storage_class = "local-disks" } } dynamic "security_config" { for_each = length(var.admin_user_emails) == 0 ? [] : [1] content { authorization { dynamic "admin_users" { for_each = var.admin_user_emails content { username = admin_users.value } } } } } lifecycle { ignore_changes = [ annotations["onprem.cluster.gke.io/user-cluster-resource-link"], annotations["alpha.baremetal.cluster.gke.io/cluster-metrics-webhook"], annotations["baremetal.cluster.gke.io/operation"], annotations["baremetal.cluster.gke.io/operation-id"], annotations["baremetal.cluster.gke.io/start-time"], annotations["baremetal.cluster.gke.io/upgrade-from-version"] ] } } #[END anthos_onprem_terraform_bare_metal_admin_cluster_basic_main]
如需详细了解管理员集群的 Terraform 资源,请参阅 Terraform 注册表中的 google_gkeonprem_bare_metal_admin_cluster。
创建引导集群
使用 GKE On-Prem API 客户端(例如 Terraform)创建管理员集群时,您需要在管理员工作站上创建引导集群。此引导集群托管创建管理员集群所需的 Kubernetes 控制器。
在命令行中,使用 SSH 以根身份访问管理员工作站虚拟机:
gcloud compute ssh root@abm-ws --zone ZONE
您可以忽略任何有关更新虚拟机的消息并完成本教程。如果您计划将虚拟机保留为测试环境,则可能需要按照 Ubuntu 文档中的说明更新操作系统或升级到下一个版本。
将您的用户凭据设置为应用默认凭据 (ADC):
gcloud auth application-default login
按照提示为 ADC 选择 Google 账号。
切换到
baremetal/
目录,并运行以下命令以创建引导集群。引导集群名称来源于在管理员集群名称前面加上
bootstrap-
。bmctl register bootstrap \ --ssh-key=/root/.ssh/id_rsa \ --name=bootstrap-ADMIN_CLUSTER_NAME \ --project-id=PROJECT_ID
bmctl
成功创建引导集群后,您会看到如下所示的输出:[2023-03-22 17:35:24+0000] Waiting for the temporary cluster to be registered... OK [2023-03-22 17:35:37+0000] Please go to https://console.cloud.google.com/home/dashboard?project=example-project-12345 to create the cluster [2023-03-22 17:35:37+0000] Waiting for preflight checks and cluster to run..
创建管理员集群
初始化并创建 Terraform 方案:
terraform init
Terraform 会安装任何所需的库,例如 Google Cloud 提供程序。
检查配置,并根据需要进行更改:
terraform plan
应用 Terraform 方案以创建管理员集群:
terraform apply
创建管理员集群需要 15 分钟或更长时间。集群创建完成后,您会看到如下所示的消息:
... google_gkeonprem_bare_metal_admin_cluster.admin-cluster-basic: Still creating... [20m10s elapsed] google_gkeonprem_bare_metal_admin_cluster.admin-cluster-basic: Creation complete after 20m11s [id=projects/anonuser-anonproject/locations/us-central1/bareMetalAdminClusters/gce-admin-terra002] Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
创建管理员集群后,管理员工作站上的引导集群会被删除。另一个终端窗口中的
bmctl register bootstrap
命令的输出类似于以下内容:... [2024-04-15 23:10:48+0000] Waiting for cluster to become ready OK [2024-04-15 23:16:38+0000] Please run [2024-04-15 23:16:38+0000] kubectl --kubeconfig bmctl-workspace/gce-admin-gcloud-001/gce-admin-gcloud-001-kubeconfig get nodes [2024-04-15 23:16:38+0000] to get cluster nodes status. [2024-04-15 23:16:38+0000] Waiting for node pools to become ready OK [2024-04-15 23:16:58+0000] Waiting for metrics to become ready in GCP OK [2024-04-15 23:21:58+0000] Waiting for cluster API provider to install in the created admin cluster OK [2024-04-15 23:22:08+0000] Moving admin cluster resources to the created admin cluster [2024-04-15 23:22:10+0000] Waiting for node update jobs to finish OK [2024-04-15 23:24:30+0000] Flushing logs... OK [2024-04-15 23:24:30+0000] Unregistering bootstrap cluster. [2024-04-15 23:24:30+0000] Deleting membership... OK [2024-04-15 23:24:32+0000] Deleting bootstrap cluster.
在控制台中,前往 GKE 集群页面。
确保选择了您在其中创建用户集群的项目。您应该会看到列出的管理员集群。
登录管理员集群:
点击集群名称中的链接,然后点击侧面板上的登录。
选择使用您的 Google 身份登录。
点击 Login(登录)。
验证管理员集群
您可以在管理员工作站的根账号的 bmctl-workspace
目录中找到管理员集群的 kubeconfig 文件。如需验证部署,请完成以下步骤:
使用 SSH 以根身份访问管理员工作站:
gcloud compute ssh root@abm-ws --zone ZONE
验证管理员集群已创建且正在运行:
kubectl --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig get nodes
输出类似于以下内容:
NAME STATUS ROLES AGE VERSION abm-admin-cluster-cp Ready control-plane 94m v1.27.4-gke.1600
探索完毕后,输入
exit
以断开与管理员工作站的连接。
4. 创建用户集群
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Terraform 创建用户集群。 为简单起见,请使用 abm-user-cluster-metallb
作为用户集群名称,以匹配 Terraform 脚本中的硬编码名称。
bmctl
使用 SSH 以根用户身份访问管理员工作站虚拟机
abm-ws
:gcloud compute ssh root@abm-ws --zone ZONE
生成集群配置文件:
bmctl create config -c abm-user-cluster-metallb \ --project-id=PROJECT_ID
在以下用户集群配置文件中,在
clusterSecurity
部分设置您的电子邮件地址,并验证其余设置:以下集群配置文件填充了您之前在规划表中输入的值。除了您输入的值之外,请注意与生成的配置文件之间的以下差异:
- 此示例中删除了注释,以增强可读性。
- 已移除“凭据”部分,这是用户集群的常规操作。
- 集群类型
spec.type
已设置为user
。 - 添加了
spec.clusterSecurity.authorization.clusterAdmin.gcpAccounts
字段,以将clusterrole/cluster-admin
授予您的账号。除此之外,此字段还允许您在 Google Cloud 控制台中登录集群,以查看更多集群详细信息。
--- apiVersion: v1 kind: Namespace metadata: name: cluster-abm-user-cluster-metallb --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: abm-user-cluster-metallb namespace: cluster-abm-user-cluster-metallb spec: type: user profile: default anthosBareMetalVersion: BMCTL_VERSION gkeConnect: projectID: PROJECT_ID controlPlane: nodePoolSpec: nodes: - address: 10.200.0.4 clusterNetwork: pods: cidrBlocks: - 192.168.0.0/16 services: cidrBlocks: - 10.96.0.0/20 loadBalancer: mode: bundled ports: controlPlaneLBPort: 443 vips: controlPlaneVIP: 10.200.0.50 ingressVIP: 10.200.0.51 addressPools: - name: pool1 addresses: - 10.200.0.51-10.200.0.70 clusterOperations: projectID: PROJECT_ID location: us-central1 clusterSecurity: authorization: clusterAdmin: gcpAccounts: - YOUR_EMAIL_ADDRESS storage: lvpNodeMounts: path: /mnt/localpv-disk storageClassName: local-disks lvpShare: path: /mnt/localpv-share storageClassName: local-shared numPVUnderSharedPath: 5 nodeConfig: podDensity: maxPodsPerNode: 250 --- apiVersion: baremetal.cluster.gke.io/v1 kind: NodePool metadata: name: node-pool-1 namespace: cluster-abm-user-cluster-metallb spec: clusterName: abm-user-cluster-metallb nodes: - address: 10.200.0.5
将管理员工作站上生成的配置文件的内容替换为上面示例中的内容。
打开生成的文件
bmctl-workspace/abm-user-cluster-metallb/abm-user-cluster-metallb.yaml
,并将其内容替换为您在上一步中验证的示例内容。创建用户集群:
bmctl create cluster -c abm-user-cluster-metallb \ --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig
bmctl
命令在运行预检检查和创建集群时会向屏幕显示输出。详细信息会写入管理员工作站上的baremetal/bmctl-workspace/abm-user-cluster-metallb/log
文件夹中的日志。集群创建过程可能需要几分钟时间才能完成。
在 Google Cloud 控制台中,转到 GKE 集群页面。
确保选择了您在其中创建用户集群的项目。您应该会在列表中看到管理员集群和用户集群。
登录用户集群:
点击集群名称中的链接,然后点击侧面板上的登录。
选择使用您的 Google 身份登录。
点击 Login(登录)。
重复相同的步骤以登录管理员集群。
控制台
请按照以下步骤在控制台中创建用户集群:
在控制台中,打开创建裸金属集群页面。
确保已选择在其中创建管理员集群的 Google Cloud 项目。
点击创建集群。
在对话框中,点击本地。
在裸机旁边,点击配置。此时会显示前提条件页面。
在选择集群类型下,选择为现有管理员集群创建用户集群
点击下一步。
集群基本信息
输入用户集群的名称或使用默认名称。
确保已选择新建的管理员集群。 您可以对本页面上的其余设置使用默认值。
点击左侧导航栏中的网络。
网络
您运行的用于创建虚拟机和管理集群的脚本还会创建一个 2 层 VXLAN,其中包含 10.200.0.0/24
子网中的 IP 地址。
在控制平面部分的控制平面节点 IP 1 字段中输入以下内容:
10.200.0.4
这是脚本创建的 VXLAN 中
abm-user-cluster-cp1
虚拟机的 IP 地址。在负载均衡器部分中,使用与 MetalLB 捆绑的默认负载均衡器。
在新地址池部分的 IP 地址范围 1 字段中输入以下 IP 地址范围:
10.200.0.51-10.200.0.70
点击完成。
在虚拟 IP 部分的控制平面 VIP 字段中输入以下 IP 地址:
10.200.0.50
为 Ingress VIP 输入以下 IP 地址:
10.200.0.51
使用 Service 和 Pod CIDR 部分的默认 IP 地址。
点击左侧导航栏中的默认池。
创建节点池
您的用户集群必须至少有一个节点池来存储工作器节点。
在节点地址 1 字段中输入以下 IP 地址:
10.200.0.5
这是通过脚本创建的 VXLAN 中 abm-user-cluster-w1 虚拟机的 IP 地址。
创建集群
点击验证并创建以创建用户集群。
创建用户集群需要 15 分钟或更长时间。控制台会在验证设置并创建集群时显示状态消息。
如果配置出现问题,控制台将显示一条错误消息,该消息应该足够清晰,以便您修复配置问题并再次尝试创建集群。
如需查看有关创建过程的详细信息,请点击显示详细信息以显示侧面板。点击
可关闭详细信息面板。创建集群后,将显示集群状态:正在运行。
创建集群后,点击
集群以返回集群页面。登录用户集群:
点击集群名称中的链接,然后点击侧面板上的登录。
选择使用您的 Google 身份登录。
点击 Login(登录)。
重复相同的步骤以登录管理员集群。
gcloud CLI
如需创建用户集群,请执行以下操作:
运行以下命令以创建用户集群:
gcloud container bare-metal clusters create abm-user-cluster-metallb \ --project=PROJECT_ID \ --admin-cluster-membership=projects/PROJECT_ID/locations/ON_PREM_API_REGION/memberships/ADMIN_CLUSTER_NAME \ --location=ON_PREM_API_REGION \ --version=BMCTL_VERSION \ --admin-users=YOUR_EMAIL_ADDRESS \ --metal-lb-address-pools='pool=lb-pool-1,manual-assign=True,addresses=10.200.0.51-10.200.0.70' \ --control-plane-node-configs='node-ip=10.200.0.4' \ --control-plane-vip=10.200.0.50 \ --control-plane-load-balancer-port=443 \ --ingress-vip=10.200.0.51 \ --island-mode-service-address-cidr-blocks=10.96.0.0/20 \ --island-mode-pod-address-cidr-blocks=192.168.0.0/16 \ --lvp-share-path=/mnt/localpv-share \ --lvp-share-storage-class=local-shared \ --lvp-node-mounts-config-path=/mnt/localpv-disk \ --lvp-node-mounts-config-storage-class=local-disks
运行该命令后,您会看到如下所示的输出:
Waiting for operation [projects/PROJECT_ID/locations/ON_PREM_API_REGION/operations/operation-1678304606537-5f668bde5c57e-341effde-b612ff8a] to complete...
在示例输出中,字符串
operation-1678304606537-5f668bde5c57e-341effde-b612ff8a
是长时间运行的操作的OPERATION_ID
。如需了解操作的状态,请打开另一个终端窗口并运行该命令。
gcloud container bare-metal operations describe OPERATION_ID \ --project=PROJECT_ID \ --location=ON_PREM_API_REGION
将
OPERATION_ID
替换为上一步输出中的相应字符串。创建集群大约需要 15 分钟或更长时间。创建集群时,您可以不时运行上一个命令来获取当前状态。
创建集群后,您会看到如下所示的输出:
Created Anthos cluster on bare metal [https://gkeonprem.googleapis.com/v1/projects/PROJECT_ID/locations/ON_PREM_API_REGION/bareMetalClusters/abm-user-cluster-metallb].
如需详细了解
gcloud container bare-metal clusters create
命令(包括每个标志的说明),请参阅 gcloud CLI 参考文档中有关集群资源的 container bare-metal clusters create 页面。
创建节点池
成功创建集群后,您可以为集群创建节点池。
如需创建节点池,请执行以下操作:
运行以下命令以创建节点池:
gcloud container bare-metal node-pools create NODE_POOL_NAME \ --cluster=abm-user-cluster-metallb \ --project=PROJECT_ID \ --location=ON_PREM_API_REGION \ --node-configs='node-ip=10.200.0.5'
将
NODE_POOL_NAME
替换为节点池的名称。运行该命令后,您会看到如下所示的输出:
Waiting for operation [projects/PROJECT_ID/locations/ON_PREM_API_REGION/operations/operation-1678308682052-5f669b0d132cb-6ebd1c2c-816287a7] to complete...
创建节点池大约需要 5 分钟或更少时间。创建节点池后,您会看到如下所示的输出:
Created node pool in Anthos cluster on bare metal [https://gkeonprem.googleapis.com/v1/projects/PROJECT_ID/locations/ON_PREM_API_REGION/bareMetalClusters/abm-user-cluster-metallb/bareMetalNodePools/NODE_POOL_NAME].
在控制台中,转到创建裸金属集群页面:
确保选择了您在其中创建用户集群的项目。您应该会在列表中看到管理员集群和用户集群。
登录用户集群:
点击集群名称中的链接,然后点击侧面板上的登录。
选择使用您的 Google 身份登录。
点击 Login(登录)。
重复相同的步骤以登录管理员集群。
Terraform
您可以使用以下基本配置示例来创建具有捆绑式 MetalLB 负载均衡器的用户集群。如需了解详情,请参阅 google_gkeonprem_bare_metal_cluster
参考文档。
在您克隆了
anthos-samples
的目录中,切换到 Terraform 示例所在的目录:cd anthos-samples/anthos-onprem-terraform/abm_user_cluster_metallb
该示例提供了一个传入
main.tf
的示例变量文件。复制
terraform.tfvars.sample
文件:cp terraform.tfvars.sample terraform.tfvars
验证以下示例中的值:
以下 Terraform 变量文件
terraform.tfvars.sample
中预填充了 IP 地址和您在本指南前面部分中输入的值。将
ADMIN_2_EMAIL_ADDRESS
替换为与您的 Google Cloud 账号关联的电子邮件地址,或者在修改变量文件时将其移除。如需详细了解您要为其设置变量的此示例中的参数,请参阅 Google Distributed Cloud 用户集群的 Terraform 文档中的参数参考。
将您复制的变量文件的内容替换为上面示例中的内容。
初始化并创建 Terraform 方案:
terraform init
Terraform 会安装任何所需的库,例如 Google Cloud 提供程序。
检查配置,并根据需要进行更改:
terraform plan
应用 Terraform 方案以创建用户集群:
terraform apply
创建用户集群需要 15 分钟或更长时间。您可以在 Google Cloud 控制台中的 GKE 集群页面上查看集群。
在 Google Cloud 控制台中,转到 GKE 集群页面。
确保选择了您在其中创建用户集群的项目。您应该会在列表中看到管理员集群和用户集群。
登录用户集群:
点击集群名称中的链接,然后点击侧面板上的登录。
选择使用您的 Google 身份登录。
点击 Login(登录)。
重复相同的步骤以登录管理员集群。
5. 清理
请按照以下说明移除您使用本指南创建的集群和虚拟机。
删除用户集群
bmctl
如需使用
bmctl
删除用户集群,请从管理员工作站虚拟机abm-ws
运行以下命令:bmctl reset \ --cluster abm-user-cluster-metallb \ --admin-kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig
控制台
在控制台中,前往 GKE 集群页面。
在集群列表中,点击用户集群。
在详细信息面板中,点击查看详细信息。
点击窗口顶部附近的
删除。当系统提示您确认时,输入集群名称,然后点击删除。
点击右上角的
以查看删除状态。您可能需要刷新页面才能更新集群列表。
gcloud CLI
如需删除集群,请运行以下命令:
gcloud container bare-metal clusters delete abm-user-cluster-metallb \ --project=PROJECT_ID \ --location=ON_PREM_API_REGION \ --force
您可以使用
--force
标志来删除包含节点池的集群。如果没有--force
标志,您必须先删除节点池,然后再删除集群。
如需了解其他标志,请参阅 gcloud container bare-metal clusters delete。
Terraform
terraform destroy
命令会终止您在运行 terraform apply
以创建用户集群时创建的资源。
从 Terraform 用户集群示例文件(如
main.tf
)所在的目录运行以下命令:terraform destroy
等待系统删除用户集群,然后再删除管理员集群和虚拟机。
删除管理员集群和虚拟机
从 GKE On-Prem API 取消注册管理员集群:
gcloud container bare-metal admin-clusters unenroll ADMIN_CLUSTER_NAME \ --project=PROJECT_ID \ --location=ON_PREM_API_REGION
连接到管理员工作站:
gcloud compute ssh root@abm-ws --zone ZONE
删除管理员集群:
bmctl reset -c ADMIN_CLUSTER_NAME
bmctl
会从舰队中取消注册集群,然后删除集群。等待集群被删除,然后再删除虚拟机。退出管理员工作站:
exit
列出名称中包含
abm
的所有虚拟机:gcloud compute instances list | grep 'abm'
验证您可以安全删除名称中包含
abm
的所有虚拟机。验证后,您可以通过运行以下命令来删除
abm
虚拟机:gcloud compute instances list --format="value(name)" | \ grep 'abm' | \ xargs gcloud compute instances delete --quiet --zone ZONE
运行以下命令以删除服务账号,并在系统提示时输入
y
:gcloud iam service-accounts delete baremetal-gcr@PROJECT_ID.iam.gserviceaccount.com
后续步骤
如需开始在您自己的硬件上创建集群,请参阅规划在硬件上进行基本安装和在硬件上创建基本集群。
如需详细了解安装要求,请参阅安装前提条件概览。
如需详细了解安装方法,请参阅集群创建概览。
如需了解如何将应用部署到集群,请参阅部署应用。