使用新的安装模型创建用户集群

本文档介绍如何创建使用新安装模型的用户集群,该模型在 Anthos Clusters on VMware (GKE On-Prem) 1.13 版中作为预览版功能提供。

什么是 kubeception?

术语 kubeception 用于传达 Kubernetes 集群用于创建和管理其他 Kubernetes 集群的想法。在 Anthos Clusters on VMware 环境中,kubeception 指的是用户集群的控制平面在管理员集群中的一个或多个节点上运行的情况。

从 1.13.0 版开始,您可以选择让用户集群的控制平面在用户集群本身中的一个或多个节点上运行。在旧版 Anthos Clusters on VMware 中,kubeception 是唯一的选项。也就是说,所有用户集群都拥有管理员集群中的控制平面。

新安装模型在管理员集群和用户集群之间实现了架构一致性,并将用户集群与管理员集群分离。对于在不同的地理位置网站上运行集群等场景,这是一个优势。

准备工作

您必须拥有管理员集群,并且管理员集群版本必须为 1.13.0 或更高版本。

规划您的 IP 地址

在为用户集群规划 IP 地址时,请注意新安装模型的以下要求:

  • 用户集群的控制平面节点必须从您提供的静态地址列表中获取其 IP 地址。即使工作器节点从 DHCP 服务器获取其地址,情况也是如此。高可用性 (HA) 用户集群需要三个控制平面节点,但非 HA 用户集群只需要一个控制平面节点。

  • 用户集群控制平面节点与用户集群工作器节点必须位于同一 VLAN。这与 kubeception 模型形成对比。

  • 用户集群控制平面 VIP 地址必须与用户集群工作器节点和用户集群控制平面节点位于同一 VLAN。这与 kubeception 模型形成对比。

规划您的 vSphere 环境

管理员集群配置文件用户集群配置文件都具有 vCenter 部分,您可以在其中指定 vSphere 您希望管理员或用户集群使用的资源。

对于用户集群,您无需填写 vCenter 部分,因为默认情况下,用户集群使用与管理员集群相同的 vSphere 资源。但是,如果您希望您的用户集群使用不同于您为管理集群指定的 vSphere 资源,您可以在用户集群配置文件的 vCenter 部分填写您选择的字段。如需了解详情,请参阅设置 vSphere 对象层次结构

在新安装模型中,用户集群的控制平面节点位于用户集群中。因此,控制平面节点使用用户集群配置文件中指定的 vSphere 资源。例如,假设您为管理员集群指定 datacenter-1,且为用户集群指定 datacenter-2。您的用户集群的控制平面节点将位于 datacenter-2

反亲和性群组

管理员集群配置文件用户集群配置文件都具有 antiAffinityGroups.enabled 字段,您可以将该字段设置为 truefalse

在新安装模型中,用户集群的控制平面节点根据用户集群配置文件中 antiAffinityGroups.enabled 值进行分配。

与 kubeception 模型相比,用户集群的控制平面节点根据管理员集群配置文件中的 antiAffinityGroups.enabled 值进行分配。

示例

下面我们提供了一个具有以下特征的用户集群示例:

  • 有三个工作器节点。

  • 工作器节点具有静态 IP 地址。

  • 有三个控制平面节点。也就是说,该集群是 HA 集群。

  • 负载均衡器是 MetalLB。

  • 用户集群使用的 vSphere 资源与管理员集群相同。

下图展示了管理员集群和用户集群的网络:

管理员集群和用户集群
管理员集群和用户集群(点击可放大)

以下是一个 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

apiVersion: v1
kind: UserCluster
...
kubeception: false
network:
  hostConfig:
    dnsServers:
    - "203.0.113.2"
    - "198.51.100.2"
    ntpServers:
    - "216.239.35.4"
  ipMode:
    type: "static"
    ipBlockFilePath: "user-ipblock.yaml"
  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"
  enableLoadBalancer: true

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

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

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

  • masterNode.replicas 字段设置为 3

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

  • 为 LoadBalancer 类型的 Service 预留的 VIP 在用户集群配置文件的 loadBalancer.metalLB.addressPools 部分中指定。这些 VIP 地址与工作器节点和控制平面节点位于同一 VLAN。

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

创建防火墙规则

除了标准防火墙规则之外,请根据需要创建以下防火墙规则:

原货币

来源端口

改换到的货币

目的地端口

协议

说明

管理员集群节点

全部

用户集群控制平面 VIP 地址

443

https

允许管理员集群中的节点和 Pod 与用户集群的 Kubernetes API 服务器通信。

管理员集群节点

全部

用户集群控制平面节点

443

https

允许管理员集群中的节点和 Pod 使用用户集群控制平面节点的 IP 地址与用户集群的 Kubernetes API 服务器通信。

管理员集群节点

全部

用户集群 vCenter Server

443

https

允许管理员集群管理用户集群的生命周期。如果您为 vCenter.address 指定的值与管理员集群配置文件中的 vCenter 地址不同,则必须创建此防火墙规则。

用户集群控制平面节点

1024 - 65535

本地 Docker 注册表

具体取决于您的注册表

TCP/https

如果您在管理员集群配置文件中指定了私有注册表,则必须创建此防火墙规则。

使用新模型创建用户集群

本部分介绍了如何创建使用新安装模型的用户集群。在此示例中,用户集群使用与管理员集群相同的 vCenter Server 实例。

按照创建用户集群中的说明操作。

填写用户集群配置文件时:

  • kubeception 设置为 false

  • 请勿指定 vCenter.address 的值。

  • 请填写 network.controlPlaneIPBlock 部分。 如果您需要 HA 用户集群,请指定三个 IP 地址。否则,请指定一个 IP 地址。

在用户集群运行时,请验证控制平面是否在用户集群中的一个或三个节点上运行:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes

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

验证用户集群的控制平面是否未在管理员集群中运行:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get nodes --output wide

ADMIN_CLUSTER_KUBECONFIG 替换为管理员集群 kubeconfig 文件的路径。

输出会显示管理员集群本身的控制平面节点,但不会显示用户集群的任何控制平面节点。例如:

admin-vm-1   Ready    control-plane,master   82m
admin-vm-2   Ready                           71m
admin-vm-3   Ready                           71m

升级用户集群

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

请注意,使用新安装模型升级用户集群时,整个用户集群(包括用户控制平面节点)会升级。

相比之下,对于使用 kubeception 模型部署的用户集群,控制平面节点在用户集群升级期间不会升级,并且在管理员集群升级之前也不会升级。

删除用户集群

如需删除用户集群,请运行以下命令:

gkectl delete cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --cluster USER_CLUSTER

USER_CLUSTER 替换为用户集群的名称。

删除使用新安装模型的用户集群时,系统不会自动删除集群的数据磁盘。因此,您需要手动删除数据磁盘。一个高可用性集群有三个数据磁盘,一个非高可用性集群有一个数据磁盘。

用户集群的数据磁盘位于以下位置之一:

  • ADMIN_CLUSTER/USER_CLUSTER/

  • ADMIN_DISK_FOLDER/ADMIN_CLUSTER/USER_CLUSTER/

ADMIN_CLUSTER 替换为管理员集群的名称。

如果您在管理员集群配置文件的 vCenter.dataDisk 字段中指定了文件夹,请将 ADMIN_DISK_FOLDER 替换为该文件夹的名称。

对于非高可用性集群,数据磁盘名为 USER_CLUSTER-0-data.vmdk。

对于 HA 集群,数据磁盘的命名方式如下:

  • USER_CLUSTER-0-data.vmdk。
  • USER_CLUSTER-1-data.vmdk。
  • USER_CLUSTER-2-data.vmdk。

您可以使用 vSphere 客户端删除数据磁盘。

创建具有自己的 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"

问题排查

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

后续步骤