在 Google Cloud 控制台中创建用户集群

本页面介绍了如何使用 Google Cloud 控制台创建 Anthos clusters on VMware (GKE On-Prem) 用户集群。当您创建用户集群时,控制台会自动在您为创建集群选择的 Google Cloud 项目中启用 Anthos On-Prem API。Anthos On-Prem API 在 Google Cloud 的基础架构中运行,并且控制台使用此 API 在 vSphere 数据中心内创建集群。如需管理集群,Anthos On-Prem API 必须将有关集群状态的元数据存储在创建集群时指定的 Google Cloud 区域中。此元数据可让 Anthos On-Prem API 管理用户集群生命周期,并且不包含特定于工作负载的数据。

如果您愿意,可以通过创建用户集群配置文件并使用 gkectl 来创建用户集群,如创建用户集群中所述。

如果您要使用 Google Cloud 控制台管理使用 gkectl 创建的集群的生命周期,请参阅配置由 Anthos On-Prem API 管理的用户集群

准备工作

本部分介绍了在 Google Cloud 控制台中创建用户集群的要求。

授予 IAM 权限

如果您不是项目所有者,则必须获得 roles/gkeonprem.admin

如果要在控制台中访问 Anthos 和 Google Kubernetes Engine 页面,您还必须具有以下角色:

创建集群后,如果您不是项目所有者,并且要通过命令行使用 Connect 网关连接到用户集群,则您必须拥有以下角色:

  • roles/gkehub.gatewayAdmin:此角色允许您访问 Connect Gateway API。如果您只需要对集群的只读权限,则 roles/gkehub.gatewayReader 足矣。

  • roles/gkehub.viewer:此角色允许您检索集群凭据。

如需了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

注册管理员集群

您必须拥有管理员集群,并且必须将其注册到舰队,然后才能在 Google Cloud 控制台中创建用户集群。

为管理员集群启用管理员活动审核日志

您必须在管理员集群上启用将管理员活动记录到 Cloud Audit Logs 的功能。

为管理员集群启用系统级层日志记录和监控功能

您必须在管理员集群上启用 Cloud LoggingCloud Monitoring

所需的 Google API

确保舰队宿主项目中启用了所有必需的 Google API

创建集群后,如果您要通过命令行使用 Connect 网关连接到用户集群,请启用 Connect 网关 API:

gcloud services enable --project=FLEET_HOST_PROJECT_ID  \
    connectgateway.googleapis.com

命令行访问权限

创建集群后,如果您要通过命令行使用 Connect 网关连接到用户集群,请执行以下操作:

确保您已安装以下命令行工具:

  • 最新版本的 gcloud CLI
  • kubectl,用于对 Kubernetes 集群运行命令。如果您需要安装 kubectl,请按照相关说明操作。

如果您使用 Cloud Shell 作为与 Google Cloud 交互的 Shell 环境,则系统会为您安装这些工具。

创建用户集群

Google Cloud 控制台中的大多数字段都对应于用户集群配置文件中的字段。

  1. 在 Google Cloud 控制台中,前往 Anthos 集群页面。

    转到“Anthos 集群”页面

  2. 选择您要供创建集群的 Google Cloud 项目。所选项目也会用作舰队宿主项目。该项目必须是管理员集群注册到的项目。创建用户集群后,它会自动注册到所选项目的舰队。

  3. 点击创建集群

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

  5. 点击 VMware vSphere 旁边的配置

以下部分将指导您配置用户集群。

前提条件

Google Cloud 控制台中的这一部分简要介绍了创建用户集群之前必须完成的所有操作。在确认您拥有创建用户集群所需的所有信息后,请点击继续

集群基本信息

输入有关集群的基本信息。

  1. 输入用户集群的名称
  2. 管理员集群下,从列表中选择管理员集群。如果您在创建管理员集群时未指定其名称,则系统会生成 gke-admin-[HASH] 格式的名称。如果您无法识别管理员集群名称,请在管理员工作站上运行以下命令:

    KUBECONFIG=ADMIN_CLUSTER_KUBECONFIG
    kubectl get OnPremAdminCluster -n kube-system -o=jsonpath='{.items[0].metadata.name}'
    

    如果要使用的管理员集群未显示,请参阅问题排查部分集群基本信息下拉列表中未显示管理员集群

  3. GCP API 位置字段中,从列表中选择 Google Cloud 区域。除了控制运行 Anthos On-Prem API 所在的区域之外,此设置还可控制存储以下内容的区域:

    • Anthos On-Prem API 管理集群生命周期所需的用户集群元数据
    • 系统组件的 Cloud Logging 和 Cloud Monitoring 数据
    • Cloud Audit Logs 创建的管理员审核日志
  4. 选择用户集群的 Anthos clusters on VMware 版本。

  5. 作为集群创建者,您将获得集群的集群管理员权限。(可选)在授权部分的集群管理员用户字段中,输入将管理集群的其他用户的电子邮件地址。

    创建集群时,Anthos On-Prem API 将 Kubernetes 基于角色的访问控制 (RBAC) 政策应用于集群,以授予您和其他管理用户 Kubernetes clusterrole/cluster-admin 角色,该角色提供对集群中所有名称空间中的每个资源的完全访问权限。

  6. 点击继续以前往网络部分。

网络

在本部分中,您将指定集群的节点、Pod 和 Service 的 IP 地址。在一个用户集群中,每个节点都需要一个 IP 地址,此外,该集群还需要一个额外的 IP 地址用于用户集群升级期间的临时节点。如需了解详情,请参阅用户集群需要多少个 IP 地址?

  1. 节点 IP 部分中,为用户集群选择 IP 模式。从下列选项中选择一项:

    • DHCP:如果您希望集群节点从 DHCP 服务器获取其 IP 地址,请选择 DHCP

    • 静态:如果您要为集群节点提供静态 IP 地址,或者要设置手动负载均衡,请选择静态

  2. 如果您选择了 DHCP,请跳到下一步,以指定 Service 和 Pod CIDR。在静态 IP 地址模式部分,请提供以下信息:

    1. 输入用户集群的网关的 IP 地址。
    2. 输入用户集群节点的子网掩码

    3. IP 地址部分中,输入用户集群中节点的 IP 地址和(可选)主机名。您可以输入单个 IP v4 地址(例如 192.0.2.1)或 IPv4 CIDR 地址块(例如 192.0.2.0/24)。

      • 如果您输入 CIDR 地址块,请不要输入主机名。
      • 如果您输入单个 IP 地址,则可以选择输入主机名。如果您未输入主机名,则 Anthos clusters on VMware 会使用 vSphere 中的虚拟机名称作为主机名。
    4. 根据需要点击 + 添加 IP 地址以输入更多 IP 地址。

  3. Service CIDR 和 Pod CIDR 部分中,控制台为 Kubernetes Service 和 Pod 提供以下地址范围:

    • Service CIDR:10.96.0.0/20
    • Pod CIDR:192.168.0.0/16

    如果您希望输入自己的地址范围,请参阅 Pod 和 Service 的 IP 地址以了解最佳实践。

  4. 如果您选择了静态 IP 模式 (Static IP mode),请在主机配置部分中指定以下信息:

    1. 输入 DNS 服务器的 IP 地址。
    2. 输入 NTP 服务器的 IP 地址。
    3. (可选)输入 DNS 搜索网域。
  5. 点击继续以转到负载均衡器部分。

负载均衡器

选择要为集群设置的负载均衡器。如需了解详情,请参阅负载均衡器概览

从列表中选择负载均衡器类型

与 MetalLBLB 捆绑

配置使用 MetalLB 进行捆绑式负载均衡。此方案需要的配置最低。MetalLB 直接在集群节点上运行,不需要额外的虚拟机。如需详细了解使用 MetalLB 的优势及其与其他负载均衡方案的比较情况,请参阅使用 MetalLB 进行捆绑负载均衡

  1. 地址池部分中,至少配置一个地址池,如下所示:

    1. 输入地址池的名称。

    2. 以 CIDR 表示法输入包含 Ingress VIP 的 IP 地址范围(例如, 192.0.2.0/26),或以范围表示法输入包含 Ingress VIP 的 IP 地址范围(例如 192.0.2.64-192.0.2.72)。如需指定池中的单个 IP 地址,请使用 /32(采用 CIDR 表示法,例如, 192.0.2.1/32)。

    3. 如果 LoadBalancer 类型的 Service 的 IP 地址与 Ingress VIP 不在同一 IP 地址范围内,请点击 + 添加 IP 地址范围,然后输入其他地址范围。

      各个池中的 IP 地址不能重叠,并且必须与集群节点位于同一子网。

    4. IP 地址分配下,选择以下选项之一:

      • 自动:如果您希望 MetalLB 控制器自动将地址池中的 IP 地址分配给 LoadBalancer 类型的 Service,请选择此选项。
      • 手动:如果您打算使用池中的地址手动为 LoadBalancer 类型的 Service 指定地址,请选择此选项。
    5. 如果您希望 MetalLB 控制器不使用池中以 .0 或 .255 结尾的地址,请点击避免使用有问题的 IP 地址。这样可以避免有问题的用户设备错误地丢弃发送到这些特殊 IP 地址的流量。

    6. 完成后,请点击完成

  2. 如果需要,请点击添加地址池

  3. 虚拟 IP 部分中,输入以下内容:

    • 控制平面 VIP:用于发送到用户集群 Kubernetes API 服务器的流量的目标 IP 地址。用户集群的 Kubernetes API 服务器在管理员集群中的节点上运行。此 IP 地址必须与管理员集群节点位于同一 L2 网域中。请勿在地址池部分中添加此地址。

    • Ingress VIP:要在负载均衡器上为 Ingress 代理配置的 IP 地址。您必须将其添加到地址池部分中的地址池。

  4. 点击继续

F5 Big-IP 负载均衡器

只有在管理员集群使用 F5 时,您才能为用户集群使用 F5。务必先安装并配置 F5 BIG-IP ADC,然后再将其与 Anthos clusters on VMware 集成。如需了解详情,请参阅 F5 BIG-IP ADC 安装指南

  1. 虚拟 IP 部分中,输入以下内容:

    • 控制平面 VIP:用于发送到 Kubernetes API 服务器的流量的目的地 IP 地址。

    • Ingress VIP:要在负载均衡器上为 Ingress 代理配置的 IP 地址。

  2. 地址字段中,输入 F5 BIG-IP 负载均衡器的地址。

  3. 分区字段中,输入您为用户集群创建的 BIG-IP 分区的名称。

  4. SNAT 池名称字段中,输入 SNAT 池的名称(如果适用)。

  5. 点击继续

手动负载均衡器

配置手动负载均衡。在 Anthos clusters on VMware 中,Kubernetes API 服务器、Ingress 代理和用于日志汇总的附加服务均由 LoadBalancer 类型的 Kubernetes Service 公开。为这些 Service 自行选择 30000 到 32767 范围内的 nodePort 值。对于 Ingress 代理,请选择一个适用于 HTTP 和 HTTPS 流量的 nodePort 值。如需了解详情,请参阅启用手动负载均衡模式

  1. 虚拟 IP 部分中,输入以下内容:

    • 控制平面 VIP:用于发送到 Kubernetes API 服务器的流量的目的地 IP 地址。

    • Ingress VIP:要在负载均衡器上为 Ingress 代理配置的 IP 地址。

  2. 控制方案节点端口字段中,输入 Kubernetes API 服务器的 nodePort 值。用户集群的 Kubernetes API 服务器在管理员集群上运行。

  3. Ingress HTTP 节点端口字段中,输入流向 Ingress 代理的 HTTP 流量的 nodePort 值。

  4. Ingress HTTPS 节点端口字段中,输入流向 Ingress 代理的 HTTPS 流量的 nodePort 值。

  5. Konnectivity 服务器节点端口 字段中,输入 Konnectivity 服务器的 nodePort 值。

  6. 点击继续

控制平面

查看为管理员集群中运行用户集群的控制平面组件的节点配置的默认值,并根据需要调整值。

  1. 控制平面节点 vCPU 字段中,输入每个用作用户集群的控制平面的管理员集群节点的 vCPU 数量(最少 4 个)。
  2. 控制平面节点内存字段中,输入每个用作用户集群的控制平面的管理员集群节点的内存大小(以 MiB 为单位,最少 8192 MiB 且必须是 4 的倍数)。
  3. 控制平面节点下,选择用户集群的控制平面节点数。例如,您可以为开发环境选择 1 个控制平面节点,为高可用性 (HA) 生产环境选择 3 个控制平面节点。用户控制平面位于管理员集群节点上,因此请确保您为每个控制平面节点预留足够的 IP 地址。如需了解详情,请参阅管理员集群需要多少个 IP 地址?

  4. 点击继续以前往功能部分。

功能

本部分展示在集群上启用的功能和操作。

以下各项会自动启用且无法停用:

以下各项默认处于启用状态,但您可以将其停用:

  • 启用 vSphere CSI 驱动程序:也称为 vSphere 容器存储插件。容器存储接口 (CSI) 驱动程序运行在 vSphere 中部署的原生 Kubernetes 集群中,用于在 vSphere 存储上预配永久性卷。如需了解详情,请参阅使用 vSphere 容器存储接口驱动程序
  • 启用反亲和性群组:系统会自动为您的用户集群节点创建 VMware 分布式资源调度器 (DRS) 反亲和性规则,使其分布到数据中心内的至少 3 个物理主机上。确保您的 vSphere 环境符合要求

节点池

创建的集群将至少具有一个节点池。节点池是用于在此集群中创建的节点组的模板。如需了解详情,请参阅创建和管理节点池

  1. 节点池默认设置 (Node pool defaults) 部分中,完成以下操作:

    1. 输入节点池名称或接受“default-pool”作为名称。
    2. 输入池中每个节点的 vCPU 数量(每个用户集群工作器最少 4 个)。
    3. 输入池中每个节点的内存大小(以兆字节 (MiB) 为单位,每个用户集群工作器节点最少 8192 MiB,并且必须是 4 的倍数)。
    4. 节点字段中,输入池中的节点数(最少 3 个)。如果您在网络部分中为节点 IP 输入了静态 IP 地址,请确保输入的 IP 地址足以容纳这些用户集群节点。
    5. 选择操作系统映像类型UbuntuUbuntu ContainerdCOS
    6. 输入启动磁盘大小(以吉比字节 (GiB) 为单位,最少为 40 GiB)。
    7. 如果您使用 MetalLB 作为负载均衡器,则必须在至少一个节点池中启用 MetalLB。使将此节点池用于 MetalLB 负载均衡保持选中状态,或添加其他节点池用于 MetalLB。
  2. 节点池元数据(可选)部分中,如果您要添加 Kubernetes 标签污点,请执行以下操作:

    1. 点击 + 添加 Kubernetes 标签。输入标签的。根据需要重复上述步骤。
    2. 点击 + 添加污点。输入污点的效果。根据需要重复上述步骤。

验证并完成

点击验证并完成以创建用户集群。创建用户集群需要 15 分钟或更长时间。控制台会在验证设置并在数据中心内创建集群时显示状态消息。

如果验证设置时出现错误,控制台将显示一条错误消息,该消息应足够明确,便于您解决配置问题并再次尝试创建集群。

如需详细了解可能的错误以及解决方法,请参阅排查在 Google Cloud 控制台中创建用户集群的问题

连接到用户集群

在控制台中创建用户集群时,系统会为该集群配置 Kubernetes 基于角色的访问权限控制 (RBAC) 政策,以便您可以使用 Google Cloud 身份登录集群。如需将集群和项目配置为允许其他操作人员使用其 Google Cloud 身份登录,请参阅设置 Connect 网关

所有集群都有一个规范端点。此端点公开了 kubectl 和其他服务用于通过 TCP 端口 443 与集群控制平面通信的 Kubernetes API 服务器。此端点无法通过公共互联网访问。如果您通过 VPC 访问集群的专用端点,则可以直接连接到专用端点并生成 kubeconfig 文件。否则,您可以使用 Connect 网关。在这种情况下,kubectl 使用 Connect,然后代表您安全地将流量转发到专用端点。

如需通过命令行访问用户集群,您需要一个 kubeconfig 文件。您可以通过以下两种方法获取 kubeconfig 文件:

  • 使用 Connect 网关从安装了 Google Cloud CLI 的计算机访问集群。Connect 网关可让您轻松安全地管理集群。如需了解详情,请参阅使用 Connect 网关连接到已注册的集群

  • 如需直接访问专用端点,请在管理员工作站上创建 kubeconfig 文件并从管理员工作站管理集群。

请务必等到控制台指示用户集群状态为健康。

Connect 网关

  1. 初始化 gcloud CLI 以用于队列宿主项目,或运行以下命令以使用您的 Google 帐号登录,将舰队宿主项目设置为默认项目并更新组件:

    gcloud auth login
    gcloud config set project FLEET_HOST_PROJECT_ID
    gcloud components update
    
  2. 提取用于与 Connect 网关进行交互的集群凭据。在以下命令中,将 MEMBERSHIP_NAME 替换为您的集群名称。在 Anthos Clusters on VMware 中,成员资格名称与集群名称相同。

    gcloud container fleet memberships get-credentials MEMBERSHIP_NAME
    

    此命令会返回一个特殊的特定于 Connect 网关的 kubeconfig,可让您通过网关连接到集群。

    获得必要的凭据后,您可以照常使用 kubectl 针对任何 Kubernetes 集群运行命令,并且不需要指定 kubeconfig 文件的名称,例如:

    kubectl get namespaces
    

管理员工作站

如需在管理员工作站上创建用户集群 kubeconfig 文件,请运行以下命令以在本地保存用户集群的新 kubeconfig 文件。替换以下内容:

  • CLUSTER_NAME:新创建的用户集群的名称
  • ADMIN_CLUSTER_KUBECONFIG:管理员集群 kubeconfig 文件的路径
  • USER_CLUSTER_KUBECONFIG:命令输出的用户集群 kubeconfig 文件的名称
kubectl get secret admin \
  --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
  -n CLUSTER_NAME \
  -o=jsonpath='{.data.admin\.conf}' | base64 -d > USER_CLUSTER_KUBECONFIG

该文件保存后,您可以开始在管理员工作站上使用 kubectl 访问用户集群,例如:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get namespaces

后续步骤