创建用户集群

在 Google Distributed Cloud 中,用户集群用于运行工作负载,在多集群架构中,用户集群由管理员集群创建和管理。

创建管理员集群后,调用 bmctl create config 命令可创建一个 YAML 文件,您可以修改该文件以定义用户集群。如需应用配置并创建用户集群,请使用 bmctl create cluster 命令。预检检查适用于使用 bmctl create cluster 命令创建的用户集群。

从管理员集群卸载工作负载可以保护敏感的管理数据(例如存储在管理员集群中的 SSH 密钥),避免无需访问这些信息的人员访问它。此外,让用户集群彼此隔离有助于为您的工作负载提供良好的通用安全性。

前提条件

  • 从 Cloud Storage 下载了最新的 bmctl (gs://anthos-baremetal-release/bmctl/1.29.100-gke.251/linux-amd64/bmctl)。
  • 通过对与集群 API 服务器 (controlPlaneVIP) 的访问权限使用管理员集群。
  • 管理员集群节点与目标用户集群上的所有节点具有网络连接。
  • 运行 bmctl 的工作站与目标用户集群中的所有节点之间有网络连接。
  • 管理员工作站可以与每个用户集群节点建立 SSH 连接。
  • 在管理员集群上配置了连接注册服务账号,以便与 Connect 搭配使用。

启用 SELinux

如果要启用 SELinux 来保护容器,则必须确保在所有宿主机上以 Enforced 模式启用 SELinux。从 Google Distributed Cloud 1.9.0 版或更高版本开始,您可以在创建集群或升级集群之前或之后启用或停用 SELinux。在 Red Hat Enterprise Linux (RHEL) 上,SELinux 默认处于启用状态。如果 SELinux 在主机上处于停用状态或者您不确定,请参阅使用 SELinux 保护容器,了解有关如何启用 SELinux 的说明。

Google Distributed Cloud 仅在 RHEL 系统中支持 SELinux。

创建用户集群配置文件

用于创建用户集群的配置文件与用于创建管理员集群的配置文件几乎完全相同。唯一的区别是需移除本地凭据配置部分,使配置成为有效的 Kubernetes 资源集合。配置部分位于文件顶部的 bmctl configuration variables 部分下方。 如需查看用户集群配置示例,请参阅集群配置示例中的用户集群

默认情况下,用户集群会从管理它们的管理员集群继承其凭据。您可以选择性地替换这些凭据的部分或全部。

  1. 使用 bmctl create config 命令创建用户集群配置文件:

    bmctl create config -c USER_CLUSTER_NAME
    

    例如,发出以下命令,为名为 user1 的用户集群创建配置文件:

    bmctl create config -c user1
    

    该文件将写入 bmctl-workspace/user1/user1.yaml。该文件的通用路径为 bmctl-workspace/CLUSTER NAME/CLUSTER_NAME.yaml

  2. 修改配置文件,并进行以下更改:

    • 从配置中移除本地凭据文件路径:

      ...
        gcrKeyPath: (path to GCR service account key)
        sshPrivateKeyPath: (path to SSH private key, used for node access)
        gkeConnectAgentServiceAccountKeyPath: (path to Connect agent service account key)
        gkeConnectRegisterServiceAccountKeyPath: (path to Hub registration service account key)
        cloudOperationsServiceAccountKeyPath: (path to Cloud Operations service account key)
      ...
      
    • 更改配置以指定 user 集群类型而不是 admin

      ...
      spec:
        # Cluster type. This can be:
        #   1) admin:  to create an admin cluster. This can later be used to create
        #   user clusters.
        #   2) user:   to create a user cluster. Requires an existing admin cluster.
        #   3) hybrid: to create a hybrid cluster that runs admin cluster
        #   components and user workloads.
        #   4) standalone: to create a cluster that manages itself, runs user
        #   workloads, but does not manage other clusters.
        type: user
      ...
      
    • 通过在 gkeConnect.projectID 字段中指定项目 ID,将集群注册到集舰队。此项目即为舰队宿主项目

      ...
      gkeConnect:
         projectID: my-project-123
      ...
      
      • 或者,您可以将 gkeConnect.location 添加到集群规范,以指定运行舰队和 Connect 服务的 Google Cloud 区域。此区域成员资格会限制流向您所在区域的舰队服务流量。如果在集群规范中包含 gkeConnect.location,则您指定的区域必须与 clusterOperations.location 中配置的区域相同。如果区域不同,则集群创建将失败。
    • 如果您的 Google Cloud 项目中启用了 GKE On-Prem API,则项目中的所有集群都会自动在 clusterOperations.location 中配置的区域中注册 GKE On-Prem API

      • 如果要在 GKE On-Prem API 中注册项目中的所有集群,请务必执行准备工作中的步骤,以在项目中激活并使用 GKE On-Prem API。

      • 如果您不想在 GKE On-Prem API 中注册集群,请添加此部分并将 gkeOnPremAPI.enabled 设置为 false。如果您不想在项目中注册任何集群,请在项目中停用 gkeonprem.googleapis.com(GKE On-Prem API 的服务名称)。如需查看相关说明,请参阅停用服务

    • 指定控制平面节点的 IP 地址。

      ...
      # Sample control plane config
      controlPlane:
       nodePoolSpec:
         nodes:
         - address: 10.200.0.20
      ...
      
    • 确保负载均衡器 VIP 和地址池的管理员集群和用户集群规范相辅相成,并且不要与现有集群重叠。以下示例展示了一组管理员集群和用户集群配置的示例,指定了负载均衡和地址池:

      ...
      # Sample admin cluster config for load balancer and address pools
        loadBalancer:
          vips:
            controlPlaneVIP: 10.200.0.49
            ingressVIP: 10.200.0.50
          addressPools:
          - name: pool1
            addresses:
            - 10.200.0.50-10.200.0.70
      ...
      ...
      # Sample user cluster config for load balancer and address pools
      loadBalancer:
          vips:
            controlPlaneVIP: 10.200.0.71
            ingressVIP: 10.200.0.72
          addressPools:
          - name: pool1
            addresses:
            - 10.200.0.72-10.200.0.90
      ...
      

      用户集群配置文件的其余部分与管理员集群配置相同。

    • 指定集群节点的 pod 密度:

      ...
      # NodeConfig specifies the configuration that applies to all nodes in the cluster.
      nodeConfig:
        # podDensity specifies the pod density configuration.
        podDensity:
          # maxPodsPerNode specifies at most how many pods can be run on a single node.
          maxPodsPerNode: 110
      ...
      

      对于用户集群,maxPodsPerNode 的允许值为 32-250。如果未指定,则默认值为 110。集群创建后,此值无法更新。

      pod 密度也受集群的可用 IP 资源的限制。如需了解详情,请参阅 pod 网络

创建用户集群

发出 bmctl 命令应用用户集群配置并创建集群:

bmctl create cluster -c USER_CLUSTER_NAME --kubeconfig ADMIN_KUBECONFIG

请替换以下内容:

  • USER_CLUSTER_NAME:在上一部分中创建的集群名称。
  • ADMIN_KUBECONFIG:管理员集群 kubeconfig 文件的路径。

例如,对于名为 user1 的用户集群和路径为 kubeconfig bmctl-workspace/admin/admin-kubeconfig 的管理员集群 kubeconfig 文件,命令如下:

bmctl create cluster -c user1 --kubeconfig bmctl-workspace/admin/admin-kubeconfig

用户集群配置示例

如需查看用户集群配置示例,请参阅集群配置示例中的用户集群