创建用户集群

本文档介绍如何为 GKE on VMware 创建用户集群。用户集群是您运行工作负载的位置。每个用户集群都与一个管理员集群相关联。

如需详细了解管理员集群和用户集群,请参阅安装概览

过程概览

以下是创建用户集群涉及的主要步骤:

  1. 连接到管理员工作站
    管理员工作站是一个具有创建用户集群所需的工具的虚拟机。
  2. 填写配置文件
    通过完成用户集群配置文件、凭据配置文件以及可能的 IP 地址块文件,指定新集群的详细信息。
  3. (可选)创建 Seesaw 负载均衡器
    如果您已选择使用 Seesaw 负载均衡器,请运行 gkectl create loadbalancer
  4. (可选)将操作系统映像导入 vSphere,并将容器映像推送到私有注册表(如果适用的话)。
    运行 gkectl prepare
  5. 创建用户集群
    运行 gkectl create cluster 以按照配置文件中所指定的内容创建集群。
  6. 验证用户集群是否正在运行
    使用 kubectl 查看集群节点。

此过程结束时,您将有一个正在运行的用户集群,您可以在其中部署工作负载。

准备工作

  • 确保您已创建管理员工作站管理员集群

  • 查看 IP 地址规划文档。确保您有足够的可用 IP 地址,并重新考虑关于集群节点获取其 IP 地址的方式的决定:DHCP 或静态。如果您决定使用静态 IP 地址,则必须填写包含所选地址的 IP 地址块文件

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

  • 请继续查看 vcenter 部分。考虑是否要为管理员集群和用户集群使用不同的 vSphere 集群,以及是否要使用不同的数据中心。

  • 查看 nodePools 部分。考虑您需要的节点池数量以及每个池中运行的操作系统。

1. 连接到管理员工作站

与管理员工作站建立 SSH 连接

您应该还记得,gkeadm 在管理员工作站上激活了您的组件访问服务账号。

在管理员工作站的主目录中完成本主题中的所有其余步骤。

2. 填写配置文件

gkeadm 创建管理员工作站时,它生成了一个名为 user-cluster.yaml 的配置文件。此配置文件用于创建用户集群。

浏览用户集群配置文件文档,以熟悉配置文件。建议您在单独的标签页或窗口中打开该文档,因为您在完成以下步骤时将参考它。

name

name 字段设置为您为用户集群选择的名称。

gkeOnPremVersion

系统已为您填写此字段。它指定 GKE on VMware 的版本。例如 1.11.0-gke.543

vCenter

您在管理员集群配置文件vCenter 部分中设置的值是全局值。也就是说,这些值会应用于管理员集群及其关联的用户集群。

对于您创建的每个用户集群,您可以选择替换一些全局 vCenter 值。

如需替换任何全局 vCenter 值,请填写用户集群配置文件的 vCenter 部分中的相关字段。

具体而言,您可能希望为管理员集群和用户集群使用不同的 vSphere 集群,并且为管理员集群和用户集群使用不同的数据中心。

使用一个数据中心和一个 vSphere 集群

默认选项是将一个数据中心和一个 vSphere 集群用于管理员集群和任何用户集群。管理员集群配置文件中的值也用于用户集群。请勿在用户集群配置文件中设置任何 vCenter 值。

在单独的 vSphere 集群中创建用户集群

如果您想创建位于自己的 vSphere 集群中的用户集群,请在用户集群配置文件中为 vCenter.cluster 指定值。

如果您的管理员集群和用户集群位于不同的 vSphere 集群中,它们可以位于相同的数据中心中,也可以位于不同数据中心中。

创建具有单独的数据中心的用户集群

用户集群和管理员集群可以位于不同的数据中心中。在这种情况下,它们也位于不同的 vSphere 集群中。

如果您在用户集群配置文件中指定 vCenter.datacenter,则还必须指定 vCenter.datastorevCenter.networkName,并且必须指定 vCenter.clustervCenter.resourcePool

如需为管理员集群和用户集群使用不同的数据中心,我们建议您为管理员集群数据中心中的每个用户集群控制平面创建一个单独的datastore,以便管理员集群控制平面和用户集群控制平面具有相互隔离的数据存储区故障域。虽然您可以将管理员集群数据存储区用于用户集群控制平面节点,但这会将用户集群控制平面节点和管理员集群置于同一数据存储区故障域中。

位于自己的数据中心中的用户集群的不同 vCenter 账号

用户集群可以使用与管理员集群不同的 vCenter 账号和 vCenter.credentials。管理员集群的 vCenter 账号需要管理员集群数据中心访问权限,而用户集群的 vCenter 账号只需要用户集群数据中心的访问权限。

network

确定您要集群节点获取其 IP 地址的方式。选项包括:

  • 从提前设置的 DHCP 服务器获取。将 network.ipMode.type 设置为 "dhcp"

  • 从您提供的静态 IP 地址列表获取。将 network.ipMode.type 设置为 "static",并创建一个提供静态 IP 地址的 IP 地址块文件。如需查看 IP 地址块文件的示例,请参阅已填写的配置文件的示例

根据需要填写 network 部分中的其余字段:

  • 如果您决定为用户集群节点使用静态 IP 地址,则必须填写 network.ipMode.ipBlockFilePath 字段和 network.hostconfig 部分。network.hostconfig 部分包含有关集群节点使用的 NTP 服务器、DNS 服务器和 DNS 搜索网域的信息。

    如果您使用的是 Seesaw 负载均衡器,则即使您打算为集群节点使用 DHCP,也必须填写 network.hostconfig 部分。

  • network.podCIDRnetwork.serviceCIDR 具有预填充的值,您可以保持不变,除非它们与已在您的网络中使用的地址冲突。Kubernetes 会使用这些范围将 IP 地址分配给集群中的 Pod 和 Service。

无论您是依赖 DHCP 服务器还是指定静态 IP 地址列表,都需要有足够的 IP 地址供用户集群使用。这包括用户集群中的节点以及管理员集群中运行用户集群控制平面的节点。如需了解所需的 IP 地址数量,请参阅规划 IP 地址

具有单独 network.vCenter.networkName 值的用户集群的防火墙规则

在管理员配置文件中,管理员集群和用户集群可以使用不同的 network.vCenter.networkName 值来表示不同的 VLAN 和不同的数据中心。但是,必须允许以下跨 VLAN 通信。

  • 用户节点可以访问用户集群控制平面 VIP 地址上的端口 443 和 8132,并从这两个端口获取返回数据包。

loadBalancer

为用户集群的 Kubernetes API 服务器预留一个 VIP。为用户集群的入站服务预留另一个 VIP。提供您的 VIP 作为 loadBalancer.vips.controlPlaneVIPloadBalancer.vips.ingressVIP 的值。

如需了解详情,请参阅用户集群子网中的 VIP管理员集群子网中的 VIP

确定要使用的负载均衡类型。以下是各个选项:

如需详细了解负载均衡选项,请参阅负载均衡概览

enableDataplaneV2

决定是否要为用户集群启用 Dataplane V2,并相应地设置 enableDataplaneV2

enableWindowsDataplaneV2

如果您计划使用 Windows 节点池,请决定是否要启用 Windows Dataplane V2,并相应地设置 enableWindowsDataplaneV2

advancedNetworking

如果您计划创建出站 NAT 网关,请将 advancedNetworking 设置为 true

multipleNetworkInterfaces

决定是否要为 Pod 配置多个网络接口,并相应地设置 multipleNetworkInterfaces

storage

如果要停用 vSphere CSI 组件的部署,请将 storage.vSphereCSIDisabled 设置为 true

masterNode

用户集群的控制平面在管理员集群中的节点上运行。

masterNode 部分中,您可以指定用户集群的控制平面节点数。您还可以为控制平面节点指定数据存储区,以及是否要为节点启用自动调整大小功能。

nodePools

节点池是集群中全都具有相同配置的一组节点。例如,一个池中的节点可以运行 Windows,另一个池中的节点可以运行 Linux。

您必须通过填写 nodePools 部分来至少指定一个节点池。

如需了解详情,请参阅节点池以及创建和管理节点池

antiAffinityGroups

antiAffinityGroups.enabled 设置为 truefalse

此字段指定 GKE on VMware 是否为用户集群节点创建分布式资源调度器 (DRS) 反亲和性规则,使其至少分布到数据中心内的三个物理主机上。

stackdriver

如果要为集群启用 Cloud Logging 和 Cloud Monitoring,请填写 stackdriver 部分。

默认情况下,此部分是必填的。也就是说,如果您不填写此部分,则必须在运行 gkectl create cluster 时添加 --skip-validation-stackdriver 标志。

gkeConnect

用户集群必须注册到 Google Cloud 舰队

填写 gkeConnect 部分以指定舰队宿主项目和关联的服务账号。

usageMetering

如果要为集群启用用量计量功能,请填写 usageMetering 部分。

cloudAuditLogging

如果要将集群的 Kubernetes API 服务器中的审核日志与 Cloud Audit Logs 集成,请填写 cloudAuditLogging 部分。

已填写的配置文件的示例

以下是已填写的 IP 地址块文件和已填写的用户集群配置文件的示例。该配置支持部分(但不是全部)可用功能。

vc-01-ipblock-user.yaml

blocks:
  - netmask: 255.255.252.0
    gateway: 172.16.23.254
    ips:
    - ip: 172.16.20.21
      hostname: user-host1
    - ip: 172.16.20.22
      hostname: user-host2
    - ip: 172.16.20.23
      hostname: user-host3
    - ip: 172.16.20.24
      hostname: user-host4
    - ip: 172.16.20.25
      hostname: user-host5
    - ip: 172.16.20.26
      hostname: user-host6

vc-01-user-cluster.yaml

apiVersion: v1
kind: UserCluster
name: "gke-user-01"
gkeOnPremVersion: 1.11.0-gke.543
network:
  hostConfig:
    dnsServers:
    - "203.0.113.1"
    - "198.51.100.1"
    ntpServers:
    - "216.239.35.4"
  ipMode:
    type: dhcp
    ipBlockFilePath: "vc-01-ipblock-user.yaml"
  serviceCIDR: 10.96.0.0/20
  podCIDR: 192.168.0.0/16
  vCenter:
    networkName: "vc01-net-1"
loadBalancer:
  vips:
    controlPlaneVIP: "172.16.20.32"
    ingressVIP: "172.16.21.30"
  kind: "MetalLB"
   metalLB:
    addressPools:
    - name: "gke-address-pool-01"
      addresses:
      - "172.16.21.30 - 172.16.21.39"
enableDataplaneV2: true
masterNode:
  cpus: 4
  memoryMB: 8192
  replicas: 1
nodePools:
- name: "gke-node-pool-01"
  cpus: 4
  memoryMB: 8192
  replicas: 3
  osImageType: "ubuntu_containerd"
antiAffinityGroups:
  enabled: true
gkeConnect:
  projectID: "my-project-123"
  registerServiceAccountKeyPath: "connect-register-sa-2203040617.json"
stackdriver:
  projectID: "my-project-123"
  clusterLocation: "us-central1"
  enableVPC: false
  serviceAccountKeyPath: "log-mon-sa-2203040617.json"
autoRepair:
  enabled: true

验证配置文件

填写用户集群配置文件后,请运行 gkectl check-config 以验证文件有效:

gkectl check-config --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

替换以下内容:

  • ADMIN_CLUSTER_KUBECONFIG 是管理员集群的 kubeconfig 文件的路径

  • USER_CLUSTER_CONFIG:用户集群配置文件的路径

如果该命令返回任何失败消息,请修复问题并再次验证文件。

如果您想跳过更耗时的验证,请传递 --fast 标志。如需跳过各项验证,请使用 --skip-validation-xxx 标志。如需详细了解 check-config 命令,请参阅运行预检检查

3. (可选)为用户集群创建 Seesaw 负载均衡器

如果您已选择使用捆绑式 Seesaw 负载均衡器,请执行本部分中的步骤。否则,请跳过此部分。

Seesaw 负载均衡器创建并配置虚拟机:

gkectl create loadbalancer --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

4.(可选)将操作系统映像导入 vSphere,并将容器映像推送到私有注册表

如果存在以下任一情况,请运行 gkectl prepare

  • 您的用户集群所在的 vSphere 数据中心与管理员集群不同。

  • 您的用户集群具有的 vCenter Server 与管理员集群不同。

  • 您的用户集群使用的私有注册表与管理员集群使用的私有容器注册表不同。

gkectl prepare --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --bundle-path BUNDLE \
    --user-cluster-config USER_CLUSTER_CONFIG

替换以下内容:

  • ADMIN_CLUSTER_KUBECONFIG:管理员集群 kubeconfig 文件的路径

  • BUNDLE:软件包文件的路径。此文件位于 /var/lib/gke/bundles/ 中的管理员工作站上。例如:

    /var/lib/gke/bundles/gke-onprem-vsphere-1.14.0-gke.421-full.tgz
    
  • USER_CLUSTER_CONFIG:用户集群配置文件的路径

5. 创建用户集群

创建用户集群:

gkectl create cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

找到用户集群 kubeconfig 文件的位置

gkectl create cluster 命令会在当前目录中创建一个名为 USER_CLUSTER_NAME-kubeconfig 的 kubeconfig 文件。您稍后需要此 kubeconfig 文件才能与用户集群进行互动。

kubeconfig 文件包含您的用户集群的名称。如需查看集群名称,您可以运行以下命令:

kubectl config get-clusters --kubeconfig USER_CLUSTER_KUBECONFIG

输出会显示集群的名称。例如:

NAME
my-user-cluster

如果愿意,您可以更改 kubeconfig 文件的名称和位置。

6. 验证用户集群是否正在运行

验证用户集群是否正在运行:

kubectl get nodes --kubeconfig USER_CLUSTER_KUBECONFIG

USER_CLUSTER_KUBECONFIG 替换为用户集群 kubeconfig 文件的路径。

输出会显示用户集群节点。例如:

my-user-cluster-node-pool-69-d46d77885-7b7tx   Ready ...
my-user-cluster-node-pool-69-d46d77885-lsvzk   Ready ...
my-user-cluster-node-pool-69-d46d77885-sswjk   Ready ...

问题排查

请参阅排查集群创建和升级问题

后续步骤