本页面介绍如何为 VMware 上的 Anthos 集群 (GKE On-Prem) 创建管理员集群。
此处为完整说明。如需查看创建管理员集群的简要介绍,请参阅创建管理员集群(快速入门)。
准备工作
与管理员工作站建立 SSH 连接
与管理员工作站建立 SSH 连接。
您应该还记得,gkeadm
在管理员工作站上激活了您的组件访问服务帐号。
在管理员工作站的主目录中完成本主题中的所有其余步骤。
凭据配置文件
使用 gkeadm
创建管理员工作站时,您填写了一个名为 credential.yaml
的凭据配置文件。此文件包含 vCenter 服务器的用户名和密码。
管理员集群配置文件
当 gkeadm
创建管理员工作站时,它生成了一个名为 admin-cluster.yaml
的配置文件。此配置文件用于创建管理员集群。
填写配置文件
bundlePath
系统已为您填写此字段。
vCenter
大多数字段已使用您在创建管理员工作站时输入的值进行填充。dataDisk
字段除外,您必须现在填写此字段。
network
确定您要集群节点获取其 IP 地址的方式。选项包括:
从 DHCP 服务器获取。将
network.ipMode.type
设置为"dhcp"
。从您提供的静态 IP 地址列表获取。将
network.ipMode.type
设置为"static"
,并创建一个提供静态 IP 地址的 IP 地址块文件。
为 network
部分中剩余的字段提供值。
无论您是依赖 DHCP 服务器还是指定静态 IP 地址列表,都需要足够的 IP 地址来满足以下需求:
管理员集群中的三个节点,运行管理员集群控制层面和插件。
管理员集群中的一个额外节点,供升级时临时使用。
对于要创建的每个用户集群,管理员集群中需要有一个或三个节点来运行用户集群的控制层面组件。如果您希望用户集群的控制层面具有高可用性 (HA),则需要在管理员集群中为用户集群控制层面设置三个节点。否则,管理员集群只需要为用户集群控制层面提供一个节点。
例如,假设您打算创建两个用户集群:一个具有高可用性控制层面,另一个具有非高可用性控制层面。那么您需要为管理员集群中的以下节点提供 8 个 IP 地址:
- 用于管理员集群控制层面和插件的三个节点
- 一个临时节点
- 用于高可用性用户集群控制层面的三个节点
- 用于非高可用性用户集群控制层面的一个节点
如前所述,如果要使用静态 IP 地址,则需要提供 IP 地址块文件。下面是一个包含 8 个主机的 IP 地址块文件的示例:
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
loadBalancer
为管理员集群的 Kubernetes API 服务器预留一个 VIP 地址。为插件服务器预留另一个 VIP 地址。提供您的 VIP 地址作为 loadBalancer.vips.controlPlaneVIP
和 loadBalancer.vips.addonsVIP
的值。
确定要使用的负载平衡类型。选项包括:
Seesaw 捆绑式负载平衡。将
loadBalancer.kind
设置为"Seesaw"
,然后填写loadBalancer.seesaw
部分。使用 F5 BIG-IP 的集成式负载平衡。将
loadBalancer.kind
设置为"F5BigIP"
,然后填写f5BigIP
部分。手动负载平衡。将
loadBalancer.kind
设置为"ManualLB"
,然后填写manualLB
部分。
antiAffinityGroups
根据您的偏好将 antiAffinityGroups.enabled
设置为 true
或 false
。
proxy
如果将拥有管理员集群节点的网络位于代理服务器后面,请填写 proxy
部分。
privateRegistry
确定 Anthos Clusters on VMware 组件的容器映像的存储位置。选项包括:
gcr.io。请勿填写
privateRegistry
部分。您自己的私有 Docker 注册表。请填写
privateRegistry
部分。
gcrKeyPath
将 gcrKeyPath
设置为组件访问服务帐号的 JSON 密钥文件的路径。
stackdriver
请填写 stackdriver
部分。
cloudAuditLogging
如果您要将 Kubernetes 审核日志与 Cloud Audit Logs 集成,请填写 cloudAuditLogging
部分。
autoRepair
如果您要启用节点自动修复,请将 autoRepair.enabled
设置为 true
。否则,请将其设置为 false
。
adminMaster
如果要手动为管理员控制层面节点配置 CPU 和内存,请填写 adminMaster
部分。
验证配置文件
填写管理员集群配置文件后,请运行 gkectl check-config
以验证该文件是否有效:
gkectl check-config --config [CONFIG_PATH]
其中 [CONFIG_PATH] 是管理员集群配置文件的路径。
如果该命令返回任何失败消息,请修复问题并再次验证文件。
如果您想跳过更耗时的验证,请传递 --fast
标志。如需跳过各项验证,请使用 --skip-validation-xxx
标志。如需详细了解 check-config
命令,请参阅运行预检检查。
运行 gkectl prepare
运行 gkectl prepare
以初始化您的 vSphere 环境:
gkectl prepare --config [CONFIG_PATH]
gkectl prepare
命令可执行以下预备任务:
将操作系统映像导入 vSphere 并将其标记为虚拟机模板。
如果您使用的是私有 Docker 注册表,此命令会将 Docker 容器映像推送到您的注册表。
(可选)此命令会验证容器映像的版本证明,从而验证映像是由 Google 构建和签名的,并已准备好部署。
为管理员集群创建 Seesaw 负载均衡器
如果您已选择使用捆绑式 Seesaw 负载均衡器,请执行本部分中的步骤。否则,您可以跳过此部分。
为 Seesaw 负载均衡器创建并配置虚拟机:
gkectl create loadbalancer --config [CONFIG_PATH]
创建管理员集群
创建管理员集群:
gkectl create admin --config [CONFIG_PATH]
其中 [CONFIG_PATH] 是管理员集群配置文件的路径。
gkectl create admin
命令会在当前目录中创建一个名为 kubeconfig
的 kubeconfig 文件。您稍后需要此 kubeconfig 文件才能与管理员集群进行交互。
验证管理员集群是否正在运行
验证管理员集群是否正在运行:
kubectl get nodes --kubeconfig [ADMIN_CLUSTER_KUBECONFIG]
其中 [ADMIN_CLUSTER_KUBECONFIG] 是 kubeconfig 文件的路径。
输出会显示管理员集群节点。
问题排查
使用 gkectl
诊断集群问题
使用 gkectl diagnose
命令识别集群问题并与 Google 共享集群信息。请参阅诊断集群问题。
默认日志记录行为
对于 gkectl
和 gkeadm
,使用默认日志记录设置便已足够:
-
默认情况下,日志条目的保存方式如下:
- 对于
gkectl
,默认日志文件为/home/ubuntu/.config/gke-on-prem/logs/gkectl-$(date).log
,该文件与运行gkectl
的本地目录中的logs/gkectl-$(date).log
文件进行符号链接。 - 对于
gkeadm
,默认日志文件是运行gkeadm
的本地目录中的logs/gkeadm-$(date).log
。
- 对于
- 所有日志条目都会保存在日志文件中,即使它们不输出到终端(当
--alsologtostderr
为false
时)也是如此。 -v5
详细程度(默认)涵盖支持团队所需的所有日志条目。- 日志文件还包含已执行的命令和失败消息。
我们建议您在需要帮助时将日志文件发送给支持团队。
为日志文件指定非默认位置
要为 gkectl
日志文件指定非默认位置,请使用 --log_file
标志。您指定的日志文件不会与本地目录进行符号链接。
要为 gkeadm
日志文件指定非默认位置,请使用 --log_file
标志。
在管理员集群中查找 Cluster API 日志
如果虚拟机在管理员控制层面启动后无法启动,您可以通过在管理员集群中检查 Cluster API 控制器的日志来尝试进行调试:
在
kube-system
命名空间中找到 Cluster API 控制器 pod 的名称,其中 [ADMIN_CLUSTER_KUBECONFIG] 是管理员集群的 kubeconfig 文件的路径:kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] -n kube-system get pods | grep clusterapi-controllers
打开 pod 的日志,其中 [POD_NAME] 是 pod 的名称。您可以选择使用
grep
或类似工具来搜索错误:kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] -n kube-system logs [POD_NAME] vsphere-controller-manager
使用管理员集群控制层面节点的 kubeconfig 调试 F5 BIG-IP 问题
安装完成后,Anthos clusters on VMware 会在管理员工作站的主目录中生成一个名为 internal-cluster-kubeconfig-debug
的 kubeconfig 文件。此 kubeconfig 文件与管理员集群的 kubeconfig 完全相同,只是它直接指向管理员集群的控制层面节点(该节点上运行着管理员控制层面)。您可以使用 internal-cluster-kubeconfig-debug
文件调试 F5 BIG-IP 问题。
gkectl check-config
验证失败:找不到 F5 BIG-IP 分区
- 表现
验证失败,因为找不到 F5 BIG-IP 分区(即使分区存在)。
- 潜在原因
F5 BIG-IP API 的问题可能会导致验证失败。
- 解决方法
尝试再次运行
gkectl check-config
。
gkectl prepare --validate-attestations
失败:无法验证版本证明
- 表现
如果使用可选的
--validate-attestations
标志运行gkectl prepare
,则系统会返回以下错误:could not validate build attestation for gcr.io/gke-on-prem-release/.../...: VIOLATES_POLICY
- 潜在原因
受影响的映像可能没有证明。
- 解决方法
请按照创建管理员工作站中的说明,尝试重新下载并部署管理员工作站 OVA。如果问题仍然存在,请与 Google 联系以获取帮助。
使用引导集群的日志进行调试
在安装期间,Anthos clusters on VMware 会创建临时引导集群。成功安装后,Anthos clusters on VMware 会删除引导集群,留下您的管理员集群和用户集群。通常情况下,您无需与此集群进行交互。
如果在安装过程中出现问题,并且您确实向 gkectl create cluster
传递了 --cleanup-external-cluster=false
,则使用引导集群的日志进行调试可能会有用。您可以找到 pod,然后获取其日志:
kubectl --kubeconfig /home/ubuntu/.kube/kind-config-gkectl get pods -n kube-system
kubectl --kubeconfig /home/ubuntu/.kube/kind-config-gkectl -n kube-system get logs [POD_NAME]
如需了解详情,请参阅问题排查。