运行预检检查

本文档介绍了在 Google Distributed Cloud for VMware(纯软件)中创建或升级集群时运行的预检。

检查防火墙规则

在 1.29 版及更高版本中,在您创建、更新和升级集群时,服务器端预检检查默认处于启用状态。服务器端预检检查需要额外的防火墙规则。在管理员集群的防火墙规则中,搜索“预检检查”,并确保已配置所有必需的防火墙规则。

运行 gkectl check-config

如果您计划使用 gkectl 创建集群,请运行 gkectl create-config 来生成配置文件。配置文件驱动您的安装:您提供有关 vSphere 环境、网络和负载均衡器的信息,以及集群的预期情况。您可以在创建管理员工作站之前或之后生成配置文件。为了使某些检查能够通过,需要从管理员工作站运行这些检查。

您修改文件以满足环境和集群的需求后,可以使用该文件在本地环境中创建集群。

在使用 gkectl 创建集群之前,请运行 gkectl check-config 以通过多次预检检查验证配置文件。如果该命令返回任何 FAILURE 消息,请修复问题并再次验证文件。如果某项功能验证返回任何警告消息,则必须先修复底层问题,然后才能使用此功能。

预检检查模式和跳过验证

gkectl check-config 具有默认模式和快速模式:

  • 在默认模式下,该命令会全面验证每个字段。此外,默认模式会创建临时的 vSphere 虚拟机作为验证的一部分,这可能需要更多时间。

  • 在快速模式下,该命令会跳过创建测试虚拟机的检查,仅运行快速检查。您可以通过传递 --fast 标志启用快速模式。

您可以通过传递其他标志(请参阅 gkectl check-config --help 中的说明)跳过特定验证。

管理员工作站与测试虚拟机之间的流量

在默认模式下,预检检查会为集群创建测试虚拟机。每个测试虚拟机都运行一个 HTTP 服务器,该服务器侦听端口 443 以及您在配置文件中指定的节点端口。

系统会向测试虚拟机分配多个 IP 地址。如果您的配置文件表明集群节点将从 DHCP 服务器获取其 IP 地址,则预检检查使用 DHCP 服务器将 IP 地址分配给测试虚拟机。如果您的配置文件表明将为集群节点分配静态 IP 地址,则预检检查会将您在 IP 块文件中指定的静态 IP 地址分配给测试虚拟机。

运行在管理员工作站上的预检检查使用分配给测试虚拟机的各 IP 地址向这些虚拟机发送 HTTP 请求。请求会发送至端口 443 以及您在配置文件中指定的节点端口。

何时应运行预检检查?

最好在尝试创建集群之前及早运行预检检查。 尽早运行预检检查有助于确认您是否已正确配置您的环境和网络。

如果您使用的是 1.2.0-gke.6 版,请运行 gkectl check-config 两次:

  1. 运行 gkectl check-config --fast

  2. 运行 gkectl prepare

  3. 不带 --fast 标志,再次运行 gkectl check-config

运行两次的原因是:gkectl prepare 将集群节点操作系统映像的虚拟机模板上传到您的 vSphere 环境。在运行完整的验证集之前,该虚拟机模板必须就位。

在 1.2.1 版及更高版本中,check-config 命令本身会上传虚拟机模板,因此您可以运行完整的验证集,然后运行 gkectl prepare

  1. 不带 --fast 标志运行 gkectl check-config

  2. 运行 gkectl prepare

预检检查会验证您为文件提供的值。您无需填充配置文件中的每个字段即可对该文件运行预检检查;相反,您可以在填充文件的字段时对其进行迭代验证。例如,如果您只想验证 vCenter 配置,则只能填写 vcenter 字段并对其进行检查。

请记住,创建集群后,您的配置便无法再改变。通过运行预检检查,您可以在创建集群之前发现和解决配置中的问题。

保留测试虚拟机以进行调试

从 1.2.1 版开始,gkectl check-config 命令带有 --cleanup 标志。

gkectl check-config 执行完整的验证集时,它会创建一个测试虚拟机和一个关联的 SSH 密钥。如果您想保留测试虚拟机和 SSH 密钥以进行调试,请将 --cleanup 设置为 false。

--cleanup 的默认值为 true。

预检检查列表

预检检查会验证配置文件中的每个字段。当前检查如下:

类别 说明
配置文件

通常验证每个字段和规范是否具有预期的格式和值。

使用 --skip-validation-config 标志可跳过。

使用 --skip-validation-proxy 标志跳过 proxy 字段验证。

互联网

验证所需网域的互联网访问权限。根据您运行 gkectl 的位置验证代理配置。

已使用 --skip-validation-internet 标志跳过。

操作系统映像

验证操作系统映像是否存在。

已使用 --skip-validation-os-images 标志跳过。

Windows 操作系统版本

验证 Windows 操作系统版本。

在使用命令行工具 gkeadm 创建管理员工作站时验证 Windows 版本是否受支持。请注意,虽然 gkeadm 工具适用于 Windows 10、Windows Server 2019 和 Linux,但没有针对 Linux 的预检。此验证从发布版本 1.4.1 开始。

集群版本

验证用于创建和升级的管理员集群版本、用户集群版本和 gkectl 版本是否匹配。

已使用 --skip-validation-cluster-version 标志跳过。

集群运行状况

在升级之前,验证管理员或用户集群日运行状况是否良好:

  • 管理员集群:检查包括 Kubernetes 服务、组件状态、DaemonSet、部署、机器和 Pod。
  • 用户集群:检查包括 Kubernetes 服务、集群 API 端点、StatefulSet、部署、机器部署、机器和 Pod。

已使用 --skip-validation-cluster-health 标志跳过。

入站流量 在升级之前检查用户集群是否具有 Istio 网关对象。
预留的 IP

验证是否有足够的 IP 地址可用于创建和升级。

已使用 --skip-validation-reserved-ips 标志跳过。

Google Cloud
项目 ID
[*].projectid
验证为配置中的各个字段提供的项目 ID。如果缺少项目 ID,则跳过验证。
注册服务账号
registerserviceaccountkeypath
验证服务账号是否拥有所需的 IAM 角色。验证所需的 API 是否已启用。
连接服务账号
agentserviceaccountkeypath
验证服务账号是否拥有所需的 IAM 角色。验证所需的 API 是否已启用。
Google Cloud Observability 服务账号
stackdriver.serviceaccountkeypath
验证服务账号是否拥有所需的 IAM 角色。验证所需的 API 是否已启用。
已使用 --skip-validation-gcp 标志跳过。
可使用 gcr.io/gke-on-prem-release 验证对 Container Registry 中托管的容器映像注册表的访问权限。

已使用 --skip-validation-docker 标志跳过。

Docker 注册表
privateregistryconfig
如果已配置,则验证对 Docker 仓库的访问权限。

已使用 --skip-validation-docker 标志跳过。

vCenter 检查所有 vcenter 字段是否存在,并检查以下内容:
凭据
vcenter.credentials.[*]
使用提供的用户凭据验证对 vCenter Server 的身份验证。
vSphere 版本 验证 vCenter 和 ESXi 版本是受支持的版本。
数据中心
vcenter.datacenter
验证 vSphere 数据中心是否存在。
Datastore
vcenter.datastore
验证 vSphere 数据存储区是否存在。
数据磁盘
vcenter.datadisk
验证 vSphere 中不存在 vSphere 虚拟机磁盘 (VMDK)。
资源池
vcenter.resourcepool
验证 vSphere 资源池是否存在。
网络
vcenter.network
验证 vSphere 网络是否存在。

已使用 --skip-validation-infra 标志跳过。

存储
vSphere CSI 驱动程序 如果存在树内或 CSI vSphere PersistentVolume,验证 vSphere CSI 驱动程序已启用。也就是说,在用户集群配置文件中,storage.vSphereCSIDisabled 未设置为 true
StorageClass 参数

验证 StorageClass 没有任何以下不受支持的参数:

  • hostfailurestotolerate
  • forceprovisioning
  • cachereservation
  • diskstripes
  • objectspacereservation
  • iopslimit
  • diskformat

如果您的集群具有包含上述任何参数的 StorageClass,这可能意味着您需要迁移卷。

如需了解详情,请参阅树内 vSphere 卷迁移的注意事项以及1.15 版中的升级的已知问题部分

静态创建的 vSphere 树内 PersistentVolume 和 PersistentVolumeClaim 中的注解

在升级之前,请检查 vSphere 树内 PersistentVolume 和 vSphere PersistentVolumeClaim 中的注解:

  • 静态创建的 vSphere 树内 PersistentVolume 具有注解 pv.kubernetes.io/provisioned-by: kubernetes.io/vsphere-volume
  • 静态创建的 vSphere PersistentVolumesClaim 具有注解 volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/vsphere-volumevolume.kubernetes.io/storage-provisioner: kubernetes.io/vsphere-volume

如果您的集群具有不含这些注解的 vSphere 树内 PersistentVolume 或 vSphere PersistentVolumeClaim,则必须在继续操作之前为 PersistentVolume 和 PersistentVolumeClaim 添加注解,请参阅树内 vSphere 卷迁移的注意事项

CSI 工作负载

验证集群可以成功运行使用通过 vSphere CSI 驱动程序创建的动态预配 PersistentVolume 的工作负载。

此检查在升级期间运行,并且仅当存在树内 vSphere 卷且没有 vSphere CSI 卷时才会运行。

此检查会:

  1. 检查之前运行的验证没有留下任何残存的资源。
  2. 查找或创建预配工具字段设置为“csi.vsphere.vmware.com”的 StorageClass。
    1. 在用户集群中,它会选择 CSI StorageClass standard-rwo
    2. 在管理员集群中,它会查找预配工具字段设置为 csi.vsphere.vmware.com 的 StorageClass。如果集群中没有这样的 StorageClass,则测试会临时创建一个新的 CSI StorageClass 并在检查中使用它。
  3. 使用上一步中找到或创建的 StorageClass 在默认命名空间中创建 PersistentVolumeClaim,并等待动态创建的 PersistentVolume 进入 Bound 阶段。
  4. 在装载上面创建的 PersistentVolume 的默认命名空间中创建 writer 作业。安排了 writer Pod,在启动时它会将字符串写入已装载文件系统中的文件。
  5. 删除 writer 作业及其关联的 Pod。
  6. 在装载上面创建的 PersistentVolume 的默认命名空间中创建 reader 作业。安排了 reader Pod,在启动时它会读取 writer Pod 写入的文件,以确保 writer Pod 写入的数据可成功读取。
  7. 删除 reader 作业及其关联的 Pod。
  8. 删除 PersistentVolumeClaim,这会导致 PersistentVolume 也被删除。
  9. 删除 StorageClass(如果在测试期间创建)。

反亲和性群组的主机

如果启用了 antiAffinityGroups,则验证物理 vCenter 主机数量至少为三个。

如需为集群停用 antiAffinityGroups,请参阅 antiAffinityGroups.enabled 和此版本说明

已使用 --skip-validation-infra 标志跳过。

负载均衡器

验证负载均衡配置:

  • 如果负载均衡模式为集成负载均衡模式 (lbmode: Integrated),则验证 adminclusterusercluster 规范中是否存在所有 bigip 字段。
  • 如果负载均衡模式为手动负载均衡模式 (lbmode: Manual),则验证 adminclusterusercluster 规范中是否存在所有 manuallbspec 字段。
集成负载均衡
bigip.credentials.[*] 验证您的 F5 BIG-IP 凭据。
bigip.partition 验证提供的分区是否存在。
F5 BIG-IP 用户角色 验证所提供的 F5 BIG-IP 用户是否具有 Administrator 或 Resource Administrator 角色。
bigip.vips.[*] 验证提供的 VIP 地址。

使用 --fast--skip-validation-load-balancer 标志可跳过。

手动负载均衡
网络配置 验证 VIP 地址、节点 IP 地址等。

使用 --fast--skip-validation-load-balancer 标志可跳过。

[*].manuallbspec.[*] 验证提供的节点端口。
已使用 --skip-validation-load-balancer 标志跳过。
网络

验证提供的 CIDR 范围、VIP 地址和静态 IP 地址(如果已配置)是否可用。检查 IP 地址是否不重叠。

已使用 --skip-validation-net-config 标志跳过。

DNS

验证提供的 DNS 服务器是否可用。

已使用 --skip-validation-dns 标志跳过。

NTP

验证提供的网络时间协议 (NTP) 服务器是否可用。

已使用 --skip-validation-tod 标志跳过。

VIP 地址

对提供的 VIP 地址执行 ping 操作。如果 ping 失败,则此检查成功,它表示 VIP 地址尚未被占用。

已使用 --skip-validation-vips 标志跳过。

节点 IP 地址

对提供的节点 IP 地址执行 ping 操作。如果 ping 失败,则此检查成功,它表示节点 IP 地址尚未被占用。

已使用 --skip-validation-node-ips 标志跳过。

预检检查结果

预检检查可返回以下结果:

SUCCESS
该字段及其值通过了检查。
FAILURE
该字段和/或其值未通过检查。如果检查返回 FAILURE 消息,请修复问题并再次验证文件。
SKIPPED

该检查已被跳过,可能是因为该检查与您的配置无关。例如,如果您使用的是 DHCP 服务器,则系统会跳过 DNS 检查和节点 IP 地址检查(仅与静态 IP 地址配置相关)。

如果您传递的标志会跳过验证,则跳过的检查不会返回 SKIPPED 结果;相反,验证不会运行,并且不会出现在命令输出中。

UNKNOWN

跳过返回非零代码。您可以将 UNKNOWN 结果视为未通过检查。UNKNOWN 通常表示检查无法运行某些系统软件包,例如无法运行 nslookup 或无法运行 gcloud。

即将推出

未来版本中将添加以下预检检查:

  • NTP 服务器

运行预检检查

您可以通过运行以下命令来运行预检检查:

gkectl check-config --config [CONFIG]

其中,[CONFIG] 是配置文件的路径

在快速模式下运行

如果您愿意,可以在“快速模式”中运行预检检查,这样可以跳过创建临时测试虚拟机的验证(例如负载均衡 VIP 地址和节点 IP 地址验证)。为此,请传入 --fast

gkectl check-config --config [CONFIG] --fast

跳过特定验证

您可以通过传入标志来明确跳过 DNS、代理和网络等特定验证。每个跳过标志都以 --skip-[VALIDATION] 为前缀。

如需了解可用的跳过标志,请运行以下命令。您可以选择参阅 gkectl check-config 参考文档

gkectl check-config --help

例如,要跳过负载均衡器验证,请运行以下命令:

gkectl check-config --config my-config.yaml --skip-validation-load-balancer 

取消预检检查

如果您已开始运行预检检查又想要取消,请按两次 Ctrl+C。如果预检检查创建了测试虚拟机,则取消操作也应自动清理虚拟机。

清理测试虚拟机

如果在预检检查完成后测试虚拟机仍然存在,您可以从 vCenter 中删除该虚拟机。测试虚拟机的名称如下所示:

check-config-[dhcp|static]-[random number]

如需删除虚拟机,请执行以下操作:

  1. 右键点击虚拟机,然后点击电源 > 关闭电源

  2. 关停虚拟机后,再次右键点击虚拟机,然后点击从磁盘删除

示例

以下是该命令的输出示例。在此示例中,要验证的配置使用集成负载均衡模式和静态 IP 地址,但没有外部 Docker 注册表:

- Validation Category: Config Check
    - [SUCCESS] Config

- Validation Category: Internet Access
    - [SUCCESS] Internet access to required domains

- Validation Category: GCP
    - [SUCCESS] GCP Service
    - [SUCCESS] GCP Service Account

- Validation Category: Docker Registry
    - [SUCCESS] gcr.io/gke-on-prem-release access

- Validation Category: vCenter
    - [SUCCESS] Credentials
    - [SUCCESS] Version
    - [SUCCESS] Datacenter
    - [SUCCESS] Datastore
    - [SUCCESS] Data Disk
    - [SUCCESS] Resource Pool
    - [SUCCESS] Network
    - [SUCCESS] VSphere CSI Driver

- Validation Category: F5 BIG-IP
    - [SUCCESS] Admin Cluster F5 (credentials, partition and user role)
    - [SUCCESS] User Cluster F5 (credentials, partition and user role)

- Validation Category: Network Configuration
    - [SUCCESS] CIDR, VIP and static IP (availability and overlapping)

- Validation Category: DNS
    - [SUCCESS] DNS (availability)

- Validation Category: VIPs
    - [SUCCESS] ping (availability)

- Validation Category: Node IPs
    - [SUCCESS] ping (availability)

Now running slow validation checks. ...

Reusing VM template "gke-on-prem-osimage-xxx" that already exists in vSphere.
Creating test VMs with admin cluster configuration...  DONE
Waiting to get IP addresses from test VMs...  DONE
Waiting for test VMs to become ready...  DONE

Reusing VM template "gke-on-prem-osimage-xxx" that already exists in vSphere.
Creating test VMs with user cluster configuration...  DONE
Waiting to get IP addresses from test VMs...  DONE
Waiting for test VMs to become ready...  DONE

- Validation Category: F5 BIG-IP
    - [SUCCESS] Admin Cluster VIP and NodeIP
    - [SUCCESS] Admin Cluster F5 Access
    - [SUCCESS] User Cluster VIP and NodeIP
    - [SUCCESS] User Cluster F5 Access

- Validation Category: Internet Access
    - [SUCCESS] Internet access to required domains

- Validation Category: vCenter on test VMs
    - [SUCCESS] Test VM: VCenter Access and Permission

- Validation Category: DNS on test VMs
    - [SUCCESS] Test VM: DNS Availability

- Validation Category: TOD on test VMs
    - [SUCCESS] Test VM: TOD Availability

- Validation Category: Docker Registry
    - [SUCCESS] gcr.io/gke-on-prem-release access

Deleting test VMs with admin cluster configuration...  DONE
Deleting test VMs with user cluster configuration...  DONE

已知问题

  • 对于 1.3.0-gke.16 版:

    如果同时满足以下两个条件,则必须对预检检查运行快速验证检查 gkectl check-config --fast

    1. 您已将 Google Distributed Cloud 配置为使用代理。

    2. 您安装了以下其中一个软件包:

      • “下载”页面中的 /var/lib/gke/bundles/gke-onprem-vsphere-1.3.0-gke.16.tgz 软件包。
      • 来自管理员工作站的 /var/lib/gke/bundles/gke-onprem-vsphere-1.3.0-gke.16.tgz 软件包。

    仅当您安装了完整的软件包时,才能运行完整的验证集。例如:/var/lib/gke/bundles/gke-onprem-vsphere-1.3.0-gke.16-full.tgz

  • 对于 1.2.0-gke.6 版:

    如果您使用的是嵌套资源池或默认资源池,则当您尝试执行完整的验证集时,gkectl check-config 会失败。不过,您可以通过传递 --fast 标志来执行较小的验证集。

    gkectl check-config --config [CONFIG] --fast

后续步骤