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

本页面介绍了如何使用 Google Cloud 控制台或 Google Cloud CLI (gcloud CLI) 创建用户集群。这两个标准 Google Cloud 客户端都使用 Anthos On-Prem API 创建集群。

什么是 Anthos On-Prem API?

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

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

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

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

准备工作

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

授予 IAM 权限

在 Google Cloud 控制台中创建用户集群的操作受 Identity and Access Management (IAM) 控制。如果您不是项目所有者,则除了在 Google Cloud 控制台中查看集群和容器资源所需的角色之外,您还必须至少获得以下角色:

  • roles/gkeonprem.admin 如需详细了解此角色具备的权限,请参阅 IAM 文档中的 GKE On-Prem 角色

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

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

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

如需详细了解这些角色具备的权限,请参阅 IAM 文档中的 GKE Hub 角色

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

注册管理员集群

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

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

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

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

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

所需的 Google API

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

如果您要使用 gcloud CLI 创建集群,则必须启用 Anthos On-Prem API:

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

命令行访问权限

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

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

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

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

创建用户集群

您可以使用 Google Cloud 控制台或 Google Cloud CLI (gcloud CLI) 创建由 Anthos On-Prem API 管理的用户集群。如果您刚刚开始了解如何安装 Anthos Clusters on VMware,可能会发现控制台比 gcloud CLI 更易于使用。

在您进一步熟悉创建集群所需的信息后,您可能会发现 gcloud CLI 更方便,因为您可以将命令及其参数保存到文本文件中。如果您使用的是 CI/CD 工具(例如 Cloud Build),则可以使用 gcloud 命令创建集群和节点池,并指定 --impersonate-service-account 标志以自动执行创建操作。

控制台

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

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

    前往“Anthos 集群”页面

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

  3. 点击创建集群

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

  5. 点击 VMware vSphere 旁边的配置

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

gcloud CLI

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

gcloud alpha container vmware clusters create

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

gcloud alpha container vmware node-pools create

创建集群和节点池的大多数标志都对应于用户集群配置文件中的字段。为帮助您开始使用,您可以在示例部分中测试完整命令。如需了解这些标志,请参阅示例后面的部分。如需查看标志及其说明的完整列表,请参阅 gcloud CLI 参考文档

准备工作

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

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

    gcloud components update
    

示例

本部分提供了两个使用 MetalLB 负载均衡器创建集群的命令示例。这些示例不包含用于配置控制平面节点的标志,这些节点设置为默认值,即 vCPU 为 4 个,内存为 8192,节点为 1 个。集群运行后,您必须先添加节点池,然后才能部署工作负载。

DHCP

如果需要填写 --admin-cluster-membership 标志的 ADMIN_CLUSTER_NAME 占位符,请务必滚动。

gcloud alpha 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 \
  --enable-dhcp \
  --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

静态 IP

如果需要填写 --admin-cluster-membership 标志的 ADMIN_CLUSTER_NAME 占位符,请务必滚动。

gcloud alpha 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 \
  --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,... \
  --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

以下部分介绍了用于创建集群的标志。为方便起见,这些标志的相关信息按控制台中的相应设置进行分组。如需查看标志及其说明的完整列表,请参阅 gcloud CLI 参考文档

创建集群后,请参阅节点池命令为新创建的集群创建节点池。

集群基本信息

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

控制台

  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 创建的管理员审核日志

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

  4. 选择用户集群的 Anthos clusters on VMware 版本。

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

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

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

gcloud CLI

本部分介绍了用于提供有关集群的基本信息的标志。

gcloud alpha 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 \
  --NETWORKING_FLAGS \
  --LOAD_BALANCER_FLAGS \
  --CONTROL_PLANE_FLAGS \
  --FEATURES_FLAGS

请替换以下内容:

  • USER_CLUSTER_NAME:您为用户集群选择的名称。创建集群后,此名称便无法更改。 该名称必须:
    • 最多包含 40 个字符
    • 只能包含小写字母数字字符或连字符 (-)
    • 以字母字符开头
    • 以字母数字字符结尾
  • FLEET_HOST_PROJECT_ID:您要在其中创建集群的项目的 ID。指定的项目也会用作舰队宿主项目。该项目必须是管理员集群注册到的项目。创建用户集群后,它会自动注册到所选项目的舰队。集群创建后,舰队宿主项目便无法更改。
  • ADMIN_CLUSTER_NAME:管理用户集群的管理员集群的名称。管理员集群名称是在 Google Cloud 中唯一标识集群的完全指定集群名称 (projects/FLEET_HOST_PROJECT_ID/locations/global/memberships/ADMIN_CLUSTER_NAME) 中的最后一个部分。
  • REGION:运行 Anthos On-Prem API 的 Google Cloud 区域。指定 us-west1 或其他受支持的区域。创建集群后,此区域便无法更改。此设置指定存储以下内容的区域:
    • Anthos On-Prem API 管理集群生命周期所需的用户集群元数据
    • 系统组件的 Cloud Logging 和 Cloud Monitoring 数据
    • Cloud Audit Logs 创建的管理员审核日志

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

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

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

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

网络

控制台

在本部分中,您将指定集群的节点、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),请在主机配置部分中指定以下信息:

  5. 输入 DNS 服务器的 IP 地址。

  6. 输入 NTP 服务器的 IP 地址。

  7. (可选)输入 DNS 搜索网域。

  8. 点击继续以转到负载均衡器部分。

gcloud CLI

本部分介绍了网络标志。您可以使用这些标志指定集群的节点、Pod 和 Service 的 IP 地址。用户集群需要为每个节点分配一个 IP 地址,并为集群升级、更新和自动修复期间所需的临时节点额外分配一个 IP 地址。如需了解详情,请参阅用户集群需要多少个 IP 地址?

DHCP

gcloud alpha container vmware clusters create USER_CLUSTER_NAME \
  --CLUSTER_BASICS_FLAGS \
  --enable-dhcp \
  --service-address-cidr-blocks=SERVICE_CIDR_BLOCK \
  --pod-address-cidr-blocks=POD_CIDR_BLOCK \
  --LOAD_BALANCER_FLAGS \
  --CONTROL_PLANE_FLAGS \
  --FEATURES_FLAGS

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

静态 IP

gcloud alpha container vmware clusters create USER_CLUSTER_NAME \
  --CLUSTER_BASICS_FLAGS \
  --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,... \
  --service-address-cidr-blocks=SERVICE_CIDR_BLOCK \
  --pod-address-cidr-blocks=POD_CIDR_BLOCK \
  --LOAD_BALANCER_FLAGS \
  --CONTROL_PLANE_FLAGS \
  --FEATURES_FLAGS

请替换以下内容:

  • --static-ip-config-ip-blocks 中:指定用户集群中节点的默认网关、子网掩码和静态 IP 地址列表。该标志的值采用以下格式:

    'gateway=GATEWAY,netmask=NETMASK,ips=IP_ADDRESS_1;IP_ADDRESS_2 HOST_2;...'
    

    该值的细分以关键字 gatewaynetmaskips 开头。用英文逗号分隔细分。

    请注意以下几点:

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

    在 IP 地址列表中:

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

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

    • 对于单个 IP 地址,您可以选择在 IP 地址后指定主机名。用空格分隔 IP 地址和主机名。如果您未指定主机名,则 Anthos clusters on VMware 会使用 vSphere 中的虚拟机名称作为主机名。

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

    例如:

    '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 搜索网域逗号分隔列表。这些搜索域会用作网域搜索列表的一部分。

  • NTP_SERVER:供虚拟机使用的时间服务器的 IP 地址逗号分隔列表。

对于 DHCP 和静态 IP 地址,请替换以下内容:

  • 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=92.168.0.0/16

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

负载均衡器

控制台

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

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

与 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,然后再将其与 Anthos Clusters on VMware 集成。如需了解详情,请参阅 F5 BIG-IP ADC 安装指南。 F5 用户名和密码继承自管理员集群。

  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. 点击继续

gcloud CLI

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

与 MetalLBLB 捆绑

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

gcloud alpha container vmware clusters create USER_CLUSTER_NAME \
  --CLUSTER_BASICS_FLAGS \
  --NETWORKING_FLAGS \
  --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
  --CONTROL_PLANE_FLAGS \
  --FEATURES_FLAGS

请替换以下内容:

  • --metal-lb-config-address-pool 中:指定 MetalLB 负载均衡器要使用的地址池的配置。该标志的值采用以下格式:

    '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-ips:如果将该字段设置为 True,则 MetalLB 控制器不会将以 .0 或 .255 结尾的 IP 地址分配给 Service。这样可以避免有问题的用户设备错误地丢弃发送到这些特殊 IP 地址的流量。如果未指定,则默认为 False

    • manual-ssign:如果您不希望 MetalLB 控制器自动将此池中的 IP 地址分配给 Service,请将该字段设置为 True。之后,开发者便可以创建 LoadBalancer 类型的 Service 并手动指定池中的一个地址。如果未指定,则 manual-assign 设置为 False

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

    请注意以下几点:

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

    例如:

    '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:您选择在负载均衡器上为入站流量代理配置的 IP 地址。

    示例:--ingress-vip=10.251.134.80

Ingress VIP 的 IP 地址必须位于 MetalLB 地址池之一中。

F5 Big-IP 负载均衡器

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

gcloud alpha container vmware clusters create USER_CLUSTER_NAME \
  --CLUSTER_BASICS_FLAGS \
  --NETWORKING_FLAGS \
  --f5-config-address=F5_CONFIG_ADDRESS \
  --f5-config-partition=F5_CONFIG_PARTITION \
  --f5-config-snat-pool=F5_CONFIG_SNAT_POOL \
  --control-plane-vip=CONTROL_PLANE_VIP \
  --ingress-vip=INGRESS_VIP
  --CONTROL_PLANE_FLAGS \
  --FEATURES_FLAGS

请替换以下内容:

  • 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:您选择在负载均衡器上为入站流量代理配置的 IP 地址。

    示例:--ingress-vip=10.251.132.9

手动负载均衡器

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

gcloud alpha container vmware clusters create USER_CLUSTER_NAME \
  --CLUSTER_BASICS_FLAGS \
  --NETWORKING_FLAGS \
  --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 \
  --CONTROL_PLANE_FLAGS \
  --FEATURES_FLAGS

请替换以下内容:

  • 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_PORTP:流向 Ingress 代理的 HTTPS 流量的 nodePort 值。

  • KONNECTIVITY_SERVER_NODE_PORT:Konnectivity 服务器的 nodePort 值。

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

控制平面

控制台

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

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

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

gcloud CLI

本部分介绍管理员集群中充当此用户集群控制平面节点的节点的标志。

gcloud alpha container vmware clusters create USER_CLUSTER_NAME \
  --CLUSTER_BASICS_FLAGS \
  --NETWORKING_FLAGS \
  --LOAD_BALANCER_FLAGS \
  --cpus=vCPUS \
  --memory=MEMORY \
  --replicas=NODES \
  --enable-auto-resize
  --FEATURES_FLAGS

请替换以下内容:

  • vCPUS:用作用户集群控制平面的每个管理员集群节点的 vCPU 数量(至少 4 个)。如果未指定,则默认为 4 个 vCPU。

  • MEMORY:用作用户集群控制平面的每个管理员集群节点的内存大小(以 MiB 为单位)。最小值为 8192,并且必须是 4 的倍数。如果未指定,默认值为 8192。

  • NODES:您的用户集群的控制平面节点数量。例如,您可以为开发环境选择 1 个控制平面节点,为高可用性 (HA) 生产环境选择 3 个控制平面节点。用户控制平面位于管理员集群节点上,因此请确保您为每个控制平面节点预留足够的 IP 地址。如需了解详情,请参阅管理员集群需要多少个 IP 地址?。 如果未指定,默认值为 1。

  • 可选:如果您要为用户集群启用控制平面节点的自动调整大小功能,请添加 --enable-auto-resize。 如需了解详情,请参阅为用户集群的控制平面节点启用节点大小调整

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

特性

控制台

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

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

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

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

gcloud CLI

本部分介绍如何停用某些 vSphere 功能。

gcloud alpha container vmware clusters create USER_CLUSTER_NAME \
  --CLUSTER_BASICS_FLAGS \
  --NETWORKING_FLAGS \
  --LOAD_BALANCER_FLAGS \
  --CONTROL_PLANE_FLAGS \
  --disable-aag-config \
  --disable-vsphere-csi

请根据需要指定以下内容:

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

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

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

创建集群和节点池

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

在控制台中,配置至少一个节点池(或接受默认值),然后创建集群。您可以在创建集群后添加其他节点池。使用 gcloud CLI 时,您可以先创建集群,然后将一个或多个节点池添加到新创建的集群。

控制台

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

  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. 点击 + 添加污点。输入污点的效果。根据需要重复上述步骤。
  3. 点击验证并完成以创建用户集群。创建用户集群需要 15 分钟或更长时间。控制台会在验证设置并在数据中心内创建集群时显示状态消息。

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

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

gcloud CLI

在运行 gcloud 命令创建集群之前,您可能需要添加 --validate-only 以验证您在 gcloud 命令的标志中指定的配置。准备好创建集群后,请移除此标志并运行命令。创建用户集群需要大约 15 分钟或更长时间。

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

gcloud alpha 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 参考文档

连接到用户集群

在控制台中创建用户集群时,系统会为该集群配置 Kubernetes 基于角色的访问权限控制 (RBAC) 政策,以便您可以使用 Google Cloud 身份登录集群。使用 gcloud CLI 创建用户集群时,如果添加 --admin-users 标志,则默认情况下,系统会为您授予这些 RBAC 政策。如果您添加 --admin-users 以将其他用户指定为管理员,则会替换默认值,并且需要同时添加您的电子邮件地址和另一个管理员的电子邮件地址。如需详细了解所需的 IAM 和 RBAC 政策,请参阅设置 Google 身份验证

所有集群都有一个规范端点。此端点公开了 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 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

后续步骤