创建用户集群 (Controlplane V2)

本文档介绍了如何创建启用了 Controlplane V2 的用户集群。

使用控制平面 V2 时,用户集群的控制平面会在用户集群本身的一个或多个节点上运行。Controlplane V2 是创建集群的默认和推荐设置。

过程概览

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

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

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

准备工作

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

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

  • 查看负载均衡概览,并重新考虑有关要使用的负载均衡器类型的决定。您可以使用捆绑式 MetalLB 负载均衡器,也可以手动配置您选择的负载均衡器。对于手动负载均衡,您必须先设置负载均衡器,然后才能创建用户集群。

  • 请继续查看 vCenter 部分。考虑是否要为管理员集群和用户集群使用不同的 vSphere 集群,以及是否要使用不同的数据中心。此外,请考虑是否要使用单独的 vCenter Server 实例。

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

1. 连接到管理员工作站

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

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

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

2. 填写配置文件

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

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

name

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

gkeOnPremVersion

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

enableControlplaneV2

enableControlplaneV2 设置为 true

enableDataplaneV2

enableDataplaneV2 设置为 true

vCenter

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

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

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

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

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

默认选项为管理员集群和用户集群使用一个数据中心和一个 vSphere 集群。如果选择此选项,请勿在用户集群配置文件中设置任何 vCenter 值。vCenter 值将从管理员集群继承。

使用单独的 vSphere 集群

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

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

使用单独的 vSphere 数据中心

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

如果您在用户集群配置文件中指定了 vCenter.datacenter,则还必须指定:

  • vCenter.networkName
  • vCenter.datastorevCenter.storagePolicyName
  • vCenter.clustervCenter.resourcePool

使用单独的 vCenter 账号

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

使用单独的 vCenter Server 实例

在某些情况下,最好是创建使用自己的 vCenter Server 实例的用户集群。也就是说,管理员集群和关联的用户集群使用不同的 vCenter Server 实例。

例如,在边缘位置,您可能需要一台物理机器运行 vCenter Server,一台或多台物理机器运行 ESXi。然后,您可以使用本地 vCenter Server 实例创建 vSphere 对象层次结构,包括数据中心、集群、资源池、数据存储区和文件夹。

填写用户集群配置文件的整个 vCenter 部分。具体而言,请为 vCenter.address 指定一个值,该值不同于您在管理员集群配置文件中指定的 vCenter Server 地址。例如:

vCenter:
  address: "vc-edge.example"
  datacenter: "vc-edge"
  cluster: "vc-edge-workloads"
  resourcePool: "vc-edge-pool
  datastore: "vc-edge-datastore
  caCertPath: "/usr/local/google/home/me/certs/edge-cacert.pem"
  credentials:
    fileRef:
      path: "credential.yaml"
      entry: "vCenter-edge"
  folder: "edge-vm-folder"

此外,请填写 network.vCenter.networkName 字段。

network

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

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

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

如果您已决定为工作器节点使用静态 IP 地址,请填写 network.ipMode.ipBlockFilePath 字段。

用户集群的控制平面节点必须从您提供的静态地址列表中获取其 IP 地址。即使工作器节点从 DHCP 服务器获取其地址,情况也是如此。如需为控制平面节点指定静态 IP 地址,请填写 network.controlPlaneIPBlock 部分。如果您需要高可用性 (HA) 用户集群,请指定三个 IP 地址。否则,请指定一个 IP 地址。

填写 hostConfig 部分,指定 DNS 和 NTP 服务器。这些 DNS 和 NTP 服务器适用于控制平面节点。如果您对工作器节点使用静态 IP 地址,则这些 DNS 和 NTP 服务器也用于工作器节点。

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

无论您是依赖 DHCP 服务器还是指定静态 IP 地址列表,都需要有足够的 IP 地址供用户集群使用。如需了解所需的 IP 地址数量,请参阅规划 IP 地址

loadBalancer

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

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

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

advancedNetworking

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

multipleNetworkInterfaces

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

storage

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

masterNode

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

回想一下,您在 network.controlPlaneIPBlock 部分中为控制平面节点指定了 IP 地址。

nodePools

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

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

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

antiAffinityGroups

antiAffinityGroups.enabled 设置为 truefalse

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

stackdriver

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

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

请注意新集群的以下要求:

  • stackdriver.projectID 中的 ID 必须与 gkeConnect.projectIDcloudAuditLogging.projectID 中的 ID 相同。

  • stackdriver.clusterLocation 中设置的 Google Cloud 区域必须与在 cloudAuditLogging.clusterLocation 中设置的区域相同。此外,如果 gkeOnPremAPI.enabledtrue,则必须在 gkeOnPremAPI.location 中设置同一区域。

如果项目 ID 和区域不相同,则集群创建会失败。

gkeConnect

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

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

如果您在配置文件中添加 stackdrivercloudAuditLogging 部分,则 gkeConnect.projectID 中的 ID 必须与 stackdriver.projectIDcloudAuditLogging.projectID 中设置的 ID 相同。如果项目 ID 不同,集群创建将失败。

gkeOnPremAPI

在 1.16 及更高版本中,如果您的 Google Cloud 项目中启用了 GKE On-Prem API,则项目中的所有集群都会自动在 stackdriver.clusterLocation 中配置的区域中注册 GKE On-Prem API

  • 如果您想在 GKE On-Prem API 中注册项目中的所有集群,请务必执行准备工作中的步骤,以在项目中激活并使用 GKE On-Prem API。

  • 如果您不想在 GKE On-Prem API 中注册集群,请添加此部分并将 gkeOnPremAPI.enabled 设置为 false。如果您不想在项目中注册任何集群,请在项目中停用 gkeonprem.googleapis.com(GKE On-Prem API 的服务名称)。如需查看相关说明,请参阅停用服务

usageMetering

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

cloudAuditLogging

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

请注意新集群的以下要求:

  • cloudAuditLogging.projectID 中的 ID 必须与 gkeConnect.projectIDstackdriver.projectID 中的 ID 相同。

  • cloudAuditLogging.clusterLocation 中设置的 Google Cloud 区域必须与在 stackdriver.clusterLocation 中设置的区域相同。此外,如果 gkeOnPremAPI.enabledtrue,则必须在 gkeOnPremAPI.location 中设置同一区域。

如果项目 ID 和区域不相同,则集群创建会失败。

已填写的配置文件的示例

以下是 IP 地址块文件和用户集群配置文件的示例:

user-ipblock.yaml

blocks:
  - netmask: 255.255.255.0
    gateway: 172.16.21.1
    ips:
    - ip: 172.16.21.2
      hostname: worker-vm-1
    - ip: 172.16.21.3
      hostname: worker-vm-2
    - ip: 172.16.21.4
      hostname: worker-vm-3
    - ip: 172.16.21.5
      hostname: worker-vm-4

user-cluster.yaml

cat user-cluster.yaml
apiVersion: v1
kind: UserCluster
name: "my-user-cluster"
gkeOnPremVersion: 1.15.0-gke.581
enableControlplaneV2: true
enableDataplaneV2: true
network:
  hostConfig:
    dnsServers:
    - "203.0.113.2"
    - "198.51.100.2"
    ntpServers:
    - "216.239.35.4"
  ipMode:
    type: "static"
    ipBlockFilePath: "user-ipblock.yaml"
  serviceCIDR: 10.96.0.0/20
  podCIDR: 192.168.0.0/16
  controlPlaneIPBlock:
    netmask: "255.255.255.0"
    gateway: "172.16.21.1"
    ips:
    - ip: "172.16.21.6"
      hostname: "cp-vm-1"
    - ip: "172.16.21.7"
      hostname: "cp-vm-2"
    - ip: "172.16.21.8"
      hostname: "cp-vm-3"
loadBalancer:
  vips:
    controlPlaneVIP: "172.16.21.40"
    ingressVIP: "172.16.21.30"
  kind: MetalLB
  metalLB:
    addressPools:
    - name: "address-pool-1"
      addresses:
      - "172.16.21.30-172.16.21.39"
masterNode:
  cpus: 4
  memoryMB: 8192
  replicas: 3
nodePools:
- name: "worker-node-pool"
  cpus: 4
  memoryMB: 8192
  replicas: 3
  enableLoadBalancer: true
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

以下是在上述示例中要理解的要点:

  • 工作器节点的静态 IP 地址在 IP 地址块文件中指定。即使只有三个工作器节点,IP 块文件也具有四个地址。在集群升级、更新和自动修复期间需要额外的 IP 地址。

  • DNS 和 NTP 服务器在 hostConfig 部分中指定。在此示例中,这些 DNS 和 NTP 服务器用于控制平面节点和工作器节点。这是因为工作器节点具有静态 IP 地址。如果工作器节点从 DHCP 服务器获取其 IP 地址,那么这些 DNS 和 NTP 服务器将仅用于控制平面节点。

  • 三个控制平面节点的静态 IP 地址在用户集群配置文件的 network.controlPlaneIPBlock 部分中指定。此块中不需要额外的 IP 地址。

  • masterNode.replicas 字段设置为 3

  • 控制平面 VIP 地址和入站流量 VIP 地址与工作器节点和控制平面节点位于同一 VLAN。

  • 为 LoadBalancer 类型的 Service 预留的 VIP 在用户集群配置文件的 loadBalancer.metalLB.addressPools 部分中指定。这些 VIP 地址与工作器节点和控制平面节点位于同一 VLAN。 此部分中指定的一组 VIP 必须包含入站流量 VIP,不得包含控制平面 VIP。

  • 用户集群配置文件不包含 vCenter 部分。因此,用户集群使用的 vSphere 资源与管理员集群相同。

验证配置文件

填写用户集群配置文件后,请运行 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. (可选)将操作系统映像导入 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:用户集群配置文件的路径

4.创建用户集群

创建用户集群:

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 文件的名称和位置。

5. 验证用户集群正在运行

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

kubectl get nodes --kubeconfig USER_CLUSTER_KUBECONFIG

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

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

cp-vm-1       Ready    control-plane,master   18m
cp-vm-2       Ready    control-plane,master   18m
cp-vm-3       Ready    control-plane,master   18m
worker-vm-1   Ready                           6m7s
worker-vm-2   Ready                           6m6s
worker-vm-3   Ready                           6m14s

升级用户集群

按照升级 Anthos Clusters on VMware 中的说明进行操作。

删除集群

如需删除启用了控制平面 V2 的用户集群,请按照删除用户集群中的说明操作。

删除启用了控制平面 V2 的用户集群时,系统会自动删除数据磁盘。

问题排查

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

后续步骤