创建基本集群

本页面是指南的第二部分,该指南介绍了如何使用 Google Distributed Cloud 软件(以前称为 Google Distributed Cloud Virtual)在裸机硬件上创建 GKE 集群的小型概念验证安装。第一部分设置最低限度的基础架构,介绍如何设置硬件、规划 IP 地址以及设置必要的 Google Cloud 基础架构。本文档以上一部分的设置和规划为基础,向您介绍如何创建管理员集群和用户集群。然后,您可以继续执行创建 Service 和 Ingress

本指南可帮助您创建最小的 Google Distributed Cloud 安装。此最小安装可能不适合您的实际生产需求和应用场景。如需了解生产安装,请参阅安装指南

准备工作

  1. 确保您已按照本指南的上一部分设置最小基础架构所述设置了硬件并规划了 IP 地址。或者,使用 Google Cloud 控制台创建 GKE on Bare Metal 管理员集群流程的前提条件部分中的网络要求规划工具。

  2. 如果要使用 Terraform 创建用户集群,则需要在管理员工作站或其他计算机上使用 Terraform

    1. 确保您已安装最新的 Google Cloud CLI 组件:

      gcloud components update
      
  3. 请按照以下步骤激活并使用 GKE On-Prem API:

    1. 在项目中启用 API:

      gcloud services enable \
          --project PROJECT_ID \
          gkeonprem.googleapis.com
      

      PROJECT_ID 替换为您的舰队宿主项目的项目 ID。

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

    2. 如果这是您首次在项目中启用 GKE On-Prem API,则需要初始化该 API。为此,您可以调用 gcloud CLI 命令,该命令可用于显示可用于创建集群的版本:

      gcloud container bare-metal clusters query-version-config \
          --project=PROJECT_ID \
          --location="us-central1"
      

过程概览

创建基本集群包括以下主要步骤:

  1. 收集用于指定集群配置的信息

  2. 创建管理员集群,用于管理用户集群。

  3. 创建用户集群,用于运行工作负载。

1. 收集信息

使用您在设置最小基础架构中或通过网络规划器准备的信息来填充下表中的每个占位符。这些占位符与包含一个管理员集群和一个用户集群的最小安装的集群配置文件中的字段值相对应。某些占位符设置为生成的集群配置文件中预填充的值,但所有占位符均可修改。

基本集群信息
您要创建的管理员集群的名称。管理员工作站上的集群工件的位置和命名基于集群名称。集群命名空间源自集群名称。 ADMIN_CLUSTER_NAME
您要创建的用户集群的名称。管理员工作站上的集群工件的位置和命名基于集群名称。集群命名空间源自集群名称。 USER_CLUSTER_NAME
您在本指南第一部分中下载的 bmctl 的版本。 CLUSTER_VERSION
账号信息
管理员工作站上的 SSH 私钥文件的路径。默认情况下,路径为
/home/USERNAME/.ssh/id_rsa
SSH_PRIVATE_KEY_PATH
您要用于将集群连接到 Google Cloud 以及查看日志和指标的 Google Cloud 项目的 ID。此项目也称为舰队宿主项目 PROJECT_ID
与您的 Google Cloud 账号关联的电子邮件地址。例如:alex@example.com GOOGLE_ACCOUNT_EMAIL
节点机器 IP 地址
管理员集群控制平面节点的 IP 地址。 ADMIN_CP_NODE_IP
用户集群控制平面节点的 IP 地址。 USER_CP_NODE_IP
用户集群工作器节点的 IP 地址。 USER_WORKER_NODE_IP
VIP 地址
管理员集群的 Kubernetes API 服务器的 VIP 地址。 ADMIN_CP_VIP
用户集群的 Kubernetes API 服务器的 VIP 地址。 USER_CP_VIP
用作 Ingress 代理的外部地址的 VIP。 USER_INGRESS_VIP
用作 LoadBalancer 类型的 Service 的外部 IP 地址的 IP 地址范围。请注意,此范围包含 MetalLB 所需的 Ingress VIP。其他 IP 地址不能与此范围重叠。 START_IP-END_IP
Pod 和 Service CIDR
供管理员集群上的 Pod 使用的 IP 地址范围(采用 CIDR 地址块表示法)。建议的起始值是 192.168.0.0/16,即在生成的集群配置文件中预填充的值。 192.168.0.0/16
供管理员集群上的 Service 使用的 IP 地址范围(采用 CIDR 地址块表示法)。建议的起始值是 10.96.0.0/20,即在生成的集群配置文件中预填充的值。 10.96.0.0/20
供用户集群上的 Pod 使用的 IP 地址范围(采用 CIDR 地址块表示法)。推荐的起始值是 192.168.0.0/16,即在生成的集群配置文件中预先填充的值,也是控制台中的默认值。 192.168.0.0/16
供用户集群上的 Service 使用的 IP 地址范围(采用 CIDR 地址块表示法)。推荐的起始值是 10.96.0.0/20,即在生成的集群配置文件中预先填充的值,也是控制台中的默认值。 10.96.0.0/20

2. 创建管理员集群

以下步骤为最小管理员集群和用户集群安装创建管理员集群。在继续操作之前,请确保已为上面的收集信息部分的表中的每个占位符提供了值。

为项目启用 GKE On-Prem API (gkeonprem.googleapis.com) 后,新创建的集群会自动使用该 API 注册。即使集群配置文件中未指定 spec.gkeOnPremAPI,也会发生注册。通过向此 Google Cloud 托管的 API 注册,您可以使用 Google Cloud 控制台或 gcloud CLI 管理集群的生命周期。

如需停用自动注册,请在创建集群之前取消备注集群配置文件中的 spec.gkeOnPremAPI 部分并将 spec.gkeOnPremAPI.enabled 设置为 falsespec.gkeOnPremAPI.enabled 字段是可变的,因此您可以在创建集群后随时取消注册集群。

如需为最小安装创建管理员集群,请执行以下操作:

  1. 使用以下命令设置 Google Distributed Cloud 可用于创建集群的默认凭据:

    gcloud auth application-default login
    
  2. 如需生成集群配置文件,请从管理员工作站上的 /baremetal 目录运行以下命令:

    bmctl create config -c ADMIN_CLUSTER_NAME \
        --enable-apis --create-service-accounts --project-id=PROJECT_ID
    
  3. 验证管理员集群配置文件:

    以下集群配置文件填充了您在上一部分的规划表中输入的值。除了您输入的值之外,请注意与生成的配置文件之间的以下差异:

    • 此示例中删除了注释,以增强可读性。
    • 删除了 NodePool 规范。管理员集群不允许使用工作器节点。
    gcrKeyPath: bmctl-workspace/.sa-keys/PROJECT_ID-anthos-baremetal-gcr.json
    sshPrivateKeyPath: SSH_PRIVATE_KEY_PATH
    gkeConnectAgentServiceAccountKeyPath: bmctl-workspace/.sa-keys/PROJECT_ID-anthos-baremetal-connect.json
    gkeConnectRegisterServiceAccountKeyPath: bmctl-workspace/.sa-keys/PROJECT_ID-anthos-baremetal-register.json
    cloudOperationsServiceAccountKeyPath: bmctl-workspace/.sa-keys/PROJECT_ID-anthos-baremetal-cloud-ops.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: CLUSTER_VERSION
      gkeConnect:
        projectID: PROJECT_ID
      controlPlane:
        nodePoolSpec:
          nodes:
          - address: ADMIN_CP_NODE_IP
      clusterNetwork:
        pods:
          cidrBlocks:
          - 192.168.0.0/16
        services:
          cidrBlocks:
          - 10.96.0.0/20
      loadBalancer:
        mode: bundled
        ports:
          controlPlaneLBPort: 443
        vips:
          controlPlaneVIP: ADMIN_CP_VIP
      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: 250
      # GKEOnPremAPI (Optional) Specify if you wish to explicitly enable/disable the cloud hosted gkeonprem
      # API to enable/disable cluster lifecycle management from gcloud UI and Terraform.
      # gkeOnPremAPI:
        # enabled: false
        # location is the Cloud location for the cluster resource metadata where the cluster will be enrolled.
        # location: us-central1
    
  4. 将管理员工作站上生成的配置文件的内容替换为上面示例中的内容。

    打开生成的文件 bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME.yaml,并将其内容替换为您在上一步中验证的示例内容。

  5. 如需创建管理员集群,请从管理员工作站上的 /baremetal 目录运行以下命令:

    bmctl create cluster -c ADMIN_CLUSTER_NAME
    

    bmctl 命令在运行预检检查和创建集群时会向屏幕显示输出。详细信息会写入管理员工作站上的 baremetal/bmctl-workspace/ADMIN_CLUSTER_NAME/log 文件夹中的日志。

    集群创建过程可能需要几分钟时间才能完成。

  6. 验证集群已创建且正在运行:

    kubectl --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig \
        get nodes
    

    如果集群正在运行,响应将如下所示:

    NAME     STATUS  ROLES          AGE  VERSION
    node-01  Ready   control-plane  16h  v1.25.7-gke.1000
    
  7. 如需向您的用户账号授予集群的 Kubernetes clusterrole/cluster-admin 角色,请运行以下 gcloud 命令:

    gcloud container fleet memberships generate-gateway-rbac \
        --membership=ADMIN_CLUSTER_NAME \
        --role=clusterrole/cluster-admin \
        --users=GOOGLE_ACCOUNT_EMAIL \
        --project=PROJECT_ID \
        --kubeconfig=bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig \
        --context=ADMIN_CLUSTER_NAME-admin@ADMIN_CLUSTER_NAME \
        --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/<var class="edit"scope="ADMIN_CLUSTER_NAME">ADMIN_CLUSTER_NAME</var>/<var class="edit"scope="ADMIN_CLUSTER_NAME">ADMIN_CLUSTER_NAME</var>-kubeconfig, context: <var class="edit"scope="ADMIN_CLUSTER_NAME">ADMIN_CLUSTER_NAME</var>-admin@<var class="edit"scope="ADMIN_CLUSTER_NAME">ADMIN_CLUSTER_NAME</var>
    Writing RBAC policy for user: GOOGLE_ACCOUNT_EMAIL to cluster.
    Successfully applied the RBAC policy to cluster.
    

    此外,您还可以通过 RBAC 政策在 Google Cloud 控制台中登录集群以查看更多集群详细信息。

3. 创建用户集群

以下步骤将为最小管理员集群和用户集群安装创建用户集群。在继续操作之前,请确保已为上面的收集信息部分的表中的每个占位符提供了值。

如需为最小安装创建用户集群,请执行以下操作:

bmctl

为项目启用 GKE On-Prem API (gkeonprem.googleapis.com) 后,新创建的集群会自动使用该 API 注册。即使集群配置文件中未指定 spec.gkeOnPremAPI,也会发生注册。向此 Google Cloud 托管的 API 注册后,您可以使用 Google Cloud 控制台或 gcloud CLI 来管理集群生命周期。

如需停用自动注册,请在创建集群之前取消备注集群配置文件中的 spec.gkeOnPremAPI 部分并将 spec.gkeOnPremAPI.enabled 设置为 falsespec.gkeOnPremAPI.enabled 字段是可变的,因此您可以在创建集群后随时取消注册集群。

  1. 生成集群配置文件:

    bmctl create config -c USER_CLUSTER_NAME \
      --project-id=PROJECT_ID
    
  2. 验证用户集群配置文件:

    以下集群配置文件填充了您之前在规划表中输入的值。除了您输入的值之外,请注意与生成的配置文件之间的以下差异:

    • 此示例中删除了注释,以增强可读性。
    • 集群类型 spec.type 已设置为 user
    • 添加了 spec.clusterSecurity.authorization.clusterAdmin.gcpAccounts 字段,以将 clusterrole/cluster-admin 授予您的账号。此外,您还可以通过此字段在 Google Cloud 控制台中登录您的集群,以查看更多集群详细信息。
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-USER_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: USER_CLUSTER_NAME
      namespace: cluster-USER_CLUSTER_NAME
    spec:
      type: user
      profile: default
      anthosBareMetalVersion: CLUSTER_VERSION
      gkeConnect:
        projectID: PROJECT_ID
      controlPlane:
        nodePoolSpec:
          nodes:
          - address: USER_CP_NODE_IP
      clusterNetwork:
        pods:
          cidrBlocks:
          - 192.168.0.0/16
        services:
          cidrBlocks:
          - 10.96.0.0/20
      loadBalancer:
        mode: bundled
        ports:
          controlPlaneLBPort: 443
        vips:
          controlPlaneVIP: USER_CP_VIP
          ingressVIP: USER_INGRESS_VIP
        addressPools:
        - name: pool1
          addresses:
          - START_IP-END_IP
      clusterOperations:
        projectID: PROJECT_ID
        location: us-central1
      clusterSecurity:
        authorization:
          clusterAdmin:
            gcpAccounts:
            - GOOGLE_ACCOUNT_EMAIL
      storage:
        lvpNodeMounts:
          path: /mnt/localpv-disk
          storageClassName: local-disks
        lvpShare:
          path: /mnt/localpv-share
          storageClassName: local-shared
          numPVUnderSharedPath: 5
      nodeConfig:
        podDensity:
          maxPodsPerNode: 250
      # GKEOnPremAPI (Optional) Specify if you wish to explicitly enable/disable the cloud hosted gkeonprem
      # API to enable/disable cluster lifecycle management from gcloud UI and Terraform.
      # gkeOnPremAPI:
        # enabled: false
        # location is the Cloud location for the cluster resource metadata where the cluster will be enrolled.
        # location: us-central1
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: node-pool-1
      namespace: cluster-USER_CLUSTER_NAME
    spec:
      clusterName: USER_CLUSTER_NAME
      nodes:
      - address: USER_WORKER_NODE_IP
    
  3. 将管理员工作站上生成的配置文件的内容替换为上面示例中的内容。

    打开生成的文件 bmctl-workspace/USER_CLUSTER_NAME/USER_CLUSTER_NAME.yaml,并将其内容替换为您在上一步中验证的示例内容。

  4. 创建用户集群:

    bmctl create cluster -c USER_CLUSTER_NAME \
    --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig
    

    bmctl 命令在运行预检检查和创建集群时会向屏幕显示输出。详细信息会写入管理员工作站上的 baremetal/bmctl-workspace/USER_CLUSTER_NAME/log 文件夹中的日志。

    集群创建过程可能需要几分钟时间才能完成。

  5. 验证集群已创建且正在运行:

    kubectl --kubeconfig bmctl-workspace/USER_CLUSTER_NAME/USER_CLUSTER_NAME-kubeconfig \
      get nodes
    

    如果集群正在运行,响应将如下所示:

    NAME    STATUS   ROLES           AGE     VERSION
    nuc-3   Ready    control-plane   4m32s   v1.26.2-gke.1001
    nuc-4   Ready    worker          2m2s    v1.26.2-gke.1001
    

控制台

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

  1. 在控制台中,转到创建 GKE on Bare Metal 集群页面。

    转到“创建 GKE on Bare Metal 集群”

  2. 确保已选择 Google Cloud 项目列表 PROJECT_ID

  3. 点击创建集群

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

  5. 裸机旁边,点击配置。此时会显示前提条件页面。

  6. 选择集群类型下,选择为现有管理员集群创建用户集群

  7. 点击下一步

集群基本信息

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

  2. 确保已选择新建的管理员集群。

  3. GCP API 位置中,选择 us-central1

  4. Google Distributed Cloud version(Google 分布式云版本)中,选择 CLUSTER_VERSION 或使用默认值。您可以对本页面上的其余设置使用默认值。

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

网络

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

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

  3. 转到新建地址池部分。在 IP 地址范围 1 字段中输入 IP 地址范围:

    10.200.0.51-10.200.0.70
    
  4. 点击完成

  5. 虚拟 IP 部分中,输入控制平面 VIP 的 IP 地址:

    USER_CP_VIP
    
  6. Ingress VIP 输入 IP 地址:

    USER_INGRESS_VIP
    
  7. Service CIDR 和 Pod CIDR 部分中,如果您未更改规划工具中的 Service CIDR 和 Pod CIDR,则可以使用默认值。

    如果您更改了 CIDR,则输入要使用的 CIDR:

    • Service CIDR
    10.96.0.0/20
    
    • Pod CIDR
    192.168.0.0/16
    
  8. 点击左侧导航栏中的默认池

创建节点池

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

节点地址 1 字段中输入用户集群工作器节点的 IP 地址:

USER_WORKER_NODE_IP

创建集群

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

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

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

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

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

    屏幕截图集群已准备就绪

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

gcloud CLI

本部分介绍如何使用 gcloud CLI 创建用户集群和节点池。

  1. 运行以下命令以创建用户集群:

    gcloud container bare-metal clusters create USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=us-central1 \
      --admin-cluster-membership=ADMIN_CLUSTER_NAME \
      --admin-cluster-membership-project=PROJECT_ID \
      --admin-cluster-membership-location=global \
      --version=CLUSTER_VERSION \
      --admin-users=GOOGLE_ACCOUNT_EMAIL \
      --island-mode-service-address-cidr-blocks=10.96.0.0/20 \
      --island-mode-pod-address-cidr-blocks=192.168.0.0/16 \
      --metal-lb-address-pools='pool=lb-pool-1,manual-assign=True,addresses=START_IP-END_IP' \
      --control-plane-node-configs='node-ip=USER_CP_NODE_IP' \
      --control-plane-vip=USER_CP_VIP \
      --control-plane-load-balancer-port=443 \
      --ingress-vip=USER_INGRESS_VIP \
      --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/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=us-central1
    

    创建集群大约需要 15 分钟或更长时间。创建集群时,您可以不时运行上一个命令来获取当前状态。

    创建集群后,您会看到如下所示的输出:

    Created Anthos cluster on bare metal [https://gkeonprem.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/bareMetalClusters/USER_CLUSTER_NAME].
    
  2. 创建集群后,运行以下命令以在新创建的集群上创建节点池。

    gcloud container bare-metal node-pools create node-pool-1 \
      --cluster=USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=us-central1 \
      --node-configs node-ip=USER_WORKER_NODE_IP

如需了解详情和其他示例,请参阅以下内容:

Terraform

本部分介绍如何使用 Terraform 创建用户集群和节点池。

  1. 创建一个目录,并在该目录中创建一个新文件。文件名必须具有 .tf 扩展名。在本指南中,该文件名为 main.tf

    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    
  2. 验证用户集群 Terraform 资源:

    以下 Terraform 资源示例填充了您在上一部分的规划表中输入的值。

    resource "google_gkeonprem_bare_metal_cluster"  "cluster-basic" {
      provider = google-beta
      name = "USER_CLUSTER_NAME"
      project = "PROJECT_ID"
      location = "us-central1"
      admin_cluster_membership = "projects/PROJECT_ID/locations/global/memberships/ADMIN_CLUSTER_NAME"
      bare_metal_version = "CLUSTER_VERSION"
      network_config {
        island_mode_cidr {
          service_address_cidr_blocks = ["10.96.0.0/20"]
          pod_address_cidr_blocks = ["192.168.0.0/16"]
        }
      }
      control_plane {
        control_plane_node_pool_config {
          node_pool_config {
            labels = {}
            operating_system = "LINUX"
            node_configs {
              labels = {}
              node_ip = "USER_CP_NODE_IP"
            }
          }
        }
      }
      load_balancer {
        port_config {
          control_plane_load_balancer_port = 443
        }
        vip_config {
          control_plane_vip = "USER_CP_VIP"
          ingress_vip = "USER_INGRESS_VIP"
        }
        metal_lb_config {
          address_pools {
            pool = "pool1"
            addresses = [
              "START_IP-END_IP"
            ]
            avoid_buggy_ips = true
            manual_assign = true
          }
        }
      }
      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"
        }
      }
      security_config {
        authorization {
          admin_users {
            username = "GOOGLE_ACCOUNT_EMAIL"
          }
        }
      }
    }
    
    resource "google_gkeonprem_bare_metal_node_pool" "node-pool-default" {
      provider = google-beta
      name =  "node-pool-1"
      bare_metal_cluster = google_gkeonprem_bare_metal_cluster.cluster-basic.name
      project = "PROJECT_ID"
      location = "us-central1"
      node_pool_config {
        operating_system = "LINUX"
        node_configs {
          node_ip = "USER_WORKER_NODE_IP"
        }
      }
    }
    
  3. 将 Terraform 资源复制到 main.tf 并保存该文件。

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

    terraform init
    

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

  5. 检查配置,并根据需要进行更改:

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

    terraform apply
    

    出现提示时,输入 yes

    创建基本用户集群和节点池大约需要 15 分钟或更长时间,具体取决于网络情况。

  7. 如需为用户集群创建 kubeconfig 文件,请在管理员工作站上运行以下命令:

    bmctl get credentials --cluster USER_CLUSTER_NAME \
    --admin-kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig
    

    该命令的输出会显示用户集群的 kubeconfig 文件的名称,例如:

    bmctl-workspace/USER_CLUSTER_NAME/USER_CLUSTER_NAME-TIMESTAMP-kubeconfig
    

    文件名中的 TIMESTAMP 表示文件的创建日期和时间。

    由于此文件包含集群的身份验证凭据,因此您应该将其存储在具有受限访问权限的安全位置。

  8. 验证集群已创建且正在运行:

    kubectl --kubeconfig bmctl-workspace/USER_CLUSTER_NAME/USER_CLUSTER_NAME-TIMESTAMP-kubeconfig \
        get nodes
    

    如果集群正在运行,响应将如下所示:

    NAME    STATUS   ROLES           AGE     VERSION
    nuc-3   Ready    control-plane   4m32s   v1.26.2-gke.1001
    nuc-4   Ready    worker          2m2s    v1.26.2-gke.1001
    

如需了解详情和其他示例,请参阅以下内容:

连接到用户集群

无论您使用哪个工具来创建用户集群,您的电子邮件地址都会获得基于角色的访问控制 (RBAC) 政策,可让您连接到具有完整管理员权限的集群。电子邮件地址的指定位置取决于具体工具:

  • bmctl:您的电子邮件地址包含在示例用户配置文件的 clusterSecurity 部分中。

  • Terraform:您的电子邮件地址包含在示例 google_gkeonprem_bare_metal_cluster 资源的 security_config 部分中。

  • 控制台:作为集群创建者,您的电子邮件地址会自动包含在授权部分的集群基本信息页面上。

虽然仅指定了您的电子邮件地址,但您可以添加其他电子邮件地址,以向其他用户授予集群管理员权限。

授予电子邮件地址的 RBAC 政策会执行以下操作:

  • 向您授予集群的 Kubernetes clusterrole/cluster-admin 角色。

  • 允许您使用 Google 身份在 Google Cloud 控制台中登录集群。您可以在控制台的 GKE 集群页面上查看集群。

  • 允许您使用 Connect 网关的 kubeconfig 在本地计算机上运行 kubectl 命令。

如需获取 Connect 网关的 kubeconfig,请从本地计算机运行以下命令:

  1. 获取可通过 Connect 网关访问集群的 kubeconfig 条目。

    gcloud container fleet memberships get-credentials USER_CLUSTER_NAME  \
    --project=PROJECT_ID
    

    输出类似于以下内容:

    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
    nuc-3   Ready    control-plane   4m32s   v1.26.2-gke.1001
    nuc-4   Ready    worker          2m2s    v1.26.2-gke.1001
    

    许多 kubectl 命令需要管理员集群的 kubeconfig。您将需要在管理员工作站上运行这些命令。

后续步骤