使用 Google Cloud 控制台创建管理员集群

使用 Google Cloud 控制台为 Google Distributed Cloud 软件 (仅适用于 VMware)创建管理员集群,以便使用图形界面获取结构化指导。您 还可以使用 gkectlGoogle Cloud 控制台创建管理员集群。

准备工作

  • 确保您已设置并且可以登录管理员工作站,如创建管理员工作站中所述。

  • 确保服务账号的 JSON 密钥文件位于管理员工作站上。

  • 查看 IP 地址规划文档。确保您有足够的 IP 地址供三个控制平面节点和一个控制平面 VIP 使用。如果您计划创建任何 kubeception 用户集群,则必须有足够的 IP 地址供这些用户集群的控制平面节点使用。

  • 查看负载均衡概览,并重新考虑有关要使用的负载均衡器类型的决定。对于手动负载均衡器,您必须先设置负载均衡器,然后才能创建管理员集群。

  • 如果您使用 gkectl 创建管理员集群,请决定您要为 Google Distributed Cloud 组件使用公共仓库还是私有仓库。如需了解如何使用私有 Docker 注册表,请参阅 privateRegistry。Terraform 和 Google Cloud 控制台均不支持使用私有 Docker 注册表来存储系统组件。

  • 决定您要在管理员集群节点上运行的操作系统类型。

  • 如果您的组织要求出站流量通过代理服务器,请务必将所需的 API 和 Artifact Registry 地址列入许可名单

  • 在 1.29 版及更高版本中,服务器端预检检查默认处于启用状态。服务器端预检检查需要额外的防火墙规则。在管理员集群的防火墙规则中,搜索“预检检查”,并确保已配置所有必需的防火墙规则。服务器端预检检查在引导集群上运行,而不是在管理员工作站上本地运行。

过程概览

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

以下是使用控制台创建管理员集群的概要步骤:

  1. 在控制台中,输入 gkectl register bootstrap 所需的信息。控制台会显示 gkectl register bootstrap 命令以及您输入的信息。显示的命令还包含您需要在运行该命令之前指定的路径标志。

  2. 在管理员工作站上,运行 gkectl register bootstrap 以创建引导集群。该命令完成引导集群的创建后,输出会通知您完成管理员集群配置。该进程会继续运行,直到创建管理员集群为止。

  3. 返回到控制台,完成创建集群所需信息的输入。在集群创建期间,gkectl register bootstrap 命令会输出进度信息,并在管理员工作站上写入日志。创建管理员集群后,系统会自动删除引导集群。

开始配置集群

  1. 在控制台中,前往在 VMware 上创建集群 页面。

    前往“在 VMware 上创建集群”

  2. 选择您要在其中创建集群的 Google Cloud 项目。

    在后续部分中创建引导集群时,所选项目 ID 会显示在 gkectl register bootstrap 命令的 --project-id 标志中。

  3. 确保选中创建管理员集群

  4. 点击下一部分:安装引导环境

安装引导环境

在本部分中,您将输入 gkectl register bootstrap 命令所需的信息。当您在界面字段中输入值时,控制台会将这些值复制到在页面底部的从管理员工作站引导环境部分中显示的 gkectl register bootstrap 命令的相应标志。

引导环境基本信息

  1. 输入管理员集群的名称。控制台使用集群名称作为页面底部显示的 gkectl register bootstrap 命令中 --target-cluster-name 标志的值。名称的长度上限为 20 个字符。

  2. Google Cloud API 位置字段中,从列表中选择一个 Google Cloud区域。此设置指定在其中运行以下 API 和服务的区域:

    • GKE On-Prem API (gkeonprem.googleapis.com)
    • Fleet 服务 (gkehub.googleapis.com)
    • Connect 服务 (gkeconnect.googleapis.com)

    此设置还可控制存储以下内容的区域:

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

    Google Cloud API 位置 字段对应于 --location 标志 在 gkectl register bootstrap 命令中。

  3. 管理员集群版本 字段中,输入用于创建集群的版本。您在此处选择的版本必须与您在 gkectl register bootstrap 命令的 --bundle-path 标志中指定的 软件包的版本一致。

vCenter 配置

如果您使用 gkeadm 创建了管理员工作站,请打开管理员工作站配置文件,以便将 vCenter 部分中的值复制到控制台中的字段。请注意,生成的管理员集群配置文件也包含此信息。

本部分中的大多数字段不可变。如果您需要了解某个字段 是可变还是不可变,请参阅管理员集群配置文件参考中的 vCenter部分

  1. 地址字段中,输入 vCenter Server 地址

    • 管理员工作站配置文件:使用 vCenter.credentials.address字段中的值。

    • 地址 字段对应于 gkectl register bootstrap 命令中的 --vcenter-address 标志。

  2. 数据中心 字段中,输入 vCenter 数据中心的名称。

    • 管理员工作站配置文件:使用 vCenter.datacenter字段中的值。

    • 数据中心 字段对应于 gkectl register bootstrap 命令中的 --vcenter-datacenter 标志。

  3. 集群名称 字段中,输入您的 vCenter 集群的名称。

    • 管理员工作站配置文件:使用 vCenter.cluster字段中的值。

    • 集群名称 字段对应于 gkectl register bootstrap 命令中的 --vcenter-cluster 标志。

  4. 资源池字段中,输入 vCenter 资源池的名称或路径。

    • 管理员工作站配置文件:使用 vCenter.resourcePool字段中的值。

    • 资源池 字段对应于 gkectl register bootstrap 命令中的 --vcenter-resource-pool 标志。

  5. 通过输入以下项之一来配置存储选项:

    • Datastore 字段:输入您的 vCenter Datastore的名称。您指定的值必须是名称,而不是路径。如果您需要输入路径,请在文件夹 字段中输入。

      • 管理员工作站配置文件:使用 vCenter.datastore字段中的值。

      • Datastore 字段对应于 gkectl register bootstrap 命令中的 --vcenter-datastore 标志。

    • 存储政策名称 字段:输入集群节点的 虚拟机存储政策的名称。如需了解详情,请参阅配置存储政策

      • 管理员工作站配置文件:使用 vCenter.storagePolicyName字段中的值。

      • 存储政策名称 字段对应于 gkectl register bootstrap 命令中的 --vcenter-storage-policy 标志。

    您必须在数据存储区字段或存储政策名称字段中输入值,但不能同时在这两个字段中输入值。

  6. (可选)在 文件夹 字段中,输入集群 虚拟机所在的 vCenter 文件夹的名称。

    • 管理员工作站配置文件:使用 vCenter.folder字段中的值。

    • 文件夹 字段对应于 gkectl register bootstrap 命令中的 --vcenter-folder 标志。

  7. 网络 字段中,输入 vCenter 网络的名称。

    • 管理员工作站配置文件:使用 vCenter.network字段中的值。

    • 网络 字段对应于 gkectl register bootstrap 命令中的 --vcenter-network 标志。

  8. CA 证书路径字段中,输入 vCenter Server 的根 CA 证书的路径。

    • 如果您使用 gkeadm 创建了管理员工作站,则 gkeadm 会将您在本地拥有的 CA 证书文件复制到管理员工作站。

    • CA 证书路径 字段对应于 gkectl register bootstrap 命令中的 --vcenter-ca-cert-path

获取 CA 证书

创建引导集群后,您需要在集群基本信息页面上的 CA 证书数据字段中提供 PEM 格式的 vCenter CA 证书。运行以下命令以显示该证书:

cat CA_CERT_PATH

CA_CERT_PATH 替换为 vCenter Server 的根 CA 证书的路径。如果您在本地运行该命令,请在管理员工作站配置文件的 vCenter.caCertPath 中使用该路径。

将整个证书复制到文本编辑器中,以便在创建引导集群后,随时将其粘贴到集群基本信息页面上的 CA 证书数据字段中。

从管理员工作站中引导环境

运行 gkectl register bootstrap 命令时,系统会提示您输入 vCenter 账号的用户名和密码。确保您有可用的凭证。如果您使用 gkeadm 创建了管理员工作站,则用户名和密码位于 credential.yaml 文件中。

  1. 滚动到从管理员工作站中引导环境 部分,以显示 gkectl register bootstrap 命令。

    在前往管理员工作站创建引导集群时,请保持此页面处于打开状态。

  2. gkectl register bootstrap 命令复制并粘贴到文本编辑器中,以便为以下标志指定值:

        ./gkectl register bootstrap \
          ...
          --bundle-path=BUNDLE_PATH \
          ...
          --component-access-service-account-key-path=COMPONENT_ACCESS_SA_PATH \
          --register-service-account-key-path=CONNECT_REGISTER_SA_PATH \
          --stackdriver-service-account-key-path=LOG_MON_SA_PATH \
          --cloud-audit-logging-service-account-key-path=CLOUD_AUDIT_SA_PATH \
          --admin-kubeconfig-out=KUBECONFIG_NAME
    

    将以下内容替换为管理员工作站路径:

    • BUNDLE_PATH:软件包文件的路径。如果您使用 gkeadm 创建了管理员工作站,则软件包文件位于 /var/lib/gke/bundles/ 中。文件名取决于 Google Distributed Cloud 版本,例如 gke-onprem-vsphere-1.31.0-gke.889-full.tgz
    • COMPONENT_ACCESS_SA_PATH:组件访问服务帐号的密钥文件的路径。
    • CONNECT_REGISTER_SA_PATH:连接注册服务账号的密钥文件的路径。
    • LOG_MON_SA_PATH:日志记录监控服务帐号的密钥文件的路径。
    • CLOUD_AUDIT_SA_PATH:审核日志记录服务帐号的路径。如果您未创建审核日志记录服务账号,请指定日志记录监控服务账号的密钥文件路径。
    • KUBECONFIG_NAMEgkectl register bootstrap 命令创建的 kubeconfig 文件的名称。如果您未指定此标志,该命令会在当前工作目录中创建名为 kubeconfig 的文件。如果已存在名为 kubeconfig 的文件,则该命令会覆盖该文件。

    此外,如果您使用 gkeadm 创建了管理员工作站,则表示 gkectl 已下载到 /usr/bin/ 目录。在这种情况下,请从命令开头移除 ./,因为 gkectl 不在当前工作目录中。

  3. 使用 SSH 连接到您的管理员工作站。

  4. 复制该命令并将其粘贴到管理员工作站上的终端窗口中。

  5. 出现提示时,输入(或复制并粘贴)vCenter 用户名。用户名不会回显到屏幕。

  6. 出现提示时,输入(或复制并粘贴)vCenter 密码。密码不会回显到屏幕。

该命令会运行大量验证。gkectl 成功创建引导集群后,您会看到如下所示的输出,为了便于阅读,已经过截断处理:

Running workstation validations
- Validation Category: Workstation
    - [SUCCESS] Workstation OS
    - [SUCCESS] Workstation Hardware
    - [SUCCESS] Workstation Package
    - [SUCCESS] Workstation NTP
    - [SUCCESS] Workstation Docker
...
All validation results were SUCCESS.
Unpacking GKE on-prem bundle: /var/lib/gke/bundles/gke-onprem-vsphere-1.31.0-gke.889-full.tgz
...
Successfully created and registered the bootstrap cluster
...
Waiting for preflight checks to run or OnPremAdminCluster to be applied...... -

该进程会继续运行,直到创建管理员集群为止。

如果您在创建管理员集群之前退出 gkectl register bootstrap 命令,管理员集群创建会失败,您需要使用以下命令删除引导集群:

gkectl delete bootstrap \
    --target-cluster-name=ADMIN_CLUSTER_NAME \
    --project-id=PROJECT_ID \
    --location=REGION \
     --register-service-account-key-path=CONNECT_REGISTER_SA_PATH

完成管理员集群的配置

返回到控制台,然后执行以下步骤:

  1. 安装引导环境页面上,点击检查连接

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

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

    • 确保 --target-cluster-name 的值与引导环境基本信息部分中显示的管理员集群名称相匹配。

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

    如果您需要更改引导集群名称、项目 ID 或其他标志值,请执行以下操作:

    1. 输入 Ctrl-C 退出 gkectl register bootstrap
    2. 删除引导集群:

      gkectl delete bootstrap \
        --target-cluster-name=ADMIN_CLUSTER_NAME \
        --project-id=PROJECT_ID \
        --location=REGION \
        --register-service-account-key-path=CONNECT_REGISTER_SA_PATH
      
    3. 重新运行 gkectl register bootstrap 命令。

  2. 点击下一部分:集群基本信息,开始配置管理员集群。

集群基本信息

  1. CA 证书数据字段中,复制并粘贴前面在获取 CA 证书部分中所述的 PEM 格式的整个 vCenter CA 证书。

  2. 授权部分中,输入要授予只读 Kubernetes clusterrole/view 角色的用户的邮箱。请注意,邮箱会自动添加。应用的基于角色的访问控制 (RBAC) 政策可让用户通过 Connect 网关运行只读命令。

  3. 点击下一部分:控制平面

控制平面

  1. 查看控制平面 部分中的默认设置,并根据需要进行更改。

  2. 控制平面节点 IP 部分的以下字段中输入 IP 地址:

    • 网关:集群节点所属子网的默认网关的 IP 地址。

    • 网络掩码:集群节点所属子网的网络掩码。

    • IP 地址:输入 IP 地址和(可选) 三个控制平面节点的主机名。

  3. 点击下一部分:网络

网络

在本部分中,您将指定创建管理员集群所需的网络信息。

  1. Service 和 Pod CIDR 部分中,接受 Kubernetes Service 和 Pod IP 地址范围的默认值,或输入其他 CIDR 地址范围。

    • Service CIDR:最小可能范围:/24。最大可能范围:/12

    • Pod CIDR:最小可能范围:/18。最大可能范围:/8`。

  2. 主机配置部分中,指定集群节点虚拟机使用的 NTP 服务器、DNS 服务器和(可选)DNS 搜索网域。创建集群后,您将无法修改这些值。

  3. 点击下一部分:负载均衡器

负载均衡器

在本部分中,您将选择要使用的负载均衡器类型。如需了解其他 信息,请参阅 负载均衡概览

  1. 负载均衡器类型列表中,选择一个负载均衡器:

    • 与 MetalLB 捆绑:MetalLB 负载均衡器捆绑在一起,并且需要的手动配置比手动负载均衡少。MetalLB 组件在集群节点上运行,因此您无需为负载均衡器创建单独的虚拟机。

    • 手动:您可以使用选择的任何负载均衡器,只要在创建集群之前进行设置即可。使用手动设置的任何负载均衡器时,您必须配置虚拟 IP (VIP)、节点地址和 nodePort 值之间的映射。

  2. 控制平面 VIP 字段中,输入用于将流量发送到 Kubernetes API 服务器的虚拟 IP。

  3. 点击验证并创建

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

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

有关集群创建过程的详细信息会输出到管理员工作站。如果预检检查通过,您会看到如下所示的内容:

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

连接到管理员集群

gkectl register bootstrap 命令会为管理员工作站上的管理员集群创建 kubeconfig 文件。如果您在运行 gkectl register bootstrap 时未指定 --admin-kubeconfig-out 标志,则该命令会在您运行命令的目录中创建一个名为 kubeconfig 的 kubeconfig 文件。

您需要限制对此 kubeconfig 的访问权限,因为它包含集群的身份验证凭据。

此外,您还可以通过 Connect 网关运行只读 kubectl 命令。

  1. 在安装了 gcloud CLI 的计算机上运行以下命令,以获取可通过 Connect 网关访问集群的 kubeconfig 条目。

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

    输出类似于以下内容:

    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.
    
  2. 您现在可以通过 Connect 网关运行只读 kubectl 命令,例如:

    kubectl get pods -A
    

    如果您需要管理员集群的完整管理权限,请参阅 设置 Connect 网关