在 Compute Engine 虚拟机上创建 Anthos on Bare Metal 管理员集群和用户集群

本页面介绍如何在 Compute Engine 虚拟机上创建 Anthos on Bare Metal 用户集群和管理员集群。提供的脚本为管理员集群和用户集群节点以及管理员工作站创建 Compute Engine 虚拟机。

管理员工作站托管在安装期间预配集群的命令行界面 (CLI) 工具和配置文件,以及在安装后与预配的集群交互的 CLI 工具。该脚本在管理员工作站虚拟机上安装 CLI 工具。

用户集群是运行容器化工作负载的 Kubernetes 集群。它由控制平面节点和工作器节点组成。用户集群必须包含一个或多个运行用户工作负载的工作器节点。管理员集群是管理一个或多个用户集群的 Kubernetes 集群,有助于创建、更新和删除用户集群。管理员集群仅包含控制平面节点。如需了解详情,请参阅管理员集群和用户集群部署

该脚本会在虚拟机之间配置虚拟 Extensible LAN (VXLAN) 叠加网络,并准备虚拟机创建集群。(可选)该脚本会创建管理员集群,或者您也可以选择自行创建管理员集群,以了解 Anthos clusters on Bare Metal 为创建管理员集群提供的工具。

借助提供的脚本,您可以快速试用 Anthos clusters on Bare Metal,而无需准备任何硬件。完成本页面上的步骤后,您可以在 Compute Engine 上运行的裸机测试环境中运行 Anthos 集群。

什么是 Anthos On-Prem API?

Anthos On-Prem API 是由 Google Cloud 托管的 API,可让您使用 Terraform 和标准 Google Cloud 应用管理本地集群的生命周期。Anthos On-Prem API 在 Google Cloud 的基础架构中运行。Terraform、控制台和 gcloud CLI 是 API 的客户端,它们使用 API 在数据中心内创建集群。

如需管理集群的生命周期,Anthos On-Prem API 必须将有关集群状态的元数据存储在 Google Cloud 中,并使用创建集群时指定的 Google Cloud 区域。此元数据可让 API 管理集群生命周期,并且不包含特定于工作负载的数据。

使用 Anthos On-Prem API 客户端创建集群时,您需要指定 Google Cloud 项目。创建集群后,它会自动注册到指定项目的舰队。此项目称为舰队宿主项目。集群创建后,舰队宿主项目便无法更改。

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. 确保您的 Google Cloud 项目已启用结算功能

  6. 请记下项目 ID,因为您需要用它来设置本页面上的脚本和命令中使用的环境变量。如果您选择现有项目,请确保您是 Project Owner 或 Project Editor。
  7. 您可以在 Cloud Shell 或运行 Linux 或 macOS 的本地机器上运行该脚本。如果您不使用 Cloud Shell:
    1. 确保您已安装最新的 Google Cloud CLI,这是用于与 Google Cloud 交互的命令行工具,包括 gcloud CLI Beta 版组件
    2. 如果您还没有 Beta 版组件,请运行以下命令进行安装:
      gcloud components install beta
    3. 根据需要更新 gcloud CLI 组件:
      gcloud components update

      根据 gcloud CLI 的安装方式,您可能会看到以下消息:“您无法执行此操作,因为此安装已停用 Google Cloud CLI 组件管理器。您可以运行以下命令来实现此安装的相同结果:”。按照说明复制并粘贴命令以更新组件。

    4. 确定您已安装 kubectl。如果您需要安装 kubectl,请运行以下命令:
      gcloud components install kubectl

创建虚拟机基础架构,还可以选择创建管理员集群

执行以下步骤进行设置并运行脚本。您下载并运行的脚本来自 anthos-samples 代码库。如果您希望在运行脚本之前详细了解该脚本,请参阅下一部分关于脚本

  1. 设置环境变量:

    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:Anthos On-Prem API 在其中运行并存储其元数据的 Google Cloud 区域。请指定 us-central1 或其他受支持的区域

    • ZONE:在其中创建 Compute Engine 虚拟机的 Google Cloud 可用区。您可以使用 us-central1-a 或任何其他 Compute Engine 可用区

  2. 运行以下命令以设置默认项目和可用区。

    gcloud config set project $PROJECT_ID
    gcloud config set compute/zone $ZONE
    

    如果您收到 PERMISSION_DENIED 错误,请仔细检查您输入的项目 ID。如果项目 ID 正确无误,请运行 gcloud auth login 以使用有权访问项目的帐号登录 gcloud CLI。

  3. 获取您可以安装的可用版本列表:

    gcloud beta container bare-metal admin-clusters query-version-config \
          --location=ON_PREM_API_REGION
    
  4. 从上一个命令的输出中选择版本,并在环境变量中进行设置:

    export BMCTL_VERSION=BMCTL_VERSION
    
  5. 克隆 anthos-samples 代码库并切换到脚本所在的目录:

    git clone https://github.com/GoogleCloudPlatform/anthos-samples
    cd anthos-samples/anthos-bm-gcp-bash
    
  6. 运行脚本:

    bash install_admin_cluster.sh
    
  7. 出现提示时,输入数字以选择安装模式:

    • 输入 1 让脚本设置虚拟机基础架构并安装管理员集群。
    • 输入 2 以使脚本仅设置虚拟机基础架构。
  8. 出现提示时,确认您的选择。

该脚本会输出其运行的每个命令和状态。完成后,脚本将输出以下内容,具体取决于您是否选择安装管理员集群:

已创建管理员集群

✅ 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,请点击下一行中的 关于脚本

关于脚本

该脚本会自动执行以下手动步骤:

  1. 创建一个名为 baremetal-gcr 的服务帐号,并向服务帐号授予其他权限,以避免不同的 API 和服务需要多个服务帐号。
  2. 启用以下 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
  3. 创建以下虚拟机:
    • 一个虚拟机用于管理员工作站。管理员工作站将通过 SSH 访问所有其他集群节点。
    • 一个虚拟机用于管理员集群的控制平面节点。
    • 用户集群的工作器节点的两个虚拟机。
    • 一个虚拟机用于用户集群的控制平面节点。
    该脚本还会验证所有虚拟机是否已启用 SSH。
  4. 为虚拟机之间的第 2 层连接创建虚拟可扩展 LAN (VXLAN) 叠加网络。VXLAN 不是永久性的,因此如果您重新启动虚拟机实例,网络会被销毁。该网络设置为 10.200.0.0/24 子网。捆绑式负载均衡器需要第 2 层连接。
  5. 在管理员工作站上安装以下工具:
    • bmctl
    • kubectl
    • Docker

    该脚本还会将 baremetal-gcr 服务帐号的服务帐号密钥下载到管理员工作站。

  6. 通过执行以下任务,确保来自管理员工作站的 root@10.200.0.x 正常运行:
    1. 在管理员工作站上生成新的 SSH 密钥。
    2. 将公钥添加到部署中的所有其他虚拟机上。
  7. (可选)脚本使用以下配置文件创建管理员集群:
      gcloud compute ssh root@"$VM_WS" --zone "${ZONE}" <<EOF
    set -x
    export PROJECT_ID=\$(gcloud config get-value project)
    ADMIN_CLUSTER_NAME=\$(curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/cluster_id -H "Metadata-Flavor: Google")
    BMCTL_VERSION=\$(curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/bmctl_version -H "Metadata-Flavor: Google")
    export ADMIN_CLUSTER_NAME
    export BMCTL_VERSION
    bmctl create config -c \$ADMIN_CLUSTER_NAME
    cat > bmctl-workspace/\$ADMIN_CLUSTER_NAME/\$ADMIN_CLUSTER_NAME.yaml << EOB
    ---
    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
      anthosBareMetalVersion: \$BMCTL_VERSION
      gkeConnect:
        projectID: \$PROJECT_ID
      controlPlane:
        nodePoolSpec:
          clusterName: \$ADMIN_CLUSTER_NAME
          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:
        # might need to be this location
        location: us-central1
        projectID: \$PROJECT_ID
      storage:
        lvpNodeMounts:
          path: /mnt/localpv-disk
          storageClassName: node-disk
        lvpShare:
          numPVUnderSharedPath: 5
          path: /mnt/localpv-share
          storageClassName: local-shared
      nodeConfig:
        podDensity:
          maxPodsPerNode: 250
    EOB
    
    bmctl create cluster -c \$ADMIN_CLUSTER_NAME
    EOF

    如果您选择让脚本创建管理员集群,该脚本会使用 SSH 以根用户身份登录管理员工作站。接下来,该脚本会运行 bmctl 命令行工具来创建管理员集群。这是可用于创建管理员集群的工具之一。

    当 Anthos Clusters on Bare Metal 创建集群时,它会在管理员工作站上部署 Kubernetes in Docker(种类)集群。此引导集群托管创建集群所需的 Kubernetes 控制器,并用于创建管理员集群。创建后,相关控制器会从引导集群迁移到管理员集群。最后,除非另行指定,否则当集群创建成功完成时,引导集群将被移除。引导集群需要 Docker 来拉取容器映像。

(可选)创建管理员集群

如果脚本创建了管理员集群,请跳到下一部分验证管理员集群。否则,请按照本部分中的步骤创建引导集群和管理员集群。

在创建管理员集群之前,您需要在管理员工作站上运行 bmctl register bootstrap 命令。此命令会在管理员工作站中部署临时 Kubernetes in Docker(种类)集群。此引导集群托管创建管理员集群所需的 Kubernetes 控制器。创建管理员集群时,引导集群上的控制器会预配节点、运行预检检查,并将管理员集群注册到舰队。成功创建管理员集群后,系统会自动删除引导集群。

控制台

  1. 在 Google Cloud 控制台中,转到“Anthos 集群”页面。

    转到“Anthos 集群”页面

  2. 请务必从项目列表中选择 PROJECT_ID

  3. 点击创建集群

  4. 在对话框中,点击本地

  5. 裸机旁边,点击配置前提条件页面显示管理员工作站和集群节点机器的要求。

    请确保选中创建管理员集群

  6. 在左侧导航栏中,点击安装引导环境

  7. 输入 ADMIN_CLUSTER_NAME 作为管理员集群名称。请注意,引导集群名称来源于在管理员集群名称前面加上 bootstrap-

  8. 选择 VERSION 作为管理员集群的版本。该脚本将此版本的 bmctl 命令行工具下载到管理员工作站。您安装的 Anthos clusters on Bare Metal 版本必须与 bmctl 版本匹配。

  9. Google Cloud API 位置字段中,从列表中选择 ON_PREM_API_REGION。此设置指定运行 Anthos On-Prem API 的区域,以及存储以下各项的区域:

    • Anthos On-Prem API 管理集群生命周期所需的集群元数据
    • 系统组件的 Cloud Logging 和 Cloud Monitoring 数据
    • Cloud Audit Logs 创建的管理员审核日志

    集群名称、项目和位置唯一标识 Google Cloud 中的集群。

请按照下一部分中的步骤(而不是控制台中显示的步骤)创建引导集群。让控制台页面保持显示,因为您将返回该页面创建管理员集群。

gcloud CLI

打开一个新终端窗口。您将使用第二个终端窗口连接到管理员工作站,以创建引导集群。您将使用第一个终端窗口运行 gcloud CLI 命令以创建管理员集群。

创建引导集群

在管理员工作站上执行以下步骤。

  1. 以根用户身份通过 SSH 连接到管理员工作站:

    gcloud compute ssh root@abm-ws --zone ZONE
    

    您可以忽略任何有关更新虚拟机的消息并完成本教程。如果您计划将虚拟机保留为测试环境,则可能需要按照 Ubuntu 文档中的说明更新操作系统或升级到下一个版本。

  2. 将您的用户凭据设置为应用默认凭据 (ADC):

    gcloud auth application-default login
    

    按照提示为 ADC 选择 Google 帐号。

  3. 创建引导集群。

    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..

创建管理员集群

控制台

  1. 从管理员工作站启动引导环境部分的安装引导环境页面上,点击检查连接

    成功后,控制台会显示 已建立连接

    您必须先建立与引导集群的连接,然后才能继续操作。如果连接未建立,请检查您为 bmctl register bootstrap 命令指定的参数:

    • 确保 --name 的值与引导环境基本信息部分中显示的 Derived bootstrap name(派生的引导名称)匹配。

    • 确保 --project-id 的值与您在控制台中选择的项目的 ID 匹配。

    如果您需要更改引导集群名称或项目 ID,请输入 Ctrl-C 退出 bmctl register bootstrap,然后重新运行该命令。

  2. 点击左侧导航栏中的网络

  3. 控制平面部分的控制平面节点 IP 1 字段中输入以下内容:

    10.200.0.3
    

    这是脚本创建的 VXLAN 中 abm-admin-cluster-cp 虚拟机的 IP 地址。

  4. 负载均衡器部分中,确保选中捆绑

  5. 虚拟 IP (VIP) 部分的控制平面 VIP 字段中,输入以下内容:

    10.200.0.48
    
  6. 点击验证并创建

    控制台会在验证设置并创建集群时显示状态消息。

gcloud CLI

  1. 确保您之前定义的环境变量具有正确的值。虽然示例命令使用占位符,但它们需要与脚本使用的环境变量匹配。

    echo $PROJECT_ID
    echo $ADMIN_CLUSTER_NAME
    echo $ON_PREM_API_REGION
    echo $BMCTL_VERSION
    
  2. 确认引导集群已注册为舰队的成员:

    gcloud container fleet memberships list \
      --project=PROJECT_ID
    

    如果引导集群未列出,请检查您为 bmctl register bootstrap 指定的引导集群名称和项目 ID。如果您需要更改引导集群名称或项目 ID,请输入 Ctrl-C 退出 bmctl register bootstrap,然后重新运行该命令。

  3. 使用捆绑式负载均衡器创建管理员集群:

    gcloud beta 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-configsnode-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 beta 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 文件。如需验证部署,请完成以下步骤。

  1. 如果脚本创建了管理员集群,请以根用户身份通过 SSH 连接到管理员工作站:

    gcloud compute ssh root@abm-ws --zone ZONE
    

    您可以忽略任何有关更新虚拟机的消息并完成本教程。如果您计划将虚拟机保留为测试环境,则可能需要按照 Ubuntu 文档中的说明更新操作系统或升级到下一个版本。

  2. 使用集群配置文件的路径设置 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
    
  3. 在环境变量中设置当前上下文:

    export CONTEXT="$(kubectl config current-context)"
    
  4. 运行以下 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.
    
  5. 探索完毕后,输入 exit 以退出管理员工作站。

  6. 在本地计算机上运行以下命令,以获取可通过 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.
    
  7. 您现在可以通过 Connect 网关运行 kubectl 命令:

    kubectl get nodes
    

    输出类似于以下内容:

    NAME                   STATUS   ROLES                  AGE   VERSION
    abm-admin-cluster-cp   Ready    control-plane,master   94m   v1.24.2-gke.1900
    
  8. 如果脚本创建了管理员集群,请运行以下命令以在 Anthos On-Prem API 中注册集群:

    gcloud beta container bare-metal admin-clusters enroll ADMIN_CLUSTER_NAME  \
        --project=PROJECT_ID \
        --admin-cluster-membership=projects/PROJECT_ID/locations/global/memberships/ADMIN_CLUSTER_NAME \
        --location=ON_PREM_API_REGION
    

    如果您创建了集群,则该集群会自动注册到 Anthos On-Prem API。

创建用户集群

在脚本为虚拟机创建 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 创建用户集群。

控制台

请按照以下步骤在控制台中创建用户集群:

  1. 在控制台中,转到“Anthos 集群”页面。

    转到“Anthos 集群”页面

  2. 确保已选择在其中创建管理员集群的 Google Cloud 项目。您应该会在列表中看到管理员集群。

  3. 点击创建集群

  4. 在对话框中,点击本地

  5. 裸机旁边,点击配置

  6. 点击左侧导航栏中的集群基本信息

集群基本信息

  1. 输入用户集群的名称或使用默认名称。

  2. 确保已选择新建的管理员集群。 您可以对本页面上的其余设置使用默认值。

  3. 点击左侧导航栏中的网络

网络

  1. 控制平面部分的控制平面节点 IP 1 字段中输入以下内容:

    10.200.0.4
    

    这是通过脚本创建的 VXLAN 中 abm-user-cluster-cp1 虚拟机的 IP 地址。

  2. 负载均衡器部分中,使用与 MetalLB 捆绑的默认负载均衡器。

  3. 新地址池部分的 IP 地址范围 1 字段中输入以下 IP 地址范围:

    10.200.0.51-10.200.0.70
    
  4. 点击完成

  5. 虚拟 IP 部分的控制平面 VIP 字段中输入以下 IP 地址:

    10.200.0.50
    
  6. Ingress VIP 输入以下 IP 地址:

    10.200.0.51
    
  7. 使用 Service 和 Pod CIDR 部分的默认 IP 地址。

  8. 点击左侧导航栏中的默认池

创建节点池

您的集群必须至少有一个节点池来存储工作器节点。节点池是用于在此集群中创建的工作器节点组的模板。

节点地址 1 字段中输入以下 IP 地址:

10.200.0.5

这是通过脚本创建的 VXLAN 中 abm-user-cluster-w1 虚拟机的 IP 地址。

创建集群

  1. 点击验证并创建以创建用户集群。

    创建用户集群需要 15 分钟或更长时间。控制台会在验证设置并创建集群时显示状态消息。

    如果配置出现问题,控制台将显示一条错误消息,该消息应该足够清晰,以便您修复配置问题并再次尝试创建集群。

    如需查看有关创建过程的详细信息,请点击显示详细信息以显示侧面板。点击 可关闭详细信息面板。

    创建集群后,将显示集群状态:正在运行

    屏幕截图集群已准备就绪

  2. 创建集群后,点击 集群以返回集群页面。

gcloud CLI

您可以使用以下命令创建用户集群:

gcloud beta container bare-metal clusters create

创建集群后,您需要使用以下命令创建至少一个节点池:

gcloud beta container bare-metal node-pools create

如需创建用户集群,请执行以下操作:

  1. 确保您之前定义的环境变量具有正确的值。虽然示例命令使用占位符,但它们需要与脚本使用的环境变量匹配。

    echo $PROJECT_ID
    echo $ADMIN_CLUSTER_NAME
    echo $ON_PREM_API_REGION
    echo $BMCTL_VERSION
    
  2. 运行以下命令以创建用户集群。请替换以下内容:

    • USER_CLUSTER_NAME:集群的名称。

    • 确保将 --admin-users 设置为与您的 Google 帐号关联的电子邮件地址,以便您可以管理集群。

    系统已为您填充其余标志值。 如果需要,请滚动以验证 --admin-cluster-membership 标志是否具有管理员集群名称(即完全指定的成员资格名称中的最后一个分段)的正确值。

    gcloud beta 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:Anthos On-Prem API 在其中运行并存储其元数据的 Google Cloud 区域。

  • --version:Anthos Clusters 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 beta 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 beta 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 beta container bare-metal clusters list \
    --project=PROJECT_ID \
    --location=ON_PREM_API_REGION
  • 要描述用户集群,请执行以下操作:
gcloud beta container bare-metal clusters describe USER_CLUSTER_NAME \
    --project=PROJECT_ID \
    --location=ON_PREM_API_REGION

如需了解详情,请参阅 gcloud beta container bare-metal clusters

其他节点池命令

除了创建节点池之外,您还可以运行其他 gcloud CLI 命令,例如:

  • 如需列出节点池,请运行以下命令:
gcloud beta container bare-metal node-pools list \
    --cluster=USER_CLUSTER_NAME \
    --project=PROJECT_ID \
    --location=ON_PREM_API_REGION
  • 如需描述节点池,请运行以下命令:
gcloud beta container bare-metal node-pools describe NODE_POOL_NAME \
    --cluster=USER_CLUSTER_NAME \
    --project=PROJECT_ID \
    --location=ON_PREM_API_REGION

如需了解详情,请参阅 gcloud beta container bare-metal node-pools

Terraform

您可以使用以下基本配置示例来创建具有捆绑式 MetalLB 负载均衡器的用户集群。如需了解详情,请参阅 google_gkeonprem_bare_metal_cluster 参考文档

  1. 在您克隆了 anthos-samples 的目录中,切换到 Terraform 示例所在的目录:

    cd anthos-samples/anthos-onprem-terraform/abm_user_cluster_metallb
    

    该示例提供了一个传入 main.tf 的示例变量文件。

  2. 复制 terraform.tfvars.sample 文件:

    cp terraform.tfvars.sample terraform.tfvars
    
    
    project_id          = "PROJECT_ID"
    region              = "ON_PREM_API_REGION"
    admin_cluster_name  = "ADMIN_CLUSTER_NAME"
    bare_metal_version  = "VERSION"
    admin_user_emails   = ["YOUR_EMAIL_ADDRESS", "ADMIN_2_EMAIL_ADDRESS"]
    cluster_name        = "abm-user-cluster-metallb"
    control_plane_ips   = ["10.200.0.4"]
    worker_node_ips     = ["10.200.0.5", "10.200.0.6"]
    control_plane_vip   = "10.200.0.50"
    ingress_vip         = "10.200.0.51"
    lb_address_pools    = [
        { name = "lbpool_1", addresses = ["10.200.0.51-10.200.0.70"] }
    ]
    
  3. 修改 terraform.tfvars 中的参数值并保存该文件。

    以下列表介绍了这些变量:

    • project_id:将在其中注册用户集群的项目的 ID。此项目称为舰队宿主项目。

    • region:您在本教程开头设置的 Google Cloud 区域。运行 echo $ON_PREM_API_REGION 以获取值。

    • admin_cluster_name:您在本教程开头设置的管理员集群的名称。运行 echo $ADMIN_CLUSTER_NAME 以获取值。

    • bare_metal_version:用户集群的 Anthos Clusters on Bare Metal 版本。如需使用用于管理员集群的同一版本,请运行 echo $BMCTL_VERSION 以获取值。如果愿意,您可以指定的版本不超过比管理员集群低一个次要版本。用户集群版本不得高于管理员集群版本。

    • cluster_name:您可以使用 TVARS 文件中用户集群的名称或指定您选择的名称。创建集群后,此名称便无法更改。

    • admin_user_emails:要向其授予集群管理员权限的用户的电子邮件地址列表。请务必添加您的电子邮件地址,以便您可以管理集群。

      创建集群后,Anthos 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-w1abm-user-cluster-w2 的 IP 地址。

    • control_plane_vip:控制平面的虚拟 IP (VIP)。使用默认值 10.200.0.50,它位于脚本创建的 10.200.0.0/24 网络中。请注意,此 IP 地址不会与用于 MetalLB 负载均衡器地址池的 IP 地址范围重叠。

    • ingress_vip:要在负载均衡器上为入站流量代理配置的虚拟 IP 地址。使用默认值 10.200.0.51,它位于脚本创建的 10.200.0.0/24 网络中。请注意,此 IP 地址位于用于 MetalLB 负载均衡器地址池的 IP 地址范围内。

    • lb_address_pools:用于定义 MetalLB 负载均衡器的地址池的映射列表。使用默认值。

  4. 将更改保存在 terraform.tfvars 中。

  5. 初始化并创建 Terraform 方案:

    terraform init
    

    Terraform 会安装任何所需的库,例如 Google Cloud 提供程序。

  6. 查看配置,并根据需要进行更改:

    terraform plan
    
  7. 应用 Terraform 方案以创建用户集群:

    terraform apply
    

    创建用户集群需要 15 分钟或更长时间。您可以在 Google Cloud 控制台中的 Anthos 集群页面上查看集群。

连接到用户集群

使用控制台或 gcloud CLI 创建用户集群时,该集群会配置有您运行 gcloud container fleet memberships generate-gateway-rbac 时为管理员集群配置的 Kubernetes 基于角色的访问权限控制 (RBAC) 政策。借助这些 RBAC 政策,您可以使用 Google Cloud 身份(即与您的 Google Cloud 帐号关联的电子邮件地址)连接到集群。这些 RBAC 政策让您无需任何额外配置即可登录控制台。

在控制台中连接到集群

如果您使用 gcloud CLI 创建用户集群,请进入控制台中的“Anthos 集群”页面:

转到“Anthos 集群”页面

确保选择了您在其中创建用户集群的项目。您应该会在列表中看到管理员集群和用户集群。

请注意,用户集群在类型列中具有 Anthos(裸金属:用户)。这表示集群由 Anthos On-Prem API 管理。

管理员集群的类型列包含外部。这表示集群不受 Anthos On-Prem API 管理。

屏幕截图集群列表

虽然管理员集群由脚本使用 bmctl 创建,但您可以将管理员集群配置为由 Anthos On-Prem API 管理

如需登录集群,请执行以下操作:

  1. 点击集群名称中的链接,然后点击侧面板上的登录

  2. 选择使用您的 Google 身份登录

  3. 点击 Login(登录)。

重复相同的步骤也可以登录管理员集群。

屏幕截图集群列表

通过命令行连接到集群

Anthos On-Prem API 以用户集群创建者的身份为您配置 RBAC 政策。这些政策允许您使用 Connect 网关的 kubeconfig 在本地桌面上运行 kubectl 命令。

在本地计算机上:

  1. 获取可通过 Connect 网关访问集群的 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.
    
  2. 您现在可以通过 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
    

向用户集群添加其他节点池

控制台

  1. 在 Google Cloud 控制台中,转到“Anthos 集群”页面。

    转到“Anthos 集群”页面

  2. 在集群列表中,点击集群的名称,然后点击详细信息面板中的更多详情

  3. 点击节点标签页。

  4. 点击 添加节点池

  5. 输入节点池的名称。

  6. 节点地址 1 字段中,输入以下 IP 地址:

    10.200.0.6
    

    这是脚本创建的 abm-user-cluster-w2 虚拟机的 IP 地址。

  7. 点击创建

  8. 如果需要,再次点击节点标签页。

  9. 新节点池会显示正在调整状态。

  10. 点击右上角的 以查看节点池创建的状态。您可能需要刷新页面才能看到节点池列表中更新后的状态。

gcloud CLI

运行以下命令以创建其他节点池。将 NODE_POOL_NAME_2 替换为节点池的名称,并确保 --cluster 标志的占位符仍设置为用户集群的名称。

gcloud beta 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

清理

删除用户集群

控制台

  1. 在控制台中,转到“Anthos 集群”页面。

    转到“Anthos 集群”页面

  2. 在集群列表中,点击用户集群。

  3. 详细信息面板中,点击更多详细信息

  4. 点击窗口顶部附近的 删除

  5. 当系统提示您确认时,输入集群名称,然后点击确认

  6. 点击右上角的 以查看删除状态。您可能需要刷新页面才能更新集群列表。

gcloud CLI

运行以下命令以删除集群:

gcloud beta container bare-metal clusters delete USER_CLUSTER_NAME \
  --project=PROJECT_ID \
  --location=ON_PREM_API_REGION \
  --force

您可以使用 --force 标志来删除包含节点池的集群。如果没有 --force 标志,您必须先删除节点池,然后再删除集群。

如需了解其他标志,请参阅 gcloud beta container bare-metal clusters delete

Terraform

运行以下命令:

terraform destroy

等待系统删除用户集群,然后再删除管理员集群和虚拟机。

删除管理员集群和虚拟机

  1. 从 Anthos On-Prem API 取消注册管理员集群:

    gcloud beta container bare-metal admin-clusters unenroll ADMIN_CLUSTER_NAME \
        --project=PROJECT_ID \
        --location=ON_PREM_API_REGION
    
  2. 连接到管理员工作站:

    gcloud compute ssh root@abm-ws --zone ZONE
    
  3. 删除管理员集群:

    bmctl reset -c ADMIN_CLUSTER_NAME
    

    bmctl 会从舰队中取消注册集群,然后删除集群。等待集群被删除,然后再删除虚拟机。

  4. 退出管理员工作站。

  5. 列出名称中包含 abm 的所有虚拟机:

    gcloud compute instances list | grep 'abm'
    
  6. 验证您是否可以安全删除名称中包含 abm 的所有虚拟机。

    验证后,您可以通过运行以下命令来删除 abm 虚拟机:

    gcloud compute instances list --format="value(name)" | \
      grep 'abm'  | \
      xargs gcloud --quiet compute instances delete
    
  7. 删除服务帐号:

    gcloud iam service-accounts delete baremetal-gcr@PROJECT_ID.iam.gserviceaccount.com
    

    在确认提示中输入 y

    后续步骤