本页面介绍如何调整 GKE On-Prem 用户集群的大小。调整用户集群的大小意味着在该集群中添加节点或者从中移除节点。从集群中移除节点会释放该集群的 IP 地址,以供其他节点使用。如果添加节点,则需要有可用于这些节点的 IP 地址。
您可以通过以下方式调整用户集群的大小:更改配置文件的 nodePools 部分中的 replicas
字段,然后使用 gkectl update cluster
命令将这些更改部署到现有集群。
如需了解用户集群数量的上限和下限,请参阅配额和限制。
如需了解如何使用 gkectl update cluster
管理节点池,请参阅创建和管理节点池。
验证是否有足够的可用 IP 地址
若要向集群添加其他节点,请确保集群具有足够的 IP 地址。是否确认有足够的 IP 地址取决于集群使用的是 DHCP 服务器还是静态 IP。
DHCP
如果集群使用 DHCP,请检查创建节点所在网络中的 DHCP 服务器是否具有足够的 IP 地址。IP 地址应该多于用户集群中运行的节点。
静态 IP 地址
如果集群使用静态 IP 地址,则运行 gkectl update cluster
时,系统会首先验证您是否在该集群中分配了足够的 IP 地址。如果没有分配足够的 IP 地址,您可以在错误消息中找到更新操作所需的额外 IP 地址数量。
如果您需要向用户集群添加更多 IP 地址,请执行以下步骤:
打开用户集群的 hostconfig 文件以进行修改。
要查看为用户集群预留的地址,请运行以下命令:
kubectl get cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG]
-n [USER_CLUSTER_NAME] [USER_CLUSTER_NAME] -o yaml
其中:
- [ADMIN_CLUSTER_KUBECONFIG] 告知 kubectl 使用管理员集群的 kubeconfig,后者用于查看和/或更改用户集群配置。
-n [USER_CLUSTER_NAME]
告知 kubectl 查找以用户集群命名的命名空间。[USER_CLUSTER_NAME] -o yaml
告知 kubectl 您要对哪个用户集群运行命令。-o yaml
显示用户集群的配置。
如果为用户集群预留的任何地址包含在 hostconfig 文件中,请基于
netmask
和gateway
将地址添加到相应的块中。将所需数量的额外静态 IP 地址添加到相应的块中,然后运行 gkectl update cluster。
下面是一个示例 hostconfig 文件,其中突出显示了 4 个静态 IP 地址块:
hostconfig: dns: 172.16.255.1 tod: 216.239.35.0 blocks: - netmask: 255.255.248.0 gateway: 21.0.135.254 ips: - ip: 21.0.133.41 hostname: user-node-1 - ip: 21.0.133.50 hostname: user-node-2 - ip: 21.0.133.56 hostname: user-node-3 - ip: 21.0.133.47 hostname: user-node-4
调整用户集群的大小
从 1.5.0 开始,您可以通过以下方式调整集群的大小:更改配置文件的 nodePools 部分中的 replicas
字段,然后使用 gkectl update cluster 命令将这些更改部署到现有集群。
验证调整大小
如需验证调整大小是否成功,请运行:
kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] get nodes kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] describe machinedeployments [NODE_POOL_NAME] | grep Replicas
其中,[USER_CLUSTER_KUBECONFIG] 是您的用户集群的 kubeconfig
文件。您选择的节点数应反映在这些命令的输出中。
问题排查
如需了解详情,请参阅问题排查。
无法调整用户集群的大小
- 表现
对用户集群执行的调整大小操作失败。
- 潜在原因
有几个因素可能会导致调整大小操作失败。
- 解决方法
如果调整大小失败,请按以下步骤操作:
检查集群的 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 地址未被占用。如果存在冲突,则需要解决您的环境中的冲突。
使用 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
更新命令失败
运行gkectl update
以更新集群时,您可能会看到以下错误消息:
Failed to update the cluster: failed to begin updating user cluster "CLUSTER_NAME": timed out waiting for the condition
kubectl get --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] onpremusercluster
cluster [CLUSTER_NAME] is READY=true