使用 GKE On-Prem API 客户端创建用户集群

本页面介绍如何使用 Google Cloud 控制台、Google Cloud CLI (gcloud CLI) 或 Terraform 创建用户集群。

什么是 GKE On-Prem API?

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

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

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

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

如果您希望使用 Terraform、控制台或 gcloud CLI 管理使用 gkectl 创建的集群的生命周期,请参阅配置由 GKE On-Prem API 管理的用户集群

准备工作

本部分介绍了使用 GKE On-Prem API 客户端创建用户集群的要求。

授予 IAM 权限

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

如果要访问控制台中的 GKE Enterprise 和 Google Kubernetes Engine 页面,您还必须拥有以下角色:

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

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

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

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

注册管理员集群

您必须拥有管理员集群,并且必须将其注册到舰队,然后才能使用 GKE On-Prem API 客户端创建用户集群。

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

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

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

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

所需的 Google API

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

此外,您还需要启用 GKE On-Prem API:

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

命令行访问权限

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

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

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

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

新安装的可用版本

创建用户集群时,您通常需要安装与管理员集群匹配的 GKE on VMware 版本。但是,您可以安装更高的补丁版本或比次要版本高一个的版本。例如,在创建用户集群以选择 bug 修复时,建议您安装最新的补丁版本。GKE on VMware 版本发布后大约 7 到 10 天才会显示在 GKE On-Prem API 中。

如果您要创建比管理员集群版本更高的用户集群,请先下载管理员集群管理该版本的用户集群所需的特定于版本的组件软件包,然后部署组件。如需了解详情,请参阅安装比管理员集群版本更高的版本

选择用于创建集群的工具

您可以使用 Terraform、Google Cloud 控制台或 Google Cloud CLI (gcloud CLI) 来创建由 GKE On-Prem API 管理的集群。如果这是您第一次安装 GKE on VMware,您可能会发现控制台是最简单易用的工具。

在您进一步熟悉创建集群所需的信息后,您可能会发现 Terraform 或 gcloud CLI 更方便,尤其是要创建多个集群的情况下。Terraform 是一个业界标准的基础架构即代码工具。如果您的组织已在使用 Terraform,则您可能需要使用它来创建集群和管理集群生命周期。

如果使用 gcloud CLI,您可以将该命令及其参数保存到文本文件中,并根据需要进行更改,以创建其他集群。如果您使用的是 CI/CD 工具(例如 Cloud Build),则可以使用 gcloud 命令创建集群和节点池,并指定 --impersonate-service-account 标志以自动执行创建操作。

创建用户集群

控制台

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

  1. 在 Google Cloud 控制台中,前往创建 GKE on VMware 集群页面。

    前往“创建 GKE on VMware 集群”

  2. 选择您要供创建集群的 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 区域。此设置指定运行 GKE On-Prem API 的区域,以及存储以下内容的区域:

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

    集群名称、项目和位置联合用于唯一标识 Google Cloud。

  4. 为您的用户集群选择 GKE on VMware 版本。

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

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

  6. 点击下一步以前往控制平面部分。

控制平面

控制平面部分中的所有字段均设置为默认值。查看默认值,并根据需要进行更改。

  1. 控制平面节点 vCPU 字段中,输入用户集群的每个控制平面节点的 vCPU 数量(最少 4 个)。
  2. 控制平面节点内存字段中,输入用户集群的每个控制平面的内存大小(以 MiB 为单位,最少 8192 MiB 且必须是 4 的倍数)。
  3. 控制平面节点下,选择用户集群的控制平面节点数。例如,您可以为开发环境选择 1 个控制平面节点,为高可用性 (HA) 生产环境选择 3 个控制平面节点。
  4. (可选)选择自动调整节点大小。调整大小是指自动调整分配给节点的 vCPU 和内存资源。启用后,用户集群控制平面节点会根据用户集群中的工作器节点数量调整大小。因此,当您向用户集群添加更多工作器节点时,控制平面节点的大小会增加。
  5. (可选)选择启用控制平面 v2。启用 Controlplane V2 表示用户集群的控制平面在用户集群本身(而非管理员集群)中的一个或多个节点上运行(称为 kubeception 模型)。

    选择启用控制平面 v2 时,系统会显示控制平面节点 IP 部分。输入网关的 IP 地址、子网掩码以及控制平面节点的 IP 地址。

    启用 Controlplane V2 时,vCPU 和内存字段适用于用户集群中的控制平面节点。节点数由您输入的 IP 地址数量决定。未启用 Controlplane V2 时,vCPU、内存和控制平面节点字段适用于管理员集群中的节点。请确保为管理员集群预留足够的 IP 地址

  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 地址,则可以选择输入主机名。如果未输入主机名,GKE 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 模式启用控制平面 v2,请在主机配置部分中指定以下信息:

    1. 输入 DNS 服务器的 IP 地址。
    2. 输入 NTP 服务器的 IP 地址。
    3. (可选)输入 DNS 搜索网域。
  5. 点击下一步以前往负载均衡器部分。

负载均衡器

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

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

与 MetalLBLB 捆绑

配置使用 MetalLB 进行捆绑式负载均衡。只有在管理员集群使用 SeeSaw 或 MetalLB 的情况下,您才能对用户集群使用 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,然后再将其与 GKE on VMware 集成。

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

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

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

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

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

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

  5. 点击继续

手动负载均衡器

配置手动负载均衡。只有在管理员集群使用手动负载均衡器时,您才能为用户集群使用手动负载均衡器。在 GKE 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. 以下各项默认处于启用状态,但您可以将其停用:

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

节点池

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

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

    1. 输入节点池名称或接受“default-pool”作为名称。
    2. 输入池中每个节点的 vCPUs 数量(每个用户集群工作器最少 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. 点击 + 添加污点。输入污点的效果。根据需要重复上述步骤。
  3. 点击验证并完成以创建用户集群。创建用户集群需要 15 分钟或更长时间。控制台会在验证设置并在数据中心内创建集群时显示状态消息。

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

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

gcloud CLI

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

gcloud container vmware clusters create

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

gcloud container vmware node-pools create

创建集群和节点池的大多数标志都对应于用户集群配置文件中的字段。为帮助您开始使用,您可以在示例部分中测试完整命令。

准备工作

  1. 使用您的 Google 账号登录。

    gcloud auth login
    
  2. 请务必更新组件:

    gcloud components update
    
  3. 获取可用版本的列表:

    gcloud container vmware clusters query-version-config \
      --admin-cluster-membership=ADMIN_CLUSTER_NAME \
      --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \
      --location=REGION
    

    替换以下内容:

    • ADMIN_CLUSTER_NAME:管理员集群的名称。

    • FLEET_HOST_PROJECT_ID:管理员集群注册到的项目的 ID。

    • REGION:您在 GKE On-Prem API 中注册集群时指定的 Google Cloud 区域。

    此命令的输出类似如下所示:

    versions:
    - isInstalled: true
      version: 1.14.3-gke.25
    - version: 1.14.4-gke.54
    - version: 1.15.0-gke.581
    

可用于创建用户集群的版本带有 isInstalled=true 注解,这意味着管理员集群具有管理该版本的用户集群所需的特定于版本的组件。如果您要使用其他可用版本创建用户集群,请参阅安装比管理员集群版本更高的版本

示例

以下示例展示了如何创建具有不同负载均衡器的用户集群。如需了解可用的负载均衡选项,请参阅负载均衡器概览以了解详情。

这些示例使用默认值来配置控制平面节点。如果要更改任何默认值,请添加控制平面标志部分中所述的标志。如果需要,您还可以更改一些 vSphere 设置

集群运行后,您必须先添加节点池,然后才能部署工作负载,如创建节点池部分中所述。

MetalLB 和 DHCP

此示例展示了如何创建具有捆绑式 MetalLB 负载均衡器的用户集群,并使用 DHCP 服务器获取集群节点的 IP 地址。

只有在管理员集群使用 SeeSaw 或 MetalLB 的情况下,您才能为用户集群使用 MetalLB。此负载均衡方案只需进行极少的配置。MetalLB 直接在集群节点上运行,不需要额外的虚拟机。如需详细了解使用 MetalLB 的优势及其与其他负载均衡方案的比较情况,请参阅使用 MetalLB 进行捆绑式负载均衡

如果需要填写 --admin-cluster-membership 标志的 ADMIN_CLUSTER_NAME 占位符,请务必滚动。 此示例使用完全指定的管理员集群名称,因此您无需添加 --admin-cluster-membership-location--admin-cluster-membership-project

gcloud container vmware clusters create USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --admin-cluster-membership=projects/FLEET_HOST_PROJECT_ID/locations/global/memberships/ADMIN_CLUSTER_NAME \
  --location=REGION \
  --version=VERSION \
  --admin-users=YOUR_EMAIL_ADDRESS \
  --admin-users=ANOTHER_EMAIL_ADDRESS \
  --service-address-cidr-blocks=SERVICE_CIDR_BLOCK \
  --pod-address-cidr-blocks=POD_CIDR_BLOCK \
  --metal-lb-config-address-pools='pool=NAME,avoid-buggy-ips=True|False,manual-assign=True|False,addresses=IP_ADDRESS_RANGE_1;IP_ADDRESS_RANGE_2;...' \
  --control-plane-vip=CONTROL_PLANE_VIP \
  --ingress-vip=INGRESS_VIP \
  --enable-dhcp
  • USER_CLUSTER_NAME:您为用户集群选择的名称。创建集群后,此名称便无法更改。 该名称必须:
    • 最多包含 40 个字符
    • 只能包含小写字母数字字符或连字符 (-)
    • 以字母字符开头
    • 以字母数字字符结尾
  • FLEET_HOST_PROJECT_ID:您要在其中创建集群的项目的 ID。指定的项目也会用作舰队宿主项目。该项目必须是管理员集群注册到的项目。创建用户集群后,它会自动注册到所选项目的舰队。集群创建后,舰队宿主项目便无法更改。
  • ADMIN_CLUSTER_NAME:管理用户集群的管理员集群的名称。在 --admin-cluster-membership 标志中,您可以使用完全指定的集群名称,格式如下:
        projects/FLEET_HOST_PROJECT_ID/locations/ADMIN_CLUSTER_REGION/memberships/ADMIN_CLUSTER_NAME

    或者,您也可以将 --admin-cluster-membership 设置为管理员集群的名称,如示例命令所示。如果仅使用管理员集群的名称,请使用 --admin-cluster-membership-project 设置管理员集群的项目 ID,使用 --admin-cluster-membership-location 设置位置。管理员集群的位置是 global 或 Google Cloud 区域。如果您需要查找该区域,请运行 gcloud container fleet memberships list

  • REGION:运行 GKE On-Prem API (gkeonprem.googleapis.com)、舰队服务 (gkehub.googleapis.com) 和 Connect 服务 (gkeconnect.googleapis.com) 的 Google Cloud 区域。请指定 us-west1 或其他受支持的区域。 创建集群后,此区域便无法更改。此设置指定存储以下内容的区域:
    • GKE On-Prem API 管理集群生命周期所需的用户集群元数据
    • 系统组件的 Cloud Logging 和 Cloud Monitoring 数据
    • Cloud Audit Logs 创建的管理员审核日志

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

  • VERSION:用户集群的 GKE on VMware 版本。
  • YOUR_EMAIL_ADDRESSANOTHER_EMAIL_ADDRESS:如果您没有添加 --admin-users 标志,作为集群创建者,默认情况下您将获得集群管理员权限。但是,如果您添加 --admin-users 以将其他用户指定为管理员,则会替换默认值,并且需要同时添加您的电子邮件地址和另一个管理员的电子邮件地址。例如,如需添加两个管理员:
        --admin-users=sara@example.com \
        --admin-users=amal@example.com

    创建集群时,GKE On-Prem API 会将 Kubernetes 基于角色的访问权限控制 (RBAC) 政策应用于集群,从而向您和其他管理员用户授予 Kubernetes clusterrole/cluster-admin 角色,该角色提供对集群内所有命名空间中所有资源的完整访问权限。

  • SERVICE_CIDR_BLOCK:用于集群中 Service 的 IP 地址范围(采用 CIDR 格式)。范围必须至少为 /24。

    示例:--service-address-cidr-blocks=10.96.0.0/20

  • POD_CIDR_BLOCK:用于集群中 Pod 的 IP 地址范围(采用 CIDR 格式)。范围必须至少为 /18。

    示例:--pod-address-cidr-blocks=192.168.0.0/16

  • --metal-lb-config-address-pools:添加此标志可指定 MetalLB 负载均衡器要使用的地址池的配置。该标志的值采用以下格式:
    --metal-lb-config-address-pool 'pool=NAME,avoid-buggy-ips=True|False,manual-assign=True|False,addresses=IP_ADDRESS_RANGE_1;IP_ADDRESS_RANGE_2;...' \

    该值的各部分分别以关键字 poolavoid-buggy-ipmanual-assignaddresses 开头。每个细分之间用英文逗号分隔。

    • pool:您为池选择的名称。
    • avoid-buggy-ips1:如果将该部分设置为 True,则 MetalLB 控制器不会将以 .0 或 .255 结尾的 IP 地址分配给 Service。这样可以避免有问题的用户设备错误地丢弃发送到这些特殊 IP 地址的流量。如果未指定,则默认为 False
    • manual-assign:如果您不希望 MetalLB 控制器自动将此池中的 IP 地址分配给 Service,请将该部分设置为 True。之后,开发者便可以创建 LoadBalancer 类型的 Service 并手动指定池中的一个地址。如果未指定,则将 manual-assign 设置为 False
    • addresses 列表中:每个地址都必须是采用 CIDR 表示法或带连字符的范围格式的范围。如需指定池中的单个 IP 地址(例如对于入站流量 VIP),请使用 /32(采用 CIDR 表示法,例如 192.0.2.1/32)。

    请注意以下几点:

    • 用英文单引号将整个值括起来。
    • 不允许使用空格。
    • 用英文分号分隔每个 IP 地址范围。

    例如:

    --metal-lb-config-address-pool 'pool=pool1,avoid-buggy-ips=True,manual-assign=True,addresses=10.251.134.80/32;192.168.1.0/26;192.168.1.2-192.168.1.3'
  • CONTROL_PLANE_VIP:您已选择在负载均衡器上为用户集群的 Kubernetes API 服务器配置的 IP 地址。

    示例:--control-plane-vip=203.0.113.3

  • INGRESS_VIP:您选择在负载均衡器上为 Ingress 代理配置的 IP 地址。

    示例:--ingress-vip=10.251.134.80

    Ingress VIP 的 IP 地址必须属于某一个 MetalLB 地址池。

  • --enable-dhcp:如果您希望集群节点从您提供的 DHCP 服务器中获取其 IP 地址,请添加 --enable-dhcp。如果您要为集群节点提供静态 IP 地址,或者您要设置手动负载均衡,请勿添加此标志。

MetalLB 和静态 IP

此示例展示了如何创建具有捆绑式 MetalLB 负载均衡器的用户集群,并为集群节点分配静态 IP 地址。

只有在管理员集群使用 SeeSaw 或 MetalLB 的情况下,您才能为用户集群使用 MetalLB。此负载均衡方案只需进行极少的配置。MetalLB 直接在集群节点上运行,不需要额外的虚拟机。如需详细了解使用 MetalLB 的优势及其与其他负载均衡方案的比较情况,请参阅使用 MetalLB 进行捆绑式负载均衡

如果需要填写 --admin-cluster-membership 标志的 ADMIN_CLUSTER_NAME 占位符,请务必滚动。 此示例使用完全指定的管理员集群名称,因此您无需添加 --admin-cluster-membership-location--admin-cluster-membership-project

gcloud container vmware clusters create USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --admin-cluster-membership=projects/FLEET_HOST_PROJECT_ID/locations/global/memberships/ADMIN_CLUSTER_NAME \
  --location=REGION \
  --version=VERSION \
  --admin-users=YOUR_EMAIL_ADDRESS \
  --admin-users=ANOTHER_EMAIL_ADDRESS \
  --service-address-cidr-blocks=SERVICE_CIDR_BLOCK \
  --pod-address-cidr-blocks=POD_CIDR_BLOCK \
  --metal-lb-config-address-pools='pool=NAME,avoid-buggy-ips=True|False,manual-assign=True|False,addresses=IP_ADDRESS_RANGE_1;IP_ADDRESS_RANGE_2;...' \
  --control-plane-vip=CONTROL_PLANE_VIP \
  --ingress-vip=INGRESS_VIP \
  --static-ip-config-ip-blocks='gateway=GATEWAY,netmask=NETMASK,ips=IP_ADDRESS_1;IP_ADDRESS_2 HOST_2;...' \
  --dns-servers=DNS_SERVER,... \
  --dns-search-domains=DNS_SEARCH_DOMAIN,... \
  --ntp-servers=NTP_SERVER,...

替换以下内容:

  • USER_CLUSTER_NAME:您为用户集群选择的名称。创建集群后,此名称便无法更改。 该名称必须:
    • 最多包含 40 个字符
    • 只能包含小写字母数字字符或连字符 (-)
    • 以字母字符开头
    • 以字母数字字符结尾
  • FLEET_HOST_PROJECT_ID:您要在其中创建集群的项目的 ID。指定的项目也会用作舰队宿主项目。该项目必须是管理员集群注册到的项目。创建用户集群后,它会自动注册到所选项目的舰队。集群创建后,舰队宿主项目便无法更改。
  • ADMIN_CLUSTER_NAME:管理用户集群的管理员集群的名称。在 --admin-cluster-membership 标志中,您可以使用完全指定的集群名称,格式如下:
        projects/FLEET_HOST_PROJECT_ID/locations/ADMIN_CLUSTER_REGION/memberships/ADMIN_CLUSTER_NAME

    或者,您也可以将 --admin-cluster-membership 设置为管理员集群的名称,如示例命令所示。如果仅使用管理员集群的名称,请使用 --admin-cluster-membership-project 设置管理员集群的项目 ID,使用 --admin-cluster-membership-location 设置位置。管理员集群的位置是 global 或 Google Cloud 区域。如果您需要查找该区域,请运行 gcloud container fleet memberships list

  • REGION:运行 GKE On-Prem API (gkeonprem.googleapis.com)、舰队服务 (gkehub.googleapis.com) 和 Connect 服务 (gkeconnect.googleapis.com) 的 Google Cloud 区域。请指定 us-west1 或其他受支持的区域。 创建集群后,此区域便无法更改。此设置指定存储以下内容的区域:
    • GKE On-Prem API 管理集群生命周期所需的用户集群元数据
    • 系统组件的 Cloud Logging 和 Cloud Monitoring 数据
    • Cloud Audit Logs 创建的管理员审核日志

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

  • VERSION:用户集群的 GKE on VMware 版本。
  • YOUR_EMAIL_ADDRESSANOTHER_EMAIL_ADDRESS:如果您没有添加 --admin-users 标志,作为集群创建者,默认情况下您将获得集群管理员权限。但是,如果您添加 --admin-users 以将其他用户指定为管理员,则会替换默认值,并且需要同时添加您的电子邮件地址和另一个管理员的电子邮件地址。例如,如需添加两个管理员:
        --admin-users=sara@example.com \
        --admin-users=amal@example.com

    创建集群时,GKE On-Prem API 会将 Kubernetes 基于角色的访问权限控制 (RBAC) 政策应用于集群,从而向您和其他管理员用户授予 Kubernetes clusterrole/cluster-admin 角色,该角色提供对集群内所有命名空间中所有资源的完整访问权限。

  • SERVICE_CIDR_BLOCK:用于集群中 Service 的 IP 地址范围(采用 CIDR 格式)。范围必须至少为 /24。

    示例:--service-address-cidr-blocks=10.96.0.0/20

  • POD_CIDR_BLOCK:用于集群中 Pod 的 IP 地址范围(采用 CIDR 格式)。范围必须至少为 /18。

    示例:--pod-address-cidr-blocks=192.168.0.0/16

  • --metal-lb-config-address-pools:添加此标志可指定 MetalLB 负载均衡器要使用的地址池的配置。该标志的值采用以下格式:
    --metal-lb-config-address-pool 'pool=NAME,avoid-buggy-ips=True|False,manual-assign=True|False,addresses=IP_ADDRESS_RANGE_1;IP_ADDRESS_RANGE_2;...' \

    该值的各部分分别以关键字 poolavoid-buggy-ipmanual-assignaddresses 开头。每个细分之间用英文逗号分隔。

    • pool:您为池选择的名称。
    • avoid-buggy-ips1:如果将该部分设置为 True,则 MetalLB 控制器不会将以 .0 或 .255 结尾的 IP 地址分配给 Service。这样可以避免有问题的用户设备错误地丢弃发送到这些特殊 IP 地址的流量。如果未指定,则默认为 False
    • manual-assign:如果您不希望 MetalLB 控制器自动将此池中的 IP 地址分配给 Service,请将该部分设置为 True。之后,开发者便可以创建 LoadBalancer 类型的 Service 并手动指定池中的一个地址。如果未指定,则将 manual-assign 设置为 False
    • addresses 列表中:每个地址都必须是采用 CIDR 表示法或带连字符的范围格式的范围。如需指定池中的单个 IP 地址(例如对于入站流量 VIP),请使用 /32(采用 CIDR 表示法,例如 192.0.2.1/32)。

    请注意以下几点:

    • 用英文单引号将整个值括起来。
    • 不允许使用空格。
    • 用英文分号分隔每个 IP 地址范围。

    例如:

    --metal-lb-config-address-pool 'pool=pool1,avoid-buggy-ips=True,manual-assign=True,addresses=10.251.134.80/32;192.168.1.0/26;192.168.1.2-192.168.1.3'
  • CONTROL_PLANE_VIP:您已选择在负载均衡器上为用户集群的 Kubernetes API 服务器配置的 IP 地址。

    示例:--control-plane-vip=203.0.113.3

  • INGRESS_VIP:您选择在负载均衡器上为 Ingress 代理配置的 IP 地址。

    示例:--ingress-vip=10.251.134.80

    Ingress VIP 的 IP 地址必须属于某一个 MetalLB 地址池。

  • --static-ip-config-ip-blocks:指定用户集群中工作器节点的默认网关、子网掩码和静态 IP 地址列表。该标志的值采用以下格式:
    --static-ip-config-ip-blocks 'gateway=GATEWAY,netmask=NETMASK,ips=IP_ADDRESS_1;IP_ADDRESS_2 HOST_2;...'

    该值的各部分分别以关键字 gatewaynetmaskips 开头。用逗号分隔各个部分。

    请注意以下几点:

    • 用英文单引号将整个值括起来。
    • 除了在 IP 地址和主机名之间,其他地方不允许使用空格。

    在 IP 地址列表中:

    • 您可以指定单个 IP 地址或 IP 地址的 CIDR 块。
    • 用分号分隔每个 IP 地址或 CIDR 块。
    • 对于单个 IP 地址,您可以选择在 IP 地址后指定主机名。用空格分隔 IP 地址和主机名。如果未指定主机名,GKE on VMware 会将 vSphere 中的虚拟机名称用作主机名。
    • 如果您指定 CIDR 块,请不要为主机名指定值。

    例如:

    --static-ip-config-ip-blocks 'gateway=172.16.23.254,netmask=255.255.252.0,ips=172.16.20.10;172.16.20.11 host2;172.16.20.12/30'
  • DNS_SERVER:虚拟机的 DNS 服务器的 IP 地址列表(以英文逗号分隔)。
  • DNS_SEARCH_DOMAIN:供主机使用的 DNS 搜索网域列表(以英文逗号分隔)。这些搜索域会用作网域搜索列表的一部分。

    例如:

    --dns-search-domains example.com,examplepetstore.com
  • NTP_SERVER:供虚拟机使用的时间服务器的 IP 地址列表(以英文逗号分隔)。

F5 BIG-IP 和 DHCP

此示例展示了如何创建具有 F5 BIG-IP 负载均衡器的用户集群,并使用 DHCP 服务器获取集群节点的 IP 地址。

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

如果需要填写 --admin-cluster-membership 标志的 ADMIN_CLUSTER_NAME 占位符,请务必滚动。 此示例使用完全指定的管理员集群名称,因此您无需添加 --admin-cluster-membership-location--admin-cluster-membership-project

gcloud container vmware clusters create USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --admin-cluster-membership=projects/FLEET_HOST_PROJECT_ID/locations/global/memberships/ADMIN_CLUSTER_NAME \
  --location=REGION \
  --version=VERSION \
  --admin-users=YOUR_EMAIL_ADDRESS \
  --admin-users=ANOTHER_EMAIL_ADDRESS \
  --service-address-cidr-blocks=SERVICE_CIDR_BLOCK \
  --pod-address-cidr-blocks=POD_CIDR_BLOCK \
  --f5-config-address=F5_CONFIG_ADDRESS \
  --f5-config-partition=F5_CONFIG_PARTITION \
  --f5-config-snat-pool=F5_CONFIG_SNAT_POOL \
  --control-plane-vipCONTROL_PLANE_VIP \
  --ingress-vip=INGRESS_VIP \
  --enable-dhcp
  • USER_CLUSTER_NAME:您为用户集群选择的名称。创建集群后,此名称便无法更改。 该名称必须:
    • 最多包含 40 个字符
    • 只能包含小写字母数字字符或连字符 (-)
    • 以字母字符开头
    • 以字母数字字符结尾
  • FLEET_HOST_PROJECT_ID:您要在其中创建集群的项目的 ID。指定的项目也会用作舰队宿主项目。该项目必须是管理员集群注册到的项目。创建用户集群后,它会自动注册到所选项目的舰队。集群创建后,舰队宿主项目便无法更改。
  • ADMIN_CLUSTER_NAME:管理用户集群的管理员集群的名称。在 --admin-cluster-membership 标志中,您可以使用完全指定的集群名称,格式如下:
        projects/FLEET_HOST_PROJECT_ID/locations/ADMIN_CLUSTER_REGION/memberships/ADMIN_CLUSTER_NAME

    或者,您也可以将 --admin-cluster-membership 设置为管理员集群的名称,如示例命令所示。如果仅使用管理员集群的名称,请使用 --admin-cluster-membership-project 设置管理员集群的项目 ID,使用 --admin-cluster-membership-location 设置位置。管理员集群的位置是 global 或 Google Cloud 区域。如果您需要查找该区域,请运行 gcloud container fleet memberships list

  • REGION:运行 GKE On-Prem API (gkeonprem.googleapis.com)、舰队服务 (gkehub.googleapis.com) 和 Connect 服务 (gkeconnect.googleapis.com) 的 Google Cloud 区域。请指定 us-west1 或其他受支持的区域。 创建集群后,此区域便无法更改。此设置指定存储以下内容的区域:
    • GKE On-Prem API 管理集群生命周期所需的用户集群元数据
    • 系统组件的 Cloud Logging 和 Cloud Monitoring 数据
    • Cloud Audit Logs 创建的管理员审核日志

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

  • VERSION:用户集群的 GKE on VMware 版本。
  • YOUR_EMAIL_ADDRESSANOTHER_EMAIL_ADDRESS:如果您没有添加 --admin-users 标志,作为集群创建者,默认情况下您将获得集群管理员权限。但是,如果您添加 --admin-users 以将其他用户指定为管理员,则会替换默认值,并且需要同时添加您的电子邮件地址和另一个管理员的电子邮件地址。例如,如需添加两个管理员:
        --admin-users=sara@example.com \
        --admin-users=amal@example.com

    创建集群时,GKE On-Prem API 会将 Kubernetes 基于角色的访问权限控制 (RBAC) 政策应用于集群,从而向您和其他管理员用户授予 Kubernetes clusterrole/cluster-admin 角色,该角色提供对集群内所有命名空间中所有资源的完整访问权限。

  • SERVICE_CIDR_BLOCK:用于集群中 Service 的 IP 地址范围(采用 CIDR 格式)。范围必须至少为 /24。

    示例:--service-address-cidr-blocks=10.96.0.0/20

  • POD_CIDR_BLOCK:用于集群中 Pod 的 IP 地址范围(采用 CIDR 格式)。范围必须至少为 /18。

    示例:--pod-address-cidr-blocks=192.168.0.0/16

  • F5_CONFIG_ADDRESS:F5 BIG-IP 负载均衡器的地址。

  • F5_CONFIG_PARTITION:您为用户集群创建的 BIG-IP 分区的名称。

  • F5_CONFIG_SNAT_POOL:SNAT 池的名称(如果适用)。

  • CONTROL_PLANE_VIP:您已选择在负载均衡器上为用户集群的 Kubernetes API 服务器配置的 IP 地址。

    示例:--control-plane-vip=203.0.113.3

  • INGRESS_VIP:您选择在负载均衡器上为 Ingress 代理配置的 IP 地址。

    示例:--ingress-vip=10.251.134.80

    Ingress VIP 的 IP 地址必须属于某一个 MetalLB 地址池。

  • --enable-dhcp:如果您希望集群节点从您提供的 DHCP 服务器中获取其 IP 地址,请添加 --enable-dhcp。如果您要为集群节点提供静态 IP 地址,或者您要设置手动负载均衡,请勿添加此标志。

手动 LB 和静态 IP

此示例展示了如何创建具有手动负载均衡器的用户集群,并为集群节点分配静态 IP 地址。

只有在管理员集群使用手动负载均衡器时,您才能为用户集群使用手动负载均衡器。在 GKE on VMware 中,Kubernetes API 服务器、Ingress 代理和用于日志汇总的插件服务均由 LoadBalancer 类型的 Kubernetes Service 公开。为这些 Service 自行选择 30000 到 32767 范围内的 nodePort 值。对于入站流量代理,请选择一个适用于 HTTP 和 HTTPS 流量的 nodePort 值。如需了解详情,请参阅启用手动负载均衡模式

如果需要填写 --admin-cluster-membership 标志的 ADMIN_CLUSTER_NAME 占位符,请务必滚动。 此示例使用完全指定的管理员集群名称,因此您无需添加 --admin-cluster-membership-location--admin-cluster-membership-project

gcloud container vmware clusters create USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --admin-cluster-membership=projects/FLEET_HOST_PROJECT_ID/locations/global/memberships/ADMIN_CLUSTER_NAME \
  --location=REGION \
  --version=VERSION \
  --admin-users=YOUR_EMAIL_ADDRESS \
  --admin-users=ANOTHER_EMAIL_ADDRESS \
  --service-address-cidr-blocks=SERVICE_CIDR_BLOCK \
  --pod-address-cidr-blocks=POD_CIDR_BLOCK \
  --control-plane-vip=CONTROL_PLANE_VIP \
  --control-plane-node-port=CONTROL_PLANE_NODE_PORT \
  --ingress-vip=INGRESS_VIP \
  --ingress-http-node-port=INGRESS_HTTP_NODE_PORT \
  --ingress-https-node-port=INGRESS_HTTPS_NODE_PORT \
  --konnectivity-server-node-port=KONNECTIVITY_SERVER_NODE_PORT

替换以下内容:

  • USER_CLUSTER_NAME:您为用户集群选择的名称。创建集群后,此名称便无法更改。 该名称必须:
    • 最多包含 40 个字符
    • 只能包含小写字母数字字符或连字符 (-)
    • 以字母字符开头
    • 以字母数字字符结尾
  • FLEET_HOST_PROJECT_ID:您要在其中创建集群的项目的 ID。指定的项目也会用作舰队宿主项目。该项目必须是管理员集群注册到的项目。创建用户集群后,它会自动注册到所选项目的舰队。集群创建后,舰队宿主项目便无法更改。
  • ADMIN_CLUSTER_NAME:管理用户集群的管理员集群的名称。在 --admin-cluster-membership 标志中,您可以使用完全指定的集群名称,格式如下:
        projects/FLEET_HOST_PROJECT_ID/locations/ADMIN_CLUSTER_REGION/memberships/ADMIN_CLUSTER_NAME

    或者,您也可以将 --admin-cluster-membership 设置为管理员集群的名称,如示例命令所示。如果仅使用管理员集群的名称,请使用 --admin-cluster-membership-project 设置管理员集群的项目 ID,使用 --admin-cluster-membership-location 设置位置。管理员集群的位置是 global 或 Google Cloud 区域。如果您需要查找该区域,请运行 gcloud container fleet memberships list

  • REGION:运行 GKE On-Prem API (gkeonprem.googleapis.com)、舰队服务 (gkehub.googleapis.com) 和 Connect 服务 (gkeconnect.googleapis.com) 的 Google Cloud 区域。请指定 us-west1 或其他受支持的区域。 创建集群后,此区域便无法更改。此设置指定存储以下内容的区域:
    • GKE On-Prem API 管理集群生命周期所需的用户集群元数据
    • 系统组件的 Cloud Logging 和 Cloud Monitoring 数据
    • Cloud Audit Logs 创建的管理员审核日志

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

  • VERSION:用户集群的 GKE on VMware 版本。
  • YOUR_EMAIL_ADDRESSANOTHER_EMAIL_ADDRESS:如果您没有添加 --admin-users 标志,作为集群创建者,默认情况下您将获得集群管理员权限。但是,如果您添加 --admin-users 以将其他用户指定为管理员,则会替换默认值,并且需要同时添加您的电子邮件地址和另一个管理员的电子邮件地址。例如,如需添加两个管理员:
        --admin-users=sara@example.com \
        --admin-users=amal@example.com

    创建集群时,GKE On-Prem API 会将 Kubernetes 基于角色的访问权限控制 (RBAC) 政策应用于集群,从而向您和其他管理员用户授予 Kubernetes clusterrole/cluster-admin 角色,该角色提供对集群内所有命名空间中所有资源的完整访问权限。

  • SERVICE_CIDR_BLOCK:用于集群中 Service 的 IP 地址范围(采用 CIDR 格式)。范围必须至少为 /24。

    示例:--service-address-cidr-blocks=10.96.0.0/20

  • POD_CIDR_BLOCK:用于集群中 Pod 的 IP 地址范围(采用 CIDR 格式)。范围必须至少为 /18。

    示例:--pod-address-cidr-blocks=192.168.0.0/16

  • CONTROL_PLANE_VIP:您已选择在负载均衡器上为用户集群的 Kubernetes API 服务器配置的 IP 地址。

    示例:--control-plane-vip=203.0.113.3

  • CONTROL_PLANE_NODE_PORT:Kubernetes API 服务器的 nodePort 值。

  • INGRESS_VIP:您选择在负载均衡器上为入站流量代理配置的 IP 地址。

    示例:--ingress-vip=203.0.113.4

  • INGRESS_HTTP_NODE_PORT:流向 Ingress 代理的 HTTP 流量的 nodePort 值。

  • INGRESS_HTTPS_NODE_PORT:流向 Ingress 代理的 HTTPS 流量的 nodePort 值。

  • KONNECTIVITY_SERVER_NODE_PORT:Konnectivity 服务器的 nodePort 值。

  • --static-ip-config-ip-blocks:指定用户集群中工作器节点的默认网关、子网掩码和静态 IP 地址列表。该标志的值采用以下格式:
    --static-ip-config-ip-blocks 'gateway=GATEWAY,netmask=NETMASK,ips=IP_ADDRESS_1;IP_ADDRESS_2 HOST_2;...'

    该值的各部分分别以关键字 gatewaynetmaskips 开头。用逗号分隔各个部分。

    请注意以下几点:

    • 用英文单引号将整个值括起来。
    • 除了在 IP 地址和主机名之间,其他地方不允许使用空格。

    在 IP 地址列表中:

    • 您可以指定单个 IP 地址或 IP 地址的 CIDR 块。
    • 用分号分隔每个 IP 地址或 CIDR 块。
    • 对于单个 IP 地址,您可以选择在 IP 地址后指定主机名。用空格分隔 IP 地址和主机名。如果未指定主机名,GKE on VMware 会将 vSphere 中的虚拟机名称用作主机名。
    • 如果您指定 CIDR 块,请不要为主机名指定值。

    例如:

    --static-ip-config-ip-blocks 'gateway=172.16.23.254,netmask=255.255.252.0,ips=172.16.20.10;172.16.20.11 host2;172.16.20.12/30'
  • DNS_SERVER:虚拟机的 DNS 服务器的 IP 地址列表(以英文逗号分隔)。
  • DNS_SEARCH_DOMAIN:供主机使用的 DNS 搜索网域列表(以英文逗号分隔)。这些搜索域会用作网域搜索列表的一部分。

    例如:

    --dns-search-domains example.com,examplepetstore.com
  • NTP_SERVER:供虚拟机使用的时间服务器的 IP 地址列表(以英文逗号分隔)。

如需查看标志及其说明的完整列表,请参阅 gcloud CLI 参考文档

控制平面标志

如果您要为控制平面配置使用非默认值,请添加以下一个或多个标志:

  • --cpus=vCPUS:用户集群的每个控制平面节点的 vCPU 数量(最少 4 个)。如果未指定,则默认值为 4 个 vCPU。

  • --memory=MEMORY:用户集群的每个控制平面的内存大小(以兆比字节 (MiB) 为单位)。最小值为 8192,并且必须是 4 的倍数。如果未指定,则默认值为 8192。

  • --replicas=NODES:用户集群的控制平面节点数量。例如,您可以为开发环境选择 1 个控制平面节点,为高可用性 (HA) 生产环境选择 3 个控制平面节点。

  • --enable-auto-resize:如果要为用户集群启用控制平面节点的自动调整大小功能,请添加 --enable-auto-resize。调整大小是指自动调整分配给节点的 vCPU 和内存资源。启用后,用户集群控制平面节点会根据用户集群中的工作器节点数量调整大小。因此,当您向用户集群添加更多工作器节点时,控制平面节点的大小会增加。

  • --enable-control-plane-v2:如果要启用 Controlplane V2,请添加 --enable-control-plane-v2。启用 Controlplane V2 后,用户集群的控制平面在用户集群本身中的一个或多个节点上运行。默认情况下,用户集群的控制平面在管理员集群的一个或多个节点上运行(称为 kubeception 模型)。启用 Controlplane V2 时,--cpus--memory 的值适用于用户集群中的控制平面节点。节点数由您在 --control-plane-ip-block 中输入的 IP 地址数量决定。未启用 Controlplane V2 时,--cpus--memory--replicas 的值适用于管理员集群中的控制平面节点。请确保为管理员集群预留足够的 IP 地址

    如果启用 Controlplane V2,则还必须指定以下标志:

    • --dns-servers=DNS_SERVER_1,...:虚拟机的 DNS 服务器的 IP 地址列表(以英文逗号分隔)。

    • --ntp-servers=NTP_SERVER_1,...:供虚拟机使用的时间服务器的 IP 地址列表(以英文逗号分隔)。

    • --control-plane-ip-block,其格式如下:

      --control-plane-ip-block 'gateway=CP_GATEWAY,netmask=CP_NETMASK,ips=CP_IP_ADDRESS_1;CP_IP_ADDRESS_2 CP_HOST_2'

      该值的各部分以关键字 gatewaynetmaskips 开头。用逗号分隔各个部分。

      请注意以下几点:

      • 用英文单引号将整个值括起来。
      • 除了在 IP 地址和主机名之间,其他地方不允许使用空格。

      在 IP 地址列表中:

      • 您可以指定单个 IP 地址或 IP 地址的 CIDR 块。

      • 用分号分隔每个 IP 地址或 CIDR 块。

      • 对于单个 IP 地址,您可以选择在 IP 地址后指定主机名。用空格分隔 IP 地址和主机名。

      • 如果您指定 CIDR 块,请不要为主机名指定值。

      例如:

      --control-plane-ip-block 'gateway=192.168.0.1,netmask=255.0.0.0,ips=192.168.1.1;192.168.1.2 hostname-2;192.168.2.2/28`
      
    • 可选:--dns-search-domains=DNS_SEARCH_DOMAIN_1,...:供主机使用的 DNS 搜索网域列表(以英文逗号分隔)。这些网域会用作网域搜索列表的一部分。

      例如:

      --dns-search-domains example.com,examplepetstore.com

如需查看标志及其说明的完整列表,请参阅 gcloud CLI 参考文档

vSphere 标志

如果需要,请指定以下可选标志:

  • --disable-aag-config:如果您不添加此标志,则系统会自动为用户集群的节点创建 VMware 分布式资源调度器 (DRS) 反亲和性规则,使其分布在数据中心的至少 3 个物理主机上。确保您的 vSphere 环境符合要求。如果您的集群不符合要求,请添加此标志。

  • --disable-vsphere-csi:如果您不添加此标志,则 vSphere 容器存储接口 (CSI) 组件会部署在用户集群中。CSI 驱动程序运行在 vSphere 中部署的原生 Kubernetes 集群中,用于在 vSphere 存储上预配永久性卷。如需了解详情,请参阅使用 vSphere 容器存储接口驱动程序。 如果您不想部署 CSI 组件,请添加此标志。

如需查看标志及其说明的完整列表,请参阅 gcloud CLI 参考文档

在运行 gcloud 命令创建集群之前,您可能需要添加 --validate-only 以验证您在 gcloud 命令的标志中指定的配置。准备好创建集群后,请移除此标志并运行该命令。

此命令的输出类似如下所示:

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 vmware operations describe OPERATION_ID \
  --project=FLEET_HOST_PROJECT_ID \
  --location=REGION

如需了解详情,请参阅 gcloud container vmware operations

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

创建节点池

创建集群后,您至少需要创建一个节点池才能部署工作负载。

gcloud container vmware node-pools create NODE_POOL_NAME \
--cluster=USER_CLUSTER_NAME  \
--project=FLEET_HOST_PROJECT_ID \
--location=REGION \
--image-type=IMAGE_TYPE  \
--boot-disk-size=BOOT_DISK_SIZE \
--cpus=vCPUS \
--memory=MEMORY \
--replicas=NODES \
--enable-load-balancer

替换以下内容:

  • NODE_POOL_NAME:您为节点池选择的名称。该名称必须:

    • 最多包含 40 个字符
    • 只能包含小写字母数字字符或连字符 (-)
    • 以字母字符开头
    • 以字母数字字符结尾
  • USER_CLUSTER_NAME:新创建的用户集群的名称。

  • FLEET_HOST_PROJECT_ID:集群在其中注册的项目的 ID。

  • REGION:您在创建集群时指定的 Google Cloud 位置。

  • IMAGE_TYPE:要在节点池中的虚拟机上运行的操作系统映像类型。设置为以下其中一项:ubuntu_containerdcos

  • BOOT_DISK_SIZE:池中每个节点的启动磁盘的大小(以吉比字节 [GiB] 为单位)。最小值为 40 GiB。

  • vCPUs:节点池中每个节点的 vCPU 数量。最小值为 4。

  • MEMORY:池中每个节点的内存大小(以兆比字节 [MiB] 为单位)。每个用户集群工作器节点至少需要 8192 MiB,并且该值必须是 4 的倍数。

  • NODES:节点池中的节点数。最小值为 3。

  • 如果您使用 MetalLB 作为负载均衡器,则可以选择添加 --enable-load-balancer(如果您想允许 MetalLB speaker 在池中的节点上运行)。必须至少在一个节点池中启用 MetalLB。如果不添加此标志,则必须创建另一个用于 MetalLB 的节点池。

如需了解可选标志,请参阅添加节点池gcloud CLI 参考文档

Terraform

您可以使用以下基本配置示例,创建具有捆绑式 MetalLB 负载均衡器的用户集群和一个节点池。

如需了解详情和其他示例,请参阅 google_gkeonprem_vmware_cluster 参考文档

  1. 克隆 anthos-samples 代码库并切换到 Terraform 示例所在的目录:

    git clone https://github.com/GoogleCloudPlatform/anthos-samples
    cd anthos-samples/anthos-onprem-terraform/avmw_user_cluster_metallb
    

terraform.tfvars 中设置变量

此示例提供了一个要传入到 main.tf 的示例变量文件,介绍了如何配置捆绑式 MetalLB 负载均衡器并允许集群节点从您提供的 DHCP 服务器获取其 IP 地址。

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

    cp terraform.tfvars.sample terraform.tfvars
    
  2. 修改 terraform.tfvars 中的参数值。

    project_id                  = "FLEET_HOST_PROJECT_ID"
    region                      = "REGION"
    admin_cluster_name          = "ADMIN_CLUSTER_NAME"
    on_prem_version             = "VERSION"
    admin_user_emails           = ["YOUR_EMAIL_ADDRESS", "ADMIN_2_EMAIL_ADDRESS"]
    cluster_name                = "avmw-user-cluster-metallb"
    control_plane_node_cpus     = 4
    control_plane_node_memory   = 8192
    control_plane_node_replicas = 3
    control_plane_vip           = "CONTROL_PLANE_VIP"
    ingress_vip                 = "INGRESS_VIP"
    lb_address_pools            = [
        { name = "lbpool_1", addresses = ["10.200.0.51-10.200.0.70"] }
    ]
    

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

    • project_id:项目 ID,您将在此项目中创建集群。指定的项目也会用作舰队宿主项目。该项目必须是管理员集群注册到的项目。创建用户集群后,它会自动注册到所选项目的舰队。集群创建后,舰队宿主项目便无法更改。

    • region:运行 GKE On-Prem API 的 Google Cloud 区域。请指定 us-west1 或其他受支持的区域

    • admin_cluster_name:管理用户集群的管理员集群的名称。

    • on_prem_version:用户集群的 GKE on VMware 版本。通常,您需要指定与管理员集群相同的版本。如需指定更高版本,请安装比管理员集群版本更高的版本。如果您不知道管理员集群版本,请运行 gcloud container vmware clusters query-version-config,这是安装比管理员集群版本更高的版本中的第一步。

    • admin_user_emails:将被授予集群管理员权限的用户的电子邮件地址列表。如果您打算管理集群,请务必添加您的电子邮件地址。

      创建集群时,GKE On-Prem API 会将 Kubernetes 基于角色的访问权限控制 (RBAC) 政策应用于集群,以便为管理员用户授予 Kubernetes clusterrole/cluster-admin 角色,该角色提供对所有命名空间中集群内所有资源的完整访问权限。此角色还可让用户使用其 Google 身份登录控制台。

    • cluster_name:您为用户集群选择的名称。创建集群后,此名称便无法更改。该名称必须:

      • 最多包含 40 个字符
      • 只能包含小写字母数字字符或连字符 (-)
      • 以字母字符开头
      • 以字母数字字符结尾
    • control_plane_node_cpus:用户集群的每个控制平面节点的 vCPU 数量。最少 4 个 vCPU。

    • control_plane_node_memory:用户集群的每个控制平面的内存大小(以兆比字节 (MiB) 为单位)。最小值为 8192,并且必须是 4 的倍数。

    • control_plane_node_replicas:用户集群的控制平面节点数量。例如,您可以为开发环境选择 1 个控制平面节点,为高可用性 (HA) 生产环境选择 3 个控制平面节点。

    • control_plane_vip:您已选择在负载均衡器上为用户集群的 Kubernetes API 服务器配置的虚拟 IP 地址 (VIP)。

    • ingress_vip:您已选择在负载均衡器上为 Ingress 代理配置的 IP 地址。

    • lb_address_pools:定义 MetalLB 负载均衡器要使用的地址池的映射列表。入站流量 VIP 必须在其中一个池内。指定以下内容:

      • name:池的名称。
      • addresses:采用 CIDR 表示法或带连字符的范围格式的地址范围。如需指定池中的单个 IP 地址(例如对于入站流量 VIP),请使用 /32(采用 CIDR 表示法,例如 192.0.2.1/32)。

      将示例 IP 地址替换为您的值,并根据需要添加其他地址池。

  3. 将更改保存在 terraform.tfvars 中。 如果您不想对 main.tf 进行任何可选更改,请跳到后面的创建集群和一个节点池部分。

可选:在 main.tf 中配置集群设置

本部分介绍了您可以在 main.tf 中进行的一些可选配置更改。在进行更改之前,请创建 main.tf 的备份:

cp main.tf main.tf.bak

工作器节点 IP 寻址模式

默认情况下,main.tf 将集群配置为使用您提供的 DHCP 服务器,为集群的工作器节点分配 IP 地址。DHCP 通过在 network_config 块中添加 dhcp_config 映射进行配置。如果您要为工作器节点提供静态 IP 地址,请对 main.tf 进行以下更改:

  1. 替换 network_config 块并添加 static_ip_config 块。例如:

    network_config {
      service_address_cidr_blocks = ["10.96.0.0/12"]
      pod_address_cidr_blocks = ["192.168.0.0/16"]
      host_config {
        dns_servers = ["10.254.41.1"]
        ntp_servers = ["216.239.35.8"]
      }
      static_ip_config {
        ip_blocks {
          netmask = "255.255.252.0"
          gateway = "10.251.31.254"
          ips {
            ip = "10.251.30.153"
            hostname = "vm-1"
          }
          ips {
            ip = "10.251.31.206"
            hostname = "vm-2"
          }
          ips {
            ip = "10.251.31.193"
            hostname = "vm-3"
          }
          ips {
            ip = "10.251.30.230"
            hostname = "vm-4"
          }
        }
      }
    }
    
  2. 将以下各项替换为您的值:

    • service_address_cidr_blocks:用于集群中 Service 的 IP 地址范围(采用 CIDR 格式)。范围必须至少为 /24。

    • pod_address_cidr_blocks:用于集群中 Pod 的 IP 地址范围(采用 CIDR 格式)。范围必须至少为 /18。

    • dns_servers:虚拟机的 DNS 服务器的 IP 地址列表。

    • ntp_servers:供虚拟机使用的时间服务器的 IP 地址列表。

    • static_ip_config 块中,将 netmaskgateway 的值替换为您的网络地址。将 iphostname 替换为工作器节点的 IP 地址和主机名。

配置 Controlplane V2

默认情况下,main.tf 会将用户集群的控制平面配置为在管理员集群的一个或多个节点上运行(称为 kubeception 模型)。如果您愿意,可以启用 Controlplane V2。启用 Controlplane V2 后,用户集群的控制平面在用户集群本身中的一个或多个节点上运行。如需配置 Controlplane V2,请对 main.tf 进行以下更改:

  1. 在包含 admin_cluster_membership 的行后添加以下行:

    enable_control_plane_v2 = "true"
    
  2. control_plane_v2_config 映射添加到 network_config 块,例如:

    control_plane_v2_config {
      control_plane_ip_block {
        netmask = "255.255.252.0"
        gateway = "10.250.71.254"
        ips {
          ip = "10.250.68.54"
          hostname = "cpv2-vm1"
        }
        ips {
          ip = "10.250.68.128"
          hostname = "cpv2-vm2"
        }
        ips {
          ip = "10.250.71.50"
          hostname = "cpv2-vm3"
        }
      }
    }
    
  3. netmaskgateway 的值替换为网络中的 IP 地址。将 iphostname 替换为控制平面节点的 IP 地址。

创建集群和一个节点池

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

    terraform init
    

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

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

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

    terraform apply
    

    创建用户集群大约需要 15 分钟或更长时间,另外需要 15 分钟来创建节点池。您可以在 Google Cloud 控制台中的 Anthos 集群页面上查看集群。

连接到用户集群

使用 GKE On-Prem API 客户端创建用户集群时,您可以选择指定 Google Cloud 帐号电子邮件地址,将您自己和其他用户添加为集群管理者:

  • 在控制台中,您的电子邮件地址会自动添加到授权部分中的集群基本信息页面上,您可以选择添加其他集群管理员用户。

  • 使用 gcloud CLI 时,请添加设置为您的电子邮件地址的 --admin-users 标志。该标志不接受列表。为每个集群管理员用户添加 --admin-users 标志。

  • 使用 Terraform 示例时,您可以在 terraform.tvars.sample 文件的 admin_user_emails 变量中指定您自己和其他管理员用户。

集群配置了 Kubernetes 基于角色的访问控制 (RBAC) 政策,可授予管理员用户 cluster-admin 角色并可让管理员用户使用其 Google Cloud 身份从控制台登录集群。如需了解详情,请参阅设置 Google 身份验证

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

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

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

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

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

Connect 网关

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

    gcloud auth login
    gcloud config set project PROJECT_ID
    gcloud components update
    
  2. 提取用于与 Connect 网关进行交互的集群凭据。在以下命令中,将 MEMBERSHIP_NAME 替换为您的集群名称。在 GKE 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

安装比管理员集群版本更高的版本

管理员集群可以管理不同版本的用户集群。如果您要创建比管理员集群版本更高的用户集群,则需要下载并部署管理员集群管理该版本的用户集群所需的组件,如下所示:

  1. 获取可用版本的列表:

    gcloud container vmware clusters query-version-config \
        --admin-cluster-membership=ADMIN_CLUSTER_NAME \
        --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \
        --location=REGION
    

    替换以下内容:

    • ADMIN_CLUSTER_NAME:管理员集群的名称。

    • FLEET_HOST_PROJECT_ID:管理员集群注册到的项目的 ID。

    • REGION:运行 GKE On-Prem API 的 Google Cloud 区域。这是您在创建用户集群时指定的区域。请指定 us-west1 或其他受支持的区域

    此命令的输出类似如下所示:

    versions:
    - isInstalled: true
      version: 1.14.3-gke.25
    - version: 1.14.4-gke.54
    - version: 1.15.0-gke.581
    

    管理员集群上安装的版本带有 isInstalled=true 注解。

  2. 如果您尚未在 GKE On-Prem API 中注册管理员集群,请执行此操作。在 GKE On-Prem API 中注册集群后,您无需再次执行此步骤。

  3. 下载新版本的组件并将其部署到管理员集群中:

    gcloud beta vmware admin-clusters update ADMIN_CLUSTER_NAME \
        --project=FLEET_HOST_PROJECT_ID \
        --location=REGION \
        --required-platform-version=VERSION
    

    此命令会将您在 --required-platform-version 中指定版本的组件下载到管理员集群,然后部署组件。 现在,您可以使用指定的版本创建用户集群

后续步骤