有多种问题会使得代管式实例组 (MIG) 无法成功创建或重新创建虚拟机实例。
是否会为已删除的 MIG 生成日志
该问题可能与以下情况有关。
挂接的自动扩缩器仍然存在
如果您已使用 Compute Engine API 删除 MIG,且未发出单独请求来删除挂接的自动扩缩器,则 Logs Explorer 可能会显示包含以下消息的日志。
The resource 'projects/PROJECT/zones/ZONE/instanceGroupManagers/DELETED_INSTANCE_GROUP_NAME' was not found.
解决方法:
要解决此问题,请使用 Compute Engine API 方法删除挂接的自动扩缩器:
- 对于可用区级 MIG 的自动扩缩器,请使用
autoscalers.delete
方法。 - 对于区域级 MIG 的自动扩缩器,请使用
regionAutoscalers.delete
方法。
如果您的 MIG 无法创建或重新创建实例
该问题可能与以下情况有关。
启动磁盘已存在
默认情况下,在您创建实例时,系统会创建新的启动永久性磁盘。启动磁盘的名称与虚拟机的名称一致。如果您将虚拟机命名为 my-instance
,则该磁盘也会命名为 my-instance
。如果已存在同名的永久性磁盘,则请求将失败。如需解决此问题,您可以选择性地截取快照,然后删除现有的永久性磁盘。
实例模板无效
如果您最近更新了实例模板,则可能存在无效属性,从而导致 MIG 无法创建虚拟机。请针对以下常见错误检查属性:
- 您指定了不存在的资源,例如来源映像。
- 您拼错了资源名称。
- 您尝试以读写模式挂接现有的永久性非启动磁盘,但您的实例组包含多个虚拟机。对于包含多个虚拟机的实例组,您要在实例组中的所有虚拟机之间共享的任何其他磁盘只能以只读模式挂接。
已超出资源类型的限制
如果您尝试在区域级 MIG 中创建 2,000 个以上的虚拟机或在可用区级 MIG 中创建 1,000 个以上的虚拟机,则会发生以下错误。已达到实例组的大小上限。
错误消息:
ERROR: (gcloud.compute.<INSTANCE_GROUP_TYPE>.<METHOD>) Could not fetch resource: - Exceeded limit 'MAX_INSTANCES_IN_INSTANCE_GROUP' on resource 'PROJECT_ID'. Limit: NUMBER
解决方法:
要解决此问题,请尝试以下方法之一:
- 如果您使用的是可用区级 MIG,请改用区域级 MIG。
- 创建多个 MIG 并在它们之间拆分工作负载(例如通过调整负载均衡配置)。
- 如果您还需要更大的实例组,可以提高 MIG 的大小限制,也可以与支持团队联系以提交申请。
如果无法删除 MIG 或其实例
该问题可能与以下情况有关。
在可用区或区域中找不到资源
当您尝试删除区域级 MIG 并指定 --zone
标志、未指定区域或指定错误地区时,会发生以下错误。如果您尝试删除可用区级 MIG 并指定 --region
标志,则可能会发生类似的错误。
错误消息:
ERROR: (gcloud.compute.instance-groups.managed.delete) Some requests did not succeed: ‐ The resource 'projects/PROJECT/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME' was not found
ERROR: (gcloud.compute.instance-groups.managed.delete) Some requests did not succeed: ‐ The resource 'projects/PROJECT/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME' was not found
解决方法:
要解决此问题,请尝试以下方法之一:
- 在命令中附加相应的
--region
或--zone
标志 - 设置默认区域和可用区
资源被后端服务使用
如果负载均衡器的后端服务正在使用实例组,则您无法移除该实例组。您必须先从后端服务中移除实例,然后才能删除实例组。
错误消息:
ERROR: (gcloud.compute.instance-groups.managed.delete) Some requests did not succeed: ‐ The instance_group_manager resource 'projects/PROJECT/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME is already being used by 'projects/PROJECT/global/backendServices/BACKEND_SERVICE
ERROR: (gcloud.compute.instance-groups.managed.delete) Some requests did not succeed: ‐ The instance_group_manager resource 'projects/PROJECT/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME is already being used by 'projects/PROJECT/global/backendServices/BACKEND_SERVICE
解决方法:
可选:排空后端实例组。
对于仅代理负载均衡器,您可以将容量扩缩器设置为
0.0
,然后再从后端服务中移除实例组。您可以使用gcloud compute backend-services edit
命令将容量扩缩器设置为零。对于代理和直通式负载均衡器,如果您在后端服务上启用连接排空,每当从后端服务中移除实例组时,Google Cloud 都会尝试允许现有连接保留、完成和排空。
从区域或全球后端服务中移除 MIG。
对于可用区级 MIG,请运行以下命令:
gcloud compute backend-services remove-backend BACKEND_SERVICE \ --instance-group=INSTANCE_GROUP_NAME \ --instance-group-zone=ZONE \ [--region=REGION | --global]
对于区域级 MIG,请运行以下命令:
gcloud compute backend-services remove-backend BACKEND_SERVICE \ --instance-group=INSTANCE_GROUP_NAME \ --instance-group-region=REGION \ [--region=REGION | --global]
删除 MIG:
gcloud compute instance-groups managed delete INSTANCE_GROUP_NAME
如果您的 MIG 持续尝试重新创建实例
该问题可能与以下情况有关。
健康检查探测无法访问实例
如果您已配置自动修复政策,但未配置(或未正确配置)防火墙规则以允许健康检查探测访问您的应用,则您的虚拟机会显示健康状况不佳,而 MIG 会持续尝试重新创建这些虚拟机。如需了解如何配置健康检查防火墙规则,请参阅健康检查设置示例。