创建管理员集群

本文档介绍如何为 GKE on VMware 创建管理员集群。管理员集群会针对管理员集群自身和关联的用户集群运行 Kubernetes 控制平面。您必须先创建管理员集群,然后才能创建任何用户集群来运行工作负载。

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

过程概览

以下是创建管理员集群所涉及的主要步骤:

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

此过程结束时,您将有一个正在运行的管理员集群,可用于创建和管理用户集群。

准备工作

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

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

  • 查看 privateRegistry 部分,并决定要为 GKE on VMware 组件使用公共注册表还是私有注册表。

  • 继续查看 osImageType 字段,并决定您要在管理员集群节点上运行的操作系统类型

1. 准备管理员工作站

确保您已设置,并且可以按照创建管理员工作站中的说明登录管理员工作站。管理员工作站提供创建管理员集群所需的工具。

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

2. 填写配置文件

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

通过扫描管理员集群配置文件文档熟悉该配置文件。建议您在单独的标签页或窗口中打开该文档,因为您在完成以下步骤时将参考它。

name

如果要为管理员集群指定名称,请填写 name 字段。

bundlePath

该软件包是一个包含集群组件的压缩文件。它包含在管理员工作站中。系统已为您填写此字段。

vCenter

此部分中的大多数字段已使用您在创建管理员工作站时输入的值进行填充。dataDisk 字段除外,您必须现在填写此字段。

network

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

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

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

根据需要填写配置文件的网络部分中的其余字段:

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

  • 如果您使用的是高可用性管理员集群,或者使用 Seesaw 负载均衡器,则无论集群节点使用 DHCP 还是静态 IP,都需要 network.hostconfig 部分。

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

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

高可用性管理员集群

如果要创建高可用性 (HA) 管理员集群,请填写 network.controlPlaneIPBlock 部分和 network.hostConfig 部分。此外,将 adminMaster.replicas 设置为 3

高可用性管理员集群有三个节点,用于运行控制平面组件。

高可用性管理员集群有以下要求和限制:

  • 由高可用性管理员集群管理的用户集群必须启用 Controlplane V2

  • 您不能将 Seesaw 负载均衡器用于高可用性管理员集群。您不能将 Seesaw 负载均衡器用于由高可用性管理员集群管理的用户集群。

loadBalancer

为管理员集群的 Kubernetes API 服务器预留一个 VIP 地址。为插件服务器预留另一个 VIP 地址。提供您的 VIP 地址作为 loadBalancer.vips.controlPlaneVIPloadBalancer.vips.addonsVIP 的值。

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

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

  • MetalLB 捆绑式负载均衡。将 loadBalancer.kind 设置为 "MetalLB"

  • Seesaw 捆绑式负载均衡。将 loadBalancer.kind 设置为 "Seesaw",然后填写 loadBalancer.seesaw 部分。

  • 使用 F5 BIG-IP 的集成式负载均衡。将 loadBalancer.kind 设置为 "F5BigIP",然后填写 f5BigIP 部分。

  • 手动负载均衡。将 loadBalancer.kind 设置为 "ManualLB",然后填写 manualLB 部分。

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

antiAffinityGroups

根据您的偏好将 antiAffinityGroups.enabled 设置为 truefalse

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

adminMaster

如果要为管理员集群的控制平面节点指定 CPU 和内存,请填写 adminMaster 部分中的 cpusmemoryMB 字段。

预览版:如果要创建高可用性管理员集群,请将 adminMaster 部分中的 replicas 字段设置为 3。否则,请将其设置为 1

addonNode

根据您的偏好将 addonNode.autoResize.enabled 设置为 truefalse

proxy

如果将拥有管理员集群节点的网络位于代理服务器后面,请填写 proxy 部分。

privateRegistry

确定 GKE on VMware 组件的容器映像的保存位置。以下是各个选项:

  • Container Registry

  • 您自己的私有 Docker 注册表。

如果要使用自己的私有注册表,请填写 privateRegistry 部分。

componentAccessServiceAccountKeyPath

GKE on VMware 使用您的组件访问服务帐号从 Container Registry 下载集群组件。此字段包含组件访问服务账号的 JSON 密钥文件的路径。

系统已为您填写此字段。

gkeConnect

通过填写 gkeConnect 部分,将管理员集群注册到 Google Cloud 舰队。

如果您在配置文件中添加 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 的服务名称)。如需查看相关说明,请参阅停用服务

stackdriver

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

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

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

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

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

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

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 和区域不相同,则集群创建会失败。

clusterBackup

如果您要启用管理员集群备份,请将 clusterBackup.datastore 设置为您要在其中保存集群备份的 vSphere 数据存储区

autoRepair

如果您要为管理员集群启用自动节点修复功能,请将 autoRepair.enabled 设置为 true

secretsEncryption

如果要启用始终开启的 Secret 加密,请填写 secretsEncryption 部分。

osImageType

决定您要用于管理员集群节点的操作系统映像类型,并相应地填写 osImageType 部分。

已填写的配置文件的示例

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

vc-01-ipblock.yaml

blocks:
  - netmask: 255.255.252.0
    gateway: 172.16.23.254
    ips:
    - ip: 172.16.20.10
      hostname: admin-host1
    - ip: 172.16.20.11
      hostname: admin-host2
    - ip: 172.16.20.12
      hostname: admin-host3
    - ip: 172.16.20.13
      hostname: admin-host4
    - ip: 172.16.20.14
      hostname: admin-host5
    - ip: 172.16.20.15
      hostname: admin-host6
    - ip: 172.16.20.16
      hostname: admin-host7
    - ip: 172.16.20.17
      hostname: admin-host8

vc-01-admin-cluster.yaml

apiVersion: v1
kind: AdminCluster
name: "gke-admin-01"
bundlePath: "/var/lib/gke/bundles/gke-onprem-vsphere-1.11.0-gke.543-full.tgz"
vCenter:
  address: "vc01.example"
  datacenter: "vc-01"
  cluster: "vc01-workloads-1"
  resourcePool: "vc-01-pool-1"
  datastore: "vc01-datastore-1"
  caCertPath: "/usr/local/google/home/me/certs/vc01-cert.pem""
  credentials:
    fileRef:
      path: "credential.yaml"
      entry: "vCenter"
  dataDisk: "vc01-admin-disk.vmdk"
network:
  hostConfig:
    dnsServers:
    - "203.0.113.1"
    - "198.51.100.1"
    ntpServers:
    - "216.239.35.4"
  ipMode:
    type: "static"
    ipBlockFilePath: "vc-01-ipblock.yaml"
  serviceCIDR: "10.96.232.0/24"
  podCIDR: "192.168.0.0/16"
  vCenter:
    networkName: "vc01-net-1"
loadBalancer:
  vips:
    controlPlaneVIP: "172.16.20.59"
    addonsVIP: "172.16.20.60"
  kind: "MetalLB"
antiAffinityGroups:
  enabled: true
componentAccessServiceAccountKeyPath: "sa-key.json"
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"
  disableVsphereResourceMetrics: false
clusterBackup:
  datastore: "vc-01-datastore-bu"
autoRepair:
  enabled: true
osImageType: "ubuntu_containerd"

验证配置文件

填写管理员集群配置文件后,请运行 gkectl check-config 以验证该文件是否有效:

gkectl check-config --config ADMIN_CLUSTER_CONFIG

ADMIN_CLUSTER_CONFIG 替换为管理员集群配置文件的路径。

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

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

3. 获取操作系统映像

运行 gkectl prepare 以初始化您的 vSphere 环境:

gkectl prepare --config ADMIN_CLUSTER_CONFIG

gkectl prepare 命令可执行以下预备任务:

  • 将操作系统映像导入 vSphere 并将其标记为虚拟机模板。

  • 如果您使用的是私有 Docker 注册表,则会将容器映像推送到您的注册表。

  • (可选)验证容器映像的构建证明,从而确保这些映像已由 Google 构建和签名,并已准备好部署。

4.(可选)创建 Seesaw 负载均衡器

回想一下,您可以为管理员集群使用多个负载均衡选项:Metal LB、Seesaw、F5 BIG-IP 或手动。

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

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

gkectl create loadbalancer --config ADMIN_CLUSTER_CONFIG

5. 创建管理员集群

创建管理员集群:

gkectl create admin --config ADMIN_CLUSTER_CONFIG

发生故障后恢复管理员集群创建

如果管理员集群创建失败或被取消,您可以再次运行 create 命令:

gkectl create admin --config ADMIN_CLUSTER_CONFIG

找到管理员集群 kubeconfig 文件的位置

gkectl create admin 命令会在当前目录中创建一个名为 kubeconfig 的 kubeconfig 文件。您稍后需要此 kubeconfig 文件才能与管理员集群进行交互。

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

kubectl config get-clusters --kubeconfig ADMIN_CLUSTER_KUBECONFIG

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

NAME
gke-admin-tqk8x

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

管理 checkpoint.yaml 文件

在您运行 gkectl create admin 命令创建管理员集群时,它在管理员集群数据磁盘所在的数据存储区文件夹中创建了一个检查点文件。默认情况下,此文件的名称为 DATA_DISK_NAME‑checkpoint.yaml。如果 DATA_DISK_NAME 的长度大于或等于 245 个字符,则由于 vSphere 对文件名长度的限制,其名称为 DATA_DISK_NAME.yaml

此文件包含管理员集群状态和凭据,用于未来的升级。除非您按照删除管理员集群的流程操作,否则请勿删除此文件。

如果您已在 vCenter Server 实例中启用了虚拟机加密,则必须拥有 Cryptographic operations.Direct Access 权限才能创建或升级管理员集群。否则,检查点不会上传。如果您无法获取此权限,则可以在运行相关命令时使用隐藏的标志 --disable-checkpoint 禁止上传检查点文件。

在您运行 gkectl upgrade admin 命令或运行影响管理员集群的 gkectl update 命令时,checkpoint.yaml 文件会自动更新。

6.验证管理员集群正在运行

验证管理员集群是否正在运行:

kubectl get nodes --kubeconfig ADMIN_CLUSTER_KUBECONFIG

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

输出会显示管理员集群节点。 例如:

gke-admin-master-hdn4z            Ready    control-plane,master ...
gke-admin-node-7f46cc8c47-g7w2c   Ready ...
gke-admin-node-7f46cc8c47-kwlrs   Ready ...

7. 备份文件

我们建议您备份管理员集群 kubeconfig 文件。也就是说,将 kubeconfig 文件从管理员工作站复制到其他位置。因此,如果您失去对管理员工作站的访问权限,或者管理员工作站上的 kubeconfig 文件被意外删除,您仍然可以访问管理员集群。

我们还建议您备份管理员集群的 SSH 私钥。然后,如果您失去对管理员集群的访问权限,您仍然可以使用 SSH 连接到管理员集群节点。这样,您就可以排查和调查与管理员集群连接的问题。

将 SSH 密钥从管理员集群提取到名为 admin-cluster-ssh-key 的文件:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secrets -n kube-system sshkeys \
    -o jsonpath='{.data.vsphere_tmp}' | base64 -d > admin-cluster-ssh-key

现在,您可以将 admin-cluster-ssh-key 备份到您选择的其他位置。、

问题排查

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

后续步骤

创建用户集群