下面几个部分介绍使用 GKE On-Prem 时可能遇到的问题及其解决方法。
准备工作
在开始排查问题之前,请先查看以下部分。
使用 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 问题
安装完成后,GKE On-Prem 会在管理员工作站的主目录中生成一个名为 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 联系以获取帮助。
使用引导集群的日志进行调试
在安装期间,GKE On-Prem 会创建临时引导集群。成功安装后,GKE On-Prem 会删除引导集群,留下您的管理员集群和用户集群。通常情况下,您无需与此集群进行交互。
如果在安装过程中出现问题,并且您确实向 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]
管理员工作站
openssl
无法验证管理员工作站 OVA
- 表现
对管理员工作站 OVA 文件运行
openssl dgst
不会返回Verified OK
- 潜在原因
OVA 文件存在问题,导致无法成功验证。
- 解决方法
按照下载管理员工作站 OVA 中的说明,尝试重新下载并部署管理员工作站 OVA。如果问题仍然存在,请与 Google 联系以获取帮助。
Connect
无法注册用户集群
如果您在注册用户集群时遇到问题,请与 Google 联系以获取帮助。
在 Alpha 版中创建的集群已取消注册
请参阅 Connect 文档中的注册用户集群。
升级
关于升级过程中的停机时间
资源 | 说明 |
---|---|
管理员集群 | 当管理员集群关闭时,用户集群上的用户集群控制层面和工作负载会继续运行,除非它们受到导致停机的故障的影响 |
用户集群控制层面 | 通常情况下,用户集群控制层面应该不会出现较长的停机时间。但是,与 Kubernetes API 服务器的长时间运行的连接可能会中断,需要重新建立连接。在这些情况下,API 调用方应该重试,直到建立连接。在最糟糕的情况下,升级期间的停机时间可能长达一分钟。 |
用户集群节点 | 如果升级需要更改用户集群节点,GKE On-Prem 会以滚动方式重新创建节点,并重新安排在这些节点上运行的 pod。您可以通过配置适当的 PodDisruptionBudget 和反亲和性规则来防止对工作负载产生影响。 |
调整用户集群的大小
无法调整用户集群的大小
- 表现
对用户集群执行的调整大小操作失败。
- 潜在原因
有几个因素可能会导致调整大小操作失败。
- 解决方法
如果调整大小失败,请按以下步骤操作:
检查集群的 MachineDeployment 状态,看看是否有任何事件或错误消息:
kubectl describe machinedeployments [MACHINE_DEPLOYMENT_NAME]
检查新创建的 Machine 上是否存在错误:
kubectl describe machine [MACHINE_NAME]
错误:“无法分配任何地址”
- 表现
调整用户集群的大小后,
kubectl describe machine [MACHINE_NAME]
会显示以下错误:Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning Failed 9s (x13 over 56s) machineipam-controller ipam: no addresses can be allocated
- 潜在原因
可用于用户集群的 IP 地址不足。
- 解决方法
为集群分配更多 IP 地址。然后,删除受影响的 Machine:
kubectl delete machine [MACHINE_NAME]
如果集群已正确配置,则会使用 IP 地址创建替换 Machine。
已分配足够数量的 IP 地址,但 Machine 无法向集群注册
- 表现
网络分配了足够的地址,但 Machine 仍然无法向用户集群注册。
- 可能的原因
可能存在 IP 冲突。该 IP 可能被其他 Machine 或您的负载平衡器占用。
- 解决方法
确认受影响的 Machine 的 IP 地址未被占用。如果存在冲突,您需要解决您所处环境中的冲突。
其他
Terraform vSphere 提供商会话数限制
GKE On-Prem 使用 Terraform 的 vSphere 提供商在您的 vSphere 环境中启动虚拟机。提供商的会话数上限为 1000。当前实现不会在使用后关闭活动会话。如果您运行的会话过多,则可能会遇到 503 错误。
会话会在 300 秒后自动关闭。
- 表现
如果您运行的会话过多,则可能会遇到以下错误:
Error connecting to CIS REST endpoint: Login failed: body: {"type":"com.vmware.vapi.std.errors.service_unavailable","value": {"messages":[{"args":["1000","1000"],"default_message":"Sessions count is limited to 1000. Existing sessions are 1000.", "id":"com.vmware.vapi.endpoint.failedToLoginMaxSessionCountReached"}]}}, status: 503 Service Unavailable
- 潜在原因
您的环境中运行的 Terraform 提供商会话过多。
- 解决方法
目前,此功能按预期运行。会话会在 300 秒后自动关闭。如需了解详情,请参阅 GitHub 问题 #618。
为 Docker 使用代理:oauth2: cannot fetch token
- 表现
使用代理时,您遇到以下错误:
oauth2: cannot fetch token: Post https://oauth2.googleapis.com/token: proxyconnect tcp: tls: oversized record received with length 20527
- 潜在原因
您提供的可能是 HTTPS 代理,而不是 HTTP。
- 解决方法
在 Docker 配置中,将代理地址更改为
http://
而不是https://
。
验证许可是否有效
请务必验证您的许可是否有效,特别是在使用试用许可的情况下。如果您的 F5、ESXi 主机或 vCenter 许可已过期,您可能会遇到意外故障。