本页面介绍如何在 Compute Engine 虚拟机 (VM) 上创建 GKE on Bare Metal 用户集群和管理员集群。提供的脚本为管理员集群和用户集群节点以及管理员工作站创建 Compute Engine 虚拟机。
管理员工作站托管在安装期间预配集群的命令行界面 (CLI) 工具和配置文件,以及在安装后与预配的集群交互的 CLI 工具。该脚本在管理员工作站虚拟机上安装 CLI 工具。
用户集群是运行容器化工作负载的 Kubernetes 集群。它由控制平面节点和工作器节点组成。用户集群必须包含一个或多个运行用户工作负载的工作器节点。管理员集群是管理一个或多个用户集群的 Kubernetes 集群,它帮助创建、更新和删除用户集群。管理员集群仅包含控制平面节点。如需了解详情,请参阅管理员集群和用户集群部署。
该脚本会在虚拟机之间配置虚拟可扩展 LAN (VXLAN) 叠加网络,并准备虚拟机以创建集群。(可选)该脚本会创建管理员集群,或者您也可以选择自行创建管理员集群,以了解 GKE on Bare Metal 提供的用于创建管理员集群的工具。
借助提供的脚本,您可以快速试用 GKE on Bare Metal,而无需准备任何硬件。完成本页面上的步骤后,您可以获得在 Compute Engine 上运行的有效 GKE on Bare Metal 测试环境。
什么是 GKE On-Prem API?
GKE On-Prem API 是由 Google Cloud 托管的 API,可让您使用 Terraform 和标准 Google Cloud 应用来管理本地集群的生命周期。GKE On-Prem API 在 Google Cloud 的基础架构中运行。Terraform、控制台和 gcloud CLI 是 API 的客户端,它们使用 API 在数据中心内创建集群。
为了管理集群的生命周期,GKE On-Prem API 必须使用您在创建集群时指定的 Google Cloud 区域将有关集群状态的元数据存储在 Google Cloud 中。此元数据可让 API 管理集群生命周期,并且不包含特定于工作负载的数据。
使用 GKE On-Prem API 客户端创建集群时,您需要指定 Google Cloud 项目。创建集群后,它会自动注册到指定项目的舰队。此项目称为舰队宿主项目。集群创建后,舰队宿主项目便无法更改。
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a 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 的安装方式,您可能会看到以下消息:“您无法执行此操作,因为此安装已停用 gcloud CLI 组件管理器。 您可以运行以下命令,以获得与此安装相同的结果: 请按照说明复制并粘贴命令以更新组件。
- 确定您已安装
kubectl
。如果您需要安装kubectl
,请运行以下命令:gcloud components install kubectl
- 确保您已安装最新的 Google Cloud CLI(用于与 Google Cloud 进行交互的命令行工具)。根据需要更新 gcloud CLI 组件:
创建虚拟机基础架构以及(可选)创建管理员集群
执行以下步骤进行设置并运行脚本。您下载并运行的脚本来自 anthos-samples 代码库。如果您希望在运行脚本之前详细了解该脚本,请参阅下一部分关于脚本。
设置环境变量:
export PROJECT_ID=PROJECT_ID export ADMIN_CLUSTER_NAME=ADMIN_CLUSTER_NAME export ON_PREM_API_REGION=ON_PREM_API_REGION export ZONE=ZONE
ON_PREM_API_REGION
:GKE On-Prem API 运行并存储其元数据的 Google Cloud 区域。请指定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。获取您可以安装的 GKE on Bare Metal 版本的列表:
gcloud container bare-metal admin-clusters query-version-config \ --location=ON_PREM_API_REGION | grep 1.16
本文档中的某些说明依赖于 GKE On-Prem API,该 API 支持部分可用的 GKE on Bare Metal 版本。
从上一个命令的输出中选择版本,并在环境变量中进行设置:
export BMCTL_VERSION=BMCTL_VERSION
我们建议您选择最高的兼容版本,以获取最新的 GKE on Bare Metal 功能和修复。
克隆
anthos-samples
代码库并切换到脚本所在的目录:git clone https://github.com/GoogleCloudPlatform/anthos-samples cd anthos-samples/anthos-bm-gcp-bash
运行脚本:
bash install_admin_cluster.sh
出现提示时,输入数字以选择安装模式:
- 输入 1 以使脚本设置虚拟机基础架构并安装管理员集群。
- 输入 2 以使脚本仅设置虚拟机基础架构。
出现提示时,确认您的选择。
该脚本会输出其运行的每个命令和状态。完成后,脚本将输出以下内容,具体取决于您是否选择安装管理员集群:
创建了管理员集群
✅ Installation 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-cp1 | 10.200.0.3 | Has control plane of admin cluster running inside | | abm-user-cluster-cp1 | 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 | |---------------------------------------------------------------------------------------------------------|
仅设置虚拟机
|---------------------------------------------------------------------------------------------------------| | VM Name | L2 Network IP (VxLAN) | INFO | |---------------------------------------------------------------------------------------------------------| | abm-admin-cluster-cp1 | 10.200.0.3 | 🌟 Ready for use as control plane for the admin cluster | | abm-user-cluster-cp1 | 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 | |---------------------------------------------------------------------------------------------------------|
关于脚本
如需详细了解 install_admin_cluster.sh
,请点击下一行中的 关于脚本。
关于脚本
该脚本会自动执行以下手动步骤:
-
创建一个名为
baremetal-gcr
的服务账号,并向服务账号授予其他权限,以避免不同的 API 和服务需要多个服务账号。 -
启用以下 Google Cloud API:
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
-
创建以下虚拟机:
- 一个虚拟机用于管理员工作站。管理员工作站将可以使用 SSH 访问所有其他集群节点。
- 一个虚拟机用于管理员集群的控制平面节点。
- 用户集群的工作器节点的两个虚拟机。
- 一个虚拟机用于用户集群的控制平面节点。
- 为虚拟机之间的第 2 层连接创建虚拟可扩展 LAN (VXLAN) 叠加网络。VXLAN 不是永久性的,因此如果您重新启动虚拟机实例,网络会被销毁。该网络设置为 10.200.0.0/24 子网。捆绑式负载均衡器需要第 2 层连接。
-
在管理员工作站上安装以下工具:
bmctl
kubectl
- Docker
该脚本还会将
baremetal-gcr
服务账号的服务账号密钥下载到管理员工作站。 -
通过执行以下任务,确保来自管理员工作站的
root@10.200.0.x
正常运行:- 在管理员工作站上生成新的 SSH 密钥。
- 将公钥添加到部署中的所有其他虚拟机上。
-
(可选)脚本使用以下配置文件创建管理员集群:
如果选择让该脚本创建管理员集群,该脚本将使用 SSH 以根用户身份登录管理员工作站。接下来,脚本会运行
bmctl
命令行工具来创建管理员集群。这是可用于创建管理员集群的工具之一。当 GKE on Bare Metal 创建集群时,它会在管理员工作站上部署 Kubernetes in Docker(种类)集群。此引导集群托管创建集群所需的 Kubernetes 控制器,并用于创建管理员集群。创建后,相关控制器会从引导集群迁移到管理员集群。最后,除非另行指定,否则当集群创建成功完成时,引导集群将被移除。引导集群需要 Docker 来拉取容器映像。
(可选)创建管理员集群
如果脚本创建了管理员集群,请跳到下一部分验证管理员集群。否则,请按照本部分中的步骤创建引导集群和管理员集群。
在创建管理员集群之前,您需要在管理员工作站上运行 bmctl register bootstrap
命令。此命令会在管理员工作站中部署临时 Kubernetes in Docker(种类)集群。此引导集群托管创建管理员集群所需的 Kubernetes 控制器。创建管理员集群时,引导集群上的控制器会预配节点、运行预检检查,并将管理员集群注册到舰队。成功创建管理员集群后,系统会自动删除引导集群。
控制台
在控制台中,转到创建 GKE on Bare Metal 集群页面。
确保从项目列表中选择
PROJECT_ID
。在左侧导航栏中,点击安装引导环境。
输入
ADMIN_CLUSTER_NAME
作为管理员集群名称。请注意,引导集群名称是在管理员集群名称前面加上 bootstrap-bootstrap-。选择
VERSION
作为管理员集群的版本。该脚本将此版本的bmctl
命令行工具下载到管理员工作站。您安装的 GKE on Bare Metal 版本必须与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 中的集群。
请按照下一部分中的步骤(而不是控制台中显示的步骤)创建引导集群。让控制台页面保持打开,因为您将返回该页面创建管理员集群。
gcloud CLI
打开一个新终端窗口。您将使用第二个终端窗口连接到管理员工作站,以创建引导集群。您将使用第一个终端窗口运行 gcloud CLI 命令以创建管理员集群。
创建引导集群
在管理员工作站上执行以下步骤。
使用 SSH 以根用户身份访问管理员工作站:
gcloud compute ssh root@abm-ws --zone ZONE
您可以忽略任何有关更新虚拟机的消息并完成本教程。如果您计划将虚拟机保留为测试环境,则可能需要按照 Ubuntu 文档中的说明更新操作系统或升级到下一个版本。
将您的用户凭据设置为应用默认凭据 (ADC):
gcloud auth application-default login
按照提示选择用于 ADC 的 Google 账号。
创建引导集群。
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
点击验证并创建。
控制台会在验证设置并创建集群时显示状态消息。
gcloud CLI
确保您之前定义的环境变量具有正确的值。虽然示例命令使用占位符,但它们需要与脚本使用的环境变量匹配。
echo $PROJECT_ID echo $ADMIN_CLUSTER_NAME echo $ON_PREM_API_REGION echo $BMCTL_VERSION
确认引导集群已注册为舰队的成员:
gcloud container fleet memberships list \ --project=PROJECT_ID
如果引导集群未列出,请检查您为
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
有关集群创建过程的详细信息会输出到管理员工作站。在创建集群之前,bmctl
会运行一系列预检检查以验证配置。如果预检检查通过,您会看到如下所示的内容:
[2023-03-22 23:12:47+0000] Waiting for cluster kubeconfig to become ready OK [2023-03-22 23:15:47+0000] Writing kubeconfig file [2023-03-22 23:15:47+0000] kubeconfig of cluster being created is present at bmctl-workspace/abm-cluster-1/abm-cluster-1-kubeconfig [2023-03-22 23:15:47+0000] Please restrict access to this file as it contains authentication credentials of your cluster. [2023-03-22 23:15:47+0000] Waiting for cluster to become ready OK [2023-03-22 23:20:17+0000] Please run [2023-03-22 23:20:17+0000] kubectl --kubeconfig bmctl-workspace/abm-cluster-1/abm-cluster-1-kubeconfig get nodes [2023-03-22 23:20:17+0000] to get cluster nodes status. [2023-03-22 23:20:17+0000] Waiting for node pools to become ready OK [2023-03-22 23:20:37+0000] Waiting for metrics to become ready in GCP OK [2023-03-22 23:25:38+0000] Waiting for cluster API provider to install in the created admin cluster OK [2023-03-22 23:25:48+0000] Moving admin cluster resources to the created admin cluster [2023-03-22 23:25:51+0000] Waiting for node update jobs to finish OK [2023-03-22 23:27:41+0000] Flushing logs... OK [2023-03-22 23:27:41+0000] Deleting membership... OK [2023-03-22 23:27:42+0000] Deleting bootstrap cluster.
验证管理员集群
您可以在管理员工作站的 root 账号的 bmctl-workspace
目录中找到管理员集群的 kubeconfig
文件。如需验证部署,请完成以下步骤。
如果脚本创建了管理员集群,请使用 SSH 以根用户身份访问管理员工作站:
gcloud compute ssh root@abm-ws --zone ZONE
您可以忽略任何有关更新虚拟机的消息并完成本教程。如果您计划将虚拟机保留为测试环境,则可能需要按照 Ubuntu 文档中的说明更新操作系统或升级到下一个版本。
使用集群配置文件的路径设置
KUBECONFIG
环境变量,以便在集群上运行kubectl
命令。export clusterid=ADMIN_CLUSTER_NAME export KUBECONFIG=$HOME/bmctl-workspace/$clusterid/$clusterid-kubeconfig kubectl get nodes
输出类似于以下内容:
NAME STATUS ROLES AGE VERSION abm-admin-cluster-cp Ready control-plane,master 91m v1.24.2-gke.1900
在环境变量中设置当前上下文:
export CONTEXT="$(kubectl config current-context)"
运行以下
gcloud
命令。此命令执行以下操作:- 为您的用户账号授予集群上的 Kubernetes
clusterrole/cluster-admin
角色。 - 配置集群,以便在本地计算机上运行
kubectl
命令,而无需通过 SSH 连接到管理员工作站。 - 允许您使用 Google 身份在控制台中登录集群。
将
YOUR_EMAIL_ADDRESS
替换为与您的 Google Cloud 账号关联的电子邮件地址。例如:--users=alex@example.com
。gcloud container fleet memberships generate-gateway-rbac \ --membership=ADMIN_CLUSTER_NAME \ --role=clusterrole/cluster-admin \ --users=YOUR_EMAIL_ADDRESS \ --project=PROJECT_ID \ --kubeconfig=$KUBECONFIG \ --context=$CONTEXT\ --apply
此命令的输出类似于以下内容,为了便于阅读,已将其截断:
Validating input arguments. Specified Cluster Role is: clusterrole/cluster-admin Generated RBAC policy is: -------------------------------------------- ... Applying the generate RBAC policy to cluster with kubeconfig: /root/bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig, context: ADMIN_CLUSTER_NAME-admin@ADMIN_CLUSTER_NAME Writing RBAC policy for user: YOUR_EMAIL_ADDRESS to cluster. Successfully applied the RBAC policy to cluster.
- 为您的用户账号授予集群上的 Kubernetes
探索完毕后,输入 exit 以退出管理员工作站。
在本地计算机上运行以下命令,以获取可通过 Connect 网关访问集群的 kubeconfig 条目:
gcloud container fleet memberships get-credentials ADMIN_CLUSTER_NAME
输出类似于以下内容:
Starting to build Gateway kubeconfig... Current project_id: PROJECT_ID A new kubeconfig entry "connectgateway_PROJECT_ID_global_ADMIN_CLUSTER_NAME" has been generated and set as the current context.
您现在可以通过 Connect 网关运行
kubectl
命令:kubectl get nodes
输出类似于以下内容:
NAME STATUS ROLES AGE VERSION abm-admin-cluster-cp Ready control-plane,master 94m v1.24.2-gke.1900
在 GKE on Bare Metal 1.16 及更高版本中,集群会自动注册到 GKE On-Prem API。这使得您可以使用 gcloud CLI 和控制台来升级和更新管理员集群。
创建用户集群
在脚本为虚拟机创建 L2 VXLAN 后,它会在 10.200.0.0/24 网络中分配以下 IP 地址。为用户集群配置网络和节点池设置时,您可以使用这些 IP 地址。
虚拟机名称 | 网络 IP | 节点说明 |
---|---|---|
abm-admin-cluster-cp1 | 10.200.0.3 | 管理员集群的控制平面节点 |
abm-user-cluster-cp1 | 10.200.0.4 | 用户集群的控制平面节点。 |
abm-user-cluster-w1 | 10.200.0.5 | 用户集群的工作器节点 |
abm-user-cluster-w2 | 10.200.0.6 | 用户集群的另一个工作器节点 |
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Terraform 创建用户集群。
控制台
请按照以下步骤在控制台中创建用户集群:
在控制台中,转到创建 GKE on Bare Metal 集群页面。
确保选择创建管理员集群的 Google Cloud 项目。
在选择集群类型下,选择为现有管理员集群创建用户集群
点击下一步。
集群基本信息
输入用户集群的名称或使用默认名称。
确保已选择新建的管理员集群。 您可以对本页面上的其余设置使用默认值。
点击左侧导航栏中的网络。
网络
在控制平面部分的控制平面节点 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 分钟或更长时间。控制台会在验证设置并创建集群时显示状态消息。
如果配置出现问题,控制台将显示一条错误消息,该消息应该足够清晰,以便您修复配置问题并再次尝试创建集群。
如需查看有关创建过程的详细信息,请点击显示详细信息以显示侧面板。点击
可关闭详细信息面板。创建集群后,将显示集群状态:正在运行。
创建集群后,点击
集群以返回集群页面。
gcloud CLI
您可以使用以下命令创建用户集群:
gcloud container bare-metal clusters create
创建集群后,您需要使用以下命令创建至少一个节点池:
gcloud container bare-metal node-pools create
如需创建用户集群,请执行以下操作:
确保您之前定义的环境变量具有正确的值。虽然示例命令使用占位符,但它们需要与脚本使用的环境变量匹配。
echo $PROJECT_ID echo $ADMIN_CLUSTER_NAME echo $ON_PREM_API_REGION echo $BMCTL_VERSION
运行以下命令以创建用户集群。请替换以下内容:
USER_CLUSTER_NAME
:集群的名称。请确保将
--admin-users
设置为与您的 Google 帐号关联的电子邮件地址,以便您可以管理集群。
系统已为您填充其余标志值。 如果需要,请滚动以验证
--admin-cluster-membership
标志具有正确的管理员集群名称值,即完全指定的成员资格名称中的最后一个部分。gcloud container bare-metal clusters create USER_CLUSTER_NAME \ --project=PROJECT_ID \ --admin-cluster-membership=projects/PROJECT_ID/locations/global/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
以下列表介绍了这些标志:
--project
:项目 ID,用户集群将在此项目中注册。此项目称为舰队宿主项目。--admin-cluster-membership
:完全指定的管理员集群名称,用于标识舰队中的管理员集群。--location
:GKE On-Prem API 运行并存储其元数据的 Google Cloud 区域。--version
:GKE on Bare Metal 版本。--admin-users
:添加您的电子邮件地址以授予 Kubernetes 基于角色的访问权限控制 (RBAC) 政策,从而为您提供对集群的完全管理员权限。--metal-lb-address-pools
:捆绑式 MetalLB 负载均衡器的地址池配置。IP 地址范围必须在脚本创建的10.200.0.0/24
网络中。地址范围不得包含分配给虚拟机的 IP 地址,也不得包含控制平面 VIP。但请注意,入站流量 VIP 必须位于此地址范围内。--control-plane-node-configs
:用户集群的控制平面节点配置。node-ip
的值为10.200.0.4
,这是脚本分配给虚拟机abm-user-cluster-cp1
的 IP 地址。--control-plane-vip
:控制平面的虚拟 IP。值10.200.0.50
在脚本创建的10.200.0.0/24
网络中,但与用于 MetalLB 负载均衡器地址池的 IP 地址范围不重叠。--control-plane-load-balancer-port
:负载均衡器通过其为控制平面提供服务的端口。虽然您可以配置其他值,但端口443
是用于 HTTPS 连接的标准端口。--ingress-vip
:入站流量服务的虚拟 IP。此 IP 地址必须在用于 MetalLB 负载均衡器地址池的 IP 地址范围内。--island-mode-service-address-cidr-blocks
:用于用户集群中的 Service 的 IP 地址范围(采用 CIDR 格式)。示例命令使用了10.96.0.0/20
,这是控制台提供的默认值。CIDR 范围必须介于 /24 和 /12 之间,其中 /12 提供的 IP 地址最多。我们建议您按照 RFC 1918 中所定义,将此 IP 地址空间中的范围用于专用互联网。--island-mode-pod-address-cidr-blocks
:用于用户集群中的 Pod 的 IP 地址范围(采用 CIDR 格式)。示例命令使用了192.168.0.0/16
,这是控制台提供的默认值。CIDR 范围必须介于 /18 和 /8 之间,其中 /8 提供的 IP 地址最多。我们建议您按照 RFC 1918 中所定义,将此 IP 地址空间中的范围用于专用互联网。--lvp-share-path
:这是可以在其中创建子目录的宿主机路径。系统会为每个子目录创建一个本地 PersistentVolume (PV)。--lvp-share-storage-class
:这是用于创建永久性卷的 StorageClass。StorageClass 在创建集群期间创建。--lvp-node-mounts-config-path
:这是可以在其中发现已装载磁盘的宿主机路径。系统会为每个装载创建一个本地 PersistentVolume (PV)。--lvp-node-mounts-config-storage
:在创建集群的过程中创建 PV 的存储类别。
运行该命令后,您会看到如下所示的输出:
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
。
如需了解操作的状态,请将输出中的 OPERATION_ID
复制到以下命令。打开另一个终端窗口并运行该命令。
gcloud container bare-metal operations describe OPERATION_ID \ --project=PROJECT_ID \ --location=ON_PREM_API_REGION
创建集群大约需要 15 分钟或更长时间。创建集群时,您可以不时运行上一个命令来获取当前状态。
创建集群后,您会看到如下所示的输出:
Created Anthos cluster on bare metal [https://gkeonprem.googleapis.com/v1/projects/PROJECT_ID/locations/ON_PREM_API_REGION/bareMetalClusters/USER_CLUSTER_NAME].
创建节点池
成功创建集群后,请运行以下命令以创建节点池。将 NODE_POOL_NAME
替换为节点池的名称,并确保 --cluster
标志的占位符仍设置为用户集群的名称。
gcloud container bare-metal node-pools create NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=PROJECT_ID \ --location=ON_PREM_API_REGION \ --node-configs='node-ip=10.200.0.5'
-node-configs
:分配给node-ip
的值是 VXLAN 中由脚本创建的 abm-user-cluster-w1 虚拟机的 IP 地址。
运行该命令后,您会看到如下所示的输出:
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/USER_CLUSTER_NAME/bareMetalNodePools/NODE_POOL_NAME].
其他用户集群命令
除了创建集群之外,您还可以运行其他 gcloud CLI 命令,例如:
- 要列出您的用户集群,请执行以下操作:
gcloud container bare-metal clusters list \ --project=PROJECT_ID \ --location=ON_PREM_API_REGION
- 要描述用户集群,请执行以下操作:
gcloud container bare-metal clusters describe USER_CLUSTER_NAME \ --project=PROJECT_ID \ --location=ON_PREM_API_REGION
如需了解详情,请参阅 gcloud container bare-metal clusters。
其他节点池命令
除了创建节点池之外,您还可以运行其他 gcloud CLI 命令,例如:
- 如需列出节点池,请运行以下命令:
gcloud container bare-metal node-pools list \ --cluster=USER_CLUSTER_NAME \ --project=PROJECT_ID \ --location=ON_PREM_API_REGION
- 如需描述节点池,请运行以下命令:
gcloud container bare-metal node-pools describe NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=PROJECT_ID \ --location=ON_PREM_API_REGION
如需了解详情,请参阅 gcloud container bare-metal node-pools。
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.tfvars
中的参数值并保存该文件。以下列表介绍了这些变量:
project_id
:项目 ID,用户集群将在此项目中注册。此项目称为舰队宿主项目。region
:您在本教程开头设置的 Google Cloud 区域。运行echo $ON_PREM_API_REGION
以获取值。admin_cluster_name
:您在本教程开头设置的管理员集群的名称。运行 echo$ADMIN_CLUSTER_NAME
以获取值。bare_metal_version
:用户集群的 GKE on Bare Metal 版本。如需使用用于管理员集群的同一版本,请运行echo $BMCTL_VERSION
以获取值。您也可以指定低于管理员集群的版本,但最多只能低一个次要版本。用户集群版本不得高于管理员集群版本。cluster_name
:您可以使用 TVARS 文件中的名称供用户集群使用,也可以指定您选择的名称。创建集群后,此名称便无法更改。admin_user_emails
:将被授予集群管理员权限的用户的电子邮件地址列表。请务必添加您的电子邮件地址,以便您可以管理集群。创建集群时,GKE On-Prem API 会将 Kubernetes 基于角色的访问权限控制 (RBAC) 政策应用于集群,以便为管理员用户授予 Kubernetes
clusterrole/cluster-admin
角色,该角色提供对集群内所有命名空间中所有资源的完整访问权限。此角色还允许用户使用其 Google 身份登录控制台。
将
terraform.tvars
中定义的默认值用于其余变量。该脚本在创建虚拟机和管理员集群时使用这些值。control_plane_ips
:控制平面节点的一个或多个 IPv4 地址列表。使用默认值,即脚本分配给虚拟机abm-user-cluster-cp1
的 IP 地址。worker_node_ips
:工作器节点机器的一个或多个 IPv4 地址列表。使用默认值,即脚本分配给虚拟机的abm-user-cluster-w1
和abm-user-cluster-w2
的 IP 地址。control_plane_vip
:控制平面的虚拟 IP (VIP)。使用默认值10.200.0.50
,它位于脚本创建的10.200.0.0/24
网络中。请注意,此 IP 地址不会与用于 MetalLB 负载均衡器地址池的 IP 地址范围重叠。ingress_vip
:要在负载均衡器上为 Ingress 代理配置的虚拟 IP 地址。使用默认值10.200.0.51
,它位于脚本创建的10.200.0.0/24
网络中。请注意,此 IP 地址位于用于 MetalLB 负载均衡器地址池的 IP 地址范围内。lb_address_pools
:定义 MetalLB 负载均衡器地址池的映射的列表。使用默认值。
将更改保存在
terraform.tfvars
中。初始化并创建 Terraform 方案:
terraform init
Terraform 会安装任何所需的库,例如 Google Cloud 提供程序。
检查配置,并根据需要进行更改:
terraform plan
应用 Terraform 方案以创建用户集群:
terraform apply
创建用户集群需要 15 分钟或更长时间。您可以在 Google Cloud 控制台的 GKE 集群页面上查看该集群。
连接到用户集群
使用控制台或 gcloud CLI 创建用户集群时,该集群会配置有您运行 gcloud container fleet memberships generate-gateway-rbac
时为管理员集群配置的 Kubernetes 基于角色的访问权限控制 (RBAC) 政策。借助这些 RBAC 政策,您可以使用 Google Cloud 身份(即与您的 Google Cloud 账号关联的电子邮件地址)连接到集群。这些 RBAC 政策可让您登录控制台,而无需任何其他配置。
在控制台中连接到集群
如果您使用 gcloud CLI 或 Terraform 创建用户集群,请转到控制台中的 GKE 集群页面:
确保选择了您在其中创建用户集群的项目。您应该会在列表中看到管理员集群和用户集群。
请注意,用户集群的类型列中有 Bare Metal: User。这表示集群由 GKE On-Prem API 管理。
如果您使用该脚本创建管理员集群,则该集群的类型列中会显示外部。这表示该集群并非由 GKE On-Prem API 管理。创建集群后,您可以将管理员集群配置为由 GKE On-Prem API 管理。
如需登录集群,请执行以下操作:
点击集群名称中的链接,然后点击侧面板上的登录。
选择使用您的 Google 身份登录。
点击 Login(登录)。
重复相同的步骤也可以登录管理员集群。
通过命令行连接到集群
GKE On-Prem API 会为您作为用户集群创建者配置 RBAC 政策。通过这些政策,您可以使用连接网关 kubeconfig
在本地桌面上运行 kubectl
命令。
在本地计算机上:
获取可通过连接网关访问集群的
kubeconfig
条目。gcloud container fleet memberships get-credentials USER_CLUSTER_NAME
输出类似于以下内容:
Starting to build Gateway kubeconfig... Current project_id: PROJECT_ID A new kubeconfig entry "connectgateway_PROJECT_ID_global_USER_CLUSTER_NAME" has been generated and set as the current context.
您现在可以通过 Connect 网关运行
kubectl
命令:kubectl get nodes
输出类似于以下内容:
NAME STATUS ROLES AGE VERSION abm-user-cluster-cp Ready control-plane,master 14m v1.24.2-gke.1900 abm-user-cluster-w1 Ready worker 8m28s v1.24.2-gke.1900
向用户集群添加其他节点池
控制台
在控制台中,转到 GKE 集群页面。
在集群列表中,点击集群的名称,然后点击详细信息面板中的更多详情。
点击节点标签页。
点击
添加节点池。输入节点池的名称。
在节点地址 1 字段中,输入以下 IP 地址:
10.200.0.6
这是脚本创建的 abm-user-cluster-w2 虚拟机的 IP 地址。
点击创建
如果需要,再次点击节点标签页。
新节点池会显示正在调整状态。
点击右上角的
以查看节点池创建的状态。您可能需要刷新页面才能看到节点池列表中更新后的状态。
gcloud CLI
运行以下命令以创建其他节点池。将 NODE_POOL_NAME_2
替换为节点池的名称,并确保 --cluster
标志的占位符仍设置为用户集群的名称。
gcloud container bare-metal node-pools create NODE_POOL_NAME_2 \ --cluster=USER_CLUSTER_NAME \ --project=PROJECT_ID \ --location=ON_PREM_API_REGION \ --node-configs='node-ip=10.200.0.6'
-node-configs
:分配给node-ip
的值是 VXLAN 中由脚本创建的 abm-user-cluster-w2 虚拟机的 IP 地址。
Terraform
如果您使用 Terraform 创建了集群,则创建后该集群包含两个节点,因此 VXLAN 中没有任何其他虚拟机可用于添加其他节点。如需了解如何添加节点池,请参阅 google_gkeonprem_bare_metal_cluster
参考文档。
您还可以使用 kubectl
验证新节点。您必须先运行前面显示的 gcloud container fleet memberships get-credentials
命令来提取集群配置:
kubectl get nodes
输出类似于以下内容:
NAME STATUS ROLES AGE VERSION
abm-user-cluster-cp Ready control-plane,master 24m v1.24.2-gke.1900
abm-user-cluster-w1 Ready worker 18m v1.24.2-gke.1900
abm-user-cluster-w2 Ready worker 52s v1.24.2-gke.1900
清理
以下各部分介绍了如何移除您根据本指南创建的集群和虚拟机。
删除用户集群
控制台
在控制台中,转到 GKE 集群页面。
在集群列表中,点击用户集群。
在详细信息面板中,点击更多详细信息。
点击窗口顶部附近的
删除。当系统提示您确认时,输入集群名称,然后点击确认。
点击右上角的
以查看删除状态。您可能需要刷新页面才能更新集群列表。
gcloud CLI
运行以下命令以删除集群:
gcloud container bare-metal clusters delete USER_CLUSTER_NAME \ --project=PROJECT_ID \ --location=ON_PREM_API_REGION \ --force
您可以使用 --force
标志来删除包含节点池的集群。如果没有 --force
标志,您必须先删除节点池,然后再删除集群。
如需了解其他标志,请参阅 gcloud container bare-metal clusters delete。
Terraform
运行以下命令:
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
会从舰队中取消注册集群,然后删除集群。等待集群被删除,然后再删除虚拟机。退出管理员工作站。
列出名称中包含
abm
的所有虚拟机:gcloud compute instances list | grep 'abm'
验证您可以安全删除名称中包含
abm
的所有虚拟机。验证后,您可以通过运行以下命令来删除
abm
虚拟机:gcloud compute instances list --format="value(name)" | \ grep 'abm' | \ xargs gcloud --quiet compute instances delete --zone ZONE
删除服务账号:
gcloud iam service-accounts delete baremetal-gcr@PROJECT_ID.iam.gserviceaccount.com
在确认提示中输入 y。
后续步骤