排查代管式实例组问题


有多种问题会使得代管式实例组 (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 无法创建或重新创建实例

该问题可能与以下情况有关。

启动磁盘已存在

默认情况下,在您创建实例时,系统会创建新的启动永久性磁盘。启动磁盘的名称与虚拟机的名称一致。如果您将虚拟机命名为 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 并指定 --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
    

解决方法

要解决此问题,请尝试以下方法之一:

资源被后端服务使用

如果负载均衡器的后端服务正在使用实例组,则您无法移除该实例组。您必须先从后端服务中移除实例,然后才能删除实例组。

错误消息

  • 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

解决方法

  1. 可选:排空后端实例组。

  2. 从区域或全球后端服务中移除 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]
      
  3. 删除 MIG:

    gcloud compute instance-groups managed delete INSTANCE_GROUP_NAME
    

如果您的 MIG 持续尝试重新创建实例

该问题可能与以下情况有关。

健康检查探测无法访问实例

如果您已配置自动修复政策,但未配置(或未正确配置)防火墙规则以允许健康检查探测访问您的应用,则您的虚拟机会显示健康状况不佳,而 MIG 会持续尝试重新创建这些虚拟机。如需了解如何配置健康检查防火墙规则,请参阅健康检查设置示例