查看有关 MIG 和代管式实例的信息


使用此页面上的方法可以查看有关托管式实例组 (MIG) 的信息以及有关每个 MIG 中的虚拟机 (VM) 实例的信息。

准备工作

  • 查看限制,然后create实例组。
  • 设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

查看有关 MIG 的信息

您可以检索有关实例组本身的信息,例如检查实例组附加的政策,以及实例组处于稳定状态还是正在进行更改。如需获取有关 MIG 中虚拟机实例的信息,请参阅查看有关代管式实例的信息

列出 MIG

如需获取代管式实例组的列表,请使用控制台gcloud CLIREST

控制台

  1. 在 Google Cloud 控制台中,转到实例组页面。

    转到“实例组”

    如果您已有实例组,该页面会列出这些组,包括代管式实例组和非代管式实例组

    组类型列指定组是托管式、有状态还是非托管式。有状态组类型也是托管式实例组。

gcloud

如需列出项目中的所有代管式实例组,请使用以下命令:

gcloud compute instance-groups managed list

REST

对于可用区级 MIG,请调用 instanceGroupManagers.list 方法

GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers

对于区域级 MIG,请调用 regionInstanceGroupManagers.list 方法

GET https://compute.googleapis.com/compute/v1/projects/project-id/regions/region/instanceGroupManagers

查看 MIG 的属性

如需查看特定 MIG(包括其政策,例如组的自动修复和更新政策)的相关信息,请使用控制台gcloud CLIREST

如需查看该组的 id 值,必须使用 gcloud CLI 或 Compute Engine API。

控制台

  1. 在 Google Cloud 控制台中,转到实例组页面。

    转到“实例组”

    如果您已有实例组,页面会列出这些组。该页面还会列出非代管式实例组

  2. 在列表的名称列下方,点击要检查的实例组的名称。此时将打开一个页面,其中会显示实例组属性和组内包含的实例的列表。

  3. 点击详细信息以查看实例组的配置。

gcloud

如需获取有关特定组的信息,请使用以下命令:

gcloud compute instance-groups managed describe instance-group \
    [--zone zone | --region region]

该命令会返回相应组的详细信息,包括附加的政策。

使用 --format 标志限制输出。例如,以下命令只返回实例组的自动扩缩器配置(如果存在)。

gcloud compute instance-groups managed describe instance-group --format="(autoscaler)"

REST

对于可用区级 MIG,调用 instanceGroupManagers.get 方法。对于区域级 MIG,调用 regionInstanceGroupManagers.get 方法

GET https://compute.googleapis.com/compute/v1/projects/project-id/regions/region/instanceGroupManagers/instance-group

响应包含有关实例组的详细信息,包括除实例组自动扩缩政策之外的其他附加政策。虽然自动扩缩是 MIG 的功能,但它是单独的 REST 资源。

自动扩缩政策

如果实例组附加了自动扩缩器,则自动扩缩器资源列在实例组的 status.autoscaler 字段中。

如需获取有关自动扩缩器的信息,请调用 autoscalers.get 方法(对于可用区级 MIG)或 regionAutoscalers.get 方法(对于区域级 MIG)。自动扩缩器资源的网址包含其名称,默认情况下该名称是自动扩缩器附加到的实例组的名称。例如,您可以对区域级 MIG 的自动扩缩器发出以下请求:

GET https://compute.googleapis.com/compute/v1/projects/project-id/regions/region/regionAutoscalers/mig_name

检查 MIG 是否处于稳定状态

有多种命令和请求可用来创建、删除和修改代管式实例组中的实例。一旦实例组预定将执行创建、删除或更新这些实例的操作,这些操作将返回 DONE 状态。但这并不表示组中的实例已经完成了创建、删除或更新,而是要等到相应的底层操作完成。您必须验证实例组的状态,或验证这些实例的状态

托管式实例组在满足如下所有条件时即处于稳定状态:托管式实例组中的所有实例均未进行任何更改、未安排在将来对实例进行更改,并且组本身也未进行修改。

如果您的依赖项需要组中的所有实例运行状况良好并能处理流量才能正常工作,您可能有必要知道该组是否处于稳定状态。例如,您可能需要首先确认所有虚拟机正在运行且运行状况良好,然后才能开始调度作业、发送流量或分配键范围。

通过检查实例组的 status.isStable 字段的值来验证托管式实例组中的所有实例是否正在运行且健康状况良好。

gcloud

使用 describe 命令

gcloud compute instance-groups managed describe instance-group-name \
    [--zone zone | --region region]

gcloud CLI 会返回有关 MIG(包括其 status.isStable 字段)的详细信息。

如需暂停脚本直至 MIG 稳定,请将 wait-until 命令与 --stable 标志结合使用。例如:

gcloud compute instance-groups managed wait-until instance-group-name \
    --stable \
    [--zone zone | --region region]
Waiting for group to become stable, current operations: deleting: 4
Waiting for group to become stable, current operations: deleting: 4
...
Group is stable

该命令会在 MIG 的 status.isStable 设置为 true 后返回。

REST

对于可用区级 MIG,请向 instanceGroupManagers.get 方法发出 GET 请求:

GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group-name/get

对于区域级托管式实例组,请将 zones/zone 替换为 regions/region

GET https://compute.googleapis.com/compute/v1/projects/project-id/regions/region/instanceGroupManagers/instance-group-name/get

这些请求会返回有关 MIG 的详细信息,包括其 status.isStable 字段。

status.isStable 设置为 false 表示更改已生效、待处理或者 MIG 本身正被修改。

status.isStable 设置为 true 时,则表示以下含义:

  • MIG 中的任何实例都未在进行任何类型的更改,并且所有实例的 currentAction 均为 NONE
  • MIG 中的实例没有任何待处理的更改。
  • MIG 本身未在修改。

请注意,MIG 的稳定性取决于许多因素,因为 MIG 能够以多种方式修改。例如:

  • 发出发布新实例模板的请求。
  • 发出创建、删除、调整或更新 MIG 中实例的请求。
  • 通过自动扩缩器请求调整 MIG 的大小。
  • 通过自动修复程序资源替换 MIG 中一个或多个运行状况不佳的实例。
  • 重新分配区域 MIG 中的部分实例。

完成所有操作后,该 MIG 的 status.isStable 会立即重新设置为 true

对于各个虚拟机实例,请参阅检查托管实例的状态

检查 MIG 中是否停用了虚拟机修复功能

如需检查 MIG 中的虚拟机修复功能是否已停用,请使用控制台gcloud CLIAPI

控制台

  1. 在 Google Cloud 控制台中,转到实例组页面。

    转到“实例组”

  2. 点击要查看的实例组的名称。此时将打开一个页面,其中会显示实例组属性和组中包含的实例的列表。
  3. 点击详情标签页。
  4. 虚拟机实例生命周期部分中,检查失败时的默认操作字段。如果值为 No action,则表示 MIG 中的修复功能已停用。

gcloud

使用 describe 方法,如下所示:

gcloud compute instance-groups managed describe instance-group \
    --format="(instanceLifecyclePolicy)"

在响应正文中,检查 defaultActionOnFailure 字段。可能的值如下:

  • REPAIR:MIG 会在同一可用区中重新创建失败或运行不正常的虚拟机。
  • DO_NOTHING:MIG 中停用了修复功能。MIG 不会对组中失败或运行不正常的虚拟机执行任何操作。

以下示例输出表明 MIG 通过重新创建虚拟机来将其修复。

instanceLifecyclePolicy:
  defaultActionOnFailure: REPAIR
  forceUpdateOnRepair: NO

API

对于可用区级 MIG,请使用 instanceGroupManagers.get 方法;对于区域级 MIG,请使用 regionInstanceGroupManagers.get 方法

如需查看可用区级 MIG 中虚拟机出现故障时的 MIG 操作,请进行以下调用:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP

在响应正文中,检查 instanceLifecyclePolicy.defaultActionOnFailure 字段。可能的值如下:

  • REPAIR:MIG 会在同一可用区中重新创建失败或运行不正常的虚拟机。
  • DO_NOTHING:MIG 中停用了修复功能。MIG 不会对组中失败或运行不正常的虚拟机执行任何操作。

下面的示例响应表明 MIG 通过重新创建虚拟机来将其修复。

"instanceLifecyclePolicy": {
  "forceUpdateOnRepair": "NO",
  "defaultActionOnFailure": "REPAIR"
}

如果您不希望 MIG 修复实例组中失败或运行不正常的虚拟机,则可以停用 MIG 中的修复功能

查看历史自动修复操作

如果您已配置自动修复,则可以查看过去的自动修复事件

监控滚动更新

如果您启动了滚动更新,并想知道更新何时完成,请参阅监控更新

查看有状态配置

如果您配置了有状态 MIG 并且想查看您的配置,请参阅查看有状态配置

查看有关 MIG 中代管虚拟机实例的信息

列出 MIG 的托管实例

如需获取实例组中代管式实例的列表,包括其状态和模板,请使用控制台gcloud CLIREST

控制台

  1. 在 Google Cloud 控制台中,转到实例组页面。

    转到“实例组”

    如果您已有实例组,页面会列出这些组。该页面还会列出非代管式实例组

  2. 在列表的名称列下方,点击要检查的实例组的名称。此时将打开一个页面,其中会显示实例组属性和组内包含的实例的列表。

gcloud

使用 gcloud CLI list-instances 子命令。

gcloud compute instance-groups managed list-instances instance-group \
    [--zone zone | --region region]

该命令会返回实例列表及实例详细信息,包括其当前状态、实例模板和最近的错误。

REST

对于可用区级 MIG,请构建对 instanceGroupManagers.listManagedInstances 方法的 GET 请求,并添加特定托管式实例组的名称:

GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group

对于区域级(多可用区)代管式实例组,请改为使用 regionInstanceGroupManagers 资源:regionInstanceGroupManagers.list

GET https://compute.googleapis.com/compute/v1/projects/project-id/regions/region/instanceGroupManagers/instance-group

响应包含实例列表及实例详细信息,包括其当前状态和实例模板。

检查代管式实例的状态

有多种命令和请求可用来创建、删除和修改代管式实例组中的实例。一旦实例组预定将执行创建、删除或更新这些实例的操作,这些操作将返回 DONE 状态。但这并不表示组中的实例已经完成了创建、删除或更新,而是要等到相应的底层操作完成。您必须验证这些实例的状态,或者验证组本身的状态

使用 Google Cloud CLI 或 REST 查看有关托管式实例组中的实例的详细信息。详细信息包括实例状态和实例组对其实例执行的当前操作。

gcloud

所有代管式实例

如需查看实例组中所有实例的状态和当前操作,请使用 list-instances 命令

gcloud compute instance-groups managed list-instances INSTANCE_GROUP_NAME \
    [--zone=ZONE | --region=REGION]

该命令会返回组中的实例列表,包括实例状态、当前操作和其他详细信息:

NAME               ZONE           STATUS   HEALTH_STATE  ACTION  INSTANCE_TEMPLATE  VERSION_NAME  LAST_ERROR
vm-instances-9pk4  us-central1-f                          CREATING  my-new-template
vm-instances-h2r1  us-central1-f  STOPPING                DELETING  my-old-template
vm-instances-j1h8  us-central1-f  RUNNING                 NONE      my-old-template
vm-instances-ngod  us-central1-f  RUNNING                 NONE      my-old-template

HEALTH_STATE 列显示为空,除非您已设置健康检查

某个特定的代管式实例

如需查看实例组中某个特定实例的状态和当前操作,请使用 describe-instance 命令

gcloud compute instance-groups managed describe-instance INSTANCE_GROUP_NAME \
    --instance INSTANCE_NAME \
    [--zone=ZONE | --region=REGION]

该命令会返回该实例的详细信息,包括实例状态、当前操作,以及保留状态(对于有状态 MIG):

currentAction: NONE
id: '6789072894767812345'
instance: https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances/example-mig-hz41
instanceStatus: RUNNING
name: example-mig-hz41
preservedStateFromConfig:
  metadata:
    example-key: example-value
preservedStateFromPolicy:
  disks:
    persistent-disk-0:
      autoDelete: NEVER
      mode: READ_WRITE
      source: https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/disks/example-mig-hz41
version:
  instanceTemplate: https://www.googleapis.com/compute/v1/projects/example-project/global/instanceTemplates/example-template

REST

区域可用区 MIG 资源调用 listManagedInstances 方法。例如,如需查看可用区 MIG 资源中的实例的详细信息,可以发出以下请求:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME/listManagedInstances

调用会返回 MIG 的实例列表,其中包含每个实例的 instanceStatuscurrentAction

{
 "managedInstances": [
  {
   "instance": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-f/instances/vm-instances-prvp",
   "id": "5317605642920955957",
   "instanceStatus": "RUNNING",
   "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/example-project/global/instanceTemplates/example-template",
   "currentAction": "REFRESHING"
  },
  {
   "instance": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-f/instances/vm-instances-pz5j",
   "currentAction": "DELETING"
  },
  {
   "instance": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-f/instances/vm-instances-w2t5",
   "id": "2800161036826218547",
   "instanceStatus": "RUNNING",
   "instanceTemplate": "https://www.googleapis.com/compute/v1/projects/example-project/global/instanceTemplates/example-template",
   "currentAction": "REFRESHING"
  }
 ]
}

如需查看有效的 instanceStatus 字段值的列表,请参阅虚拟机实例生命周期

如果实例正在进行某种更改,托管式实例组会将实例的 currentAction 字段设置为以下操作之一,以帮助您跟踪更改进度。否则,currentAction 字段将设置为 NONE

可能的 currentAction 值如下:

  • ABANDONING:正在将该实例从 MIG 中移除。
  • CREATING:正在创建实例。
  • CREATING_WITHOUT_RETRIES:正在创建该实例,且不会重试;如果第一次尝试并未创建该实例,则 MIG 将不会再次尝试替换该实例。
  • DELETING:正在删除实例。
  • RECREATING:该实例正在被替换。
  • REFRESHING:该实例正从其当前目标池中移除,并正在被读取到当前目标池列表中(此列表与现有目标池可能相同,也可能不同)。
  • RESTARTING:正在使用 stopstart 方法重启该实例。
  • RESUMING。实例在暂停后处于恢复过程中。
  • STARTING。实例在停止后处于启动过程中。
  • STOPPING:实例正在停止。
  • SUSPENDING:实例正在暂停。
  • VERIFYING:该实例已创建并且正在接受验证。
  • NONE:没有对实例执行任何操作。

如需检查整个实例组处于稳定状态还是正在进行更改,请参阅检查实例组的状态

检查运行状况

如果您为托管式实例组配置了自动修复,则可以查看每个虚拟机的健康状况。请参阅检查运行状况

列出实例错误

如果您的托管实例发生错误,您可以查看这些错误以诊断原因并采取缓解措施。

使用 Google Cloud 控制台、gcloud CLI 或 REST 列出错误。

控制台

  1. 在 Google Cloud 控制台中,转到实例组页面。

    转到“实例组”

  2. 在列表的名称列下方,点击要检查的实例组的名称。此时将打开一个页面,其中会显示实例组属性和组内包含的实例的列表。

  3. 点击错误

gcloud

使用 instance-groups managed list-errors 命令列出组中的最新错误

gcloud compute instance-groups managed list-errors instance-group-name \
    [--zone zone | --region region]

例如:

gcloud compute instance-groups managed list-errors example-group \
    --region us-west1
INSTANCE_URL                                                                                        ACTION    ERROR_CODE      ERROR_MESSAGE                                                                                     TIMESTAMP                      INSTANCE_TEMPLATE                                                                                                            VERSION_NAME

https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/instances/igm-1-v0hl  CREATING  QUOTA_EXCEEDED  Instance 'igm-1-v0hl' creation failed: Quota 'CPUS' exceeded.  Limit: 1.0 in zone us-central1-a.  2019-07-11T07:44:40.156-07:00  https://www.googleapis.com/compute/v1/projects/my-project/global/instanceTemplates/instance-template-1
https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/instances/igm-1-qp3d  CREATING  QUOTA_EXCEEDED  Instance 'igm-1-qp3d' creation failed: Quota 'CPUS' exceeded.  Limit: 1.0 in zone us-central1-a.  2019-07-11T07:44:40.081-07:00  https://www.googleapis.com/compute/v1/projects/my-project/global/instanceTemplates/instance-template-1
...

REST

可用区区域级代管式实例组构造一个向 listErrors 方法发出的 GET 请求。

例如:

GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group-name/listErrors&maxResults=100

请求会获取类似于以下内容的响应:


{
 "items": [
  {
   "error": {
    "code": "QUOTA_EXCEEDED",
    "message": "Instance 'example-mig-m1sz' creation failed: Quota 'CPUS' exceeded.  Limit: 50.0 in zone us-central1-c."
   },
   "timestamp": "2019-01-03T18:47:28.457-08:00",
   "instanceDetails" : {
    "instance": "zones/us-central1-c/instances/example-mig-m1sz",
    "action": "CREATING",
    "version": {
     "name": "example-version-name",
     "instanceTemplate": "global/instanceTemplates/example-template",
    }
   }
  }
 ],
 ...
 "nextPageToken": "Ch0yMDE5LTA3LTI5VDExOjA4OjA2LjYxMi0wNzowMBJ5aHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vY29tcHV0ZS9zdGFnaW5nX2FscGhhL3Byb2plY3RzL215cnpha2VyZXltcy1zdGFnaW5nL3pvbmVzL3VzLWNlbnRyYWwxLWlyMS9pbnN0YW5jZXMvaWdtLTEtcXAzZA=="
}

listErrors API 支持列表分页。如需获取下一页结果,请在后续请求中使用一个响应中的 nextPageToken 字段。例如:GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group-name/listErrors&maxResults=100&nextPageToken=next-page-token,将 next-page-token 替换为从上一个响应中获取的令牌。

可能的错误列表包括但不限于以下示例:

  • 无法创建新实例,原因如下:
    • 抢占式容量不可用。
    • 配额不足,例如某个区域的 CPU 数量不足。
    • 与组关联的网络已达到虚拟机实例数量上限。
    • 实例模板的 properties.disks[].initializeParams.sourceImage 字段中指定的磁盘映像已删除,或其权限已更改。
    • 与项目关联的结算账号的信用卡拒付。
  • 无法删除现有实例,原因如下:
    • 该组使用的服务账号没有 compute.instances.delete 权限。
    • 请求的并发删除过多,超出了速率限制。
  • 无法将实例添加到目标池,因为目标池已被删除。

检查此类错误后,您可以减少错误。例如:

  • 将您的工作负载迁移到具有可抢占容量的其他可用区。
  • 请求在指定区域增加配额。
  • compute.instances.delete 权限添加到该组使用的服务账号。

如果托管式实例组触发的操作失败(例如,如果自动扩缩器在尝试增加该组的大小时发生错误),则该组可能会立即重试该操作。如果最后一次立即重试尝试失败,则 MIG 会记录错误,您可以通过列出实例错误来查看错误。在退避一段时间后,该组会再次重试失败的操作。如果错误一直存在,则可能被记录多次。

即使底层实例不再存在或无法创建,Compute Engine 也会保留最近 8 天的 500 个最新错误。

检查虚拟机实例是否属于 MIG

如需检查特定虚拟机是否为组成员,您可以使用控制台或 REST。

控制台

  1. 在 Google Cloud 控制台中,前往虚拟机实例页面。

    转到“虚拟机实例”

  2. 点击某个实例以访问其虚拟机实例详情
  3. 如果虚拟机实例是托管式实例组的成员,则该托管式实例组的名称会显示在使用者标题下。如果虚拟机实例不是实例组的成员,则实例详细信息页面上不会显示使用者标题。

REST

请参阅查看虚拟机实例的引用方

另外,如需确定某个虚拟机是否是(或曾经是)某个代管式实例组的成员,请在该实例的元数据中查找以下两个元数据键:

  • instance-template 表示创建虚拟机时使用的模板。
  • created-by 表示创建虚拟机的托管式实例组。

即使您放弃该实例,该虚拟机仍将包含这些元数据条目,除非您手动移除这些条目。

例如,如果存在一个名为 random-instance-biy 的虚拟机,并且您想知道该虚拟机是否由托管式实例组创建,您可以描述该实例并查找元数据键。例如:

gcloud compute instances describe random-instance-biy \
    --zone us-central1-f

gcloud CLI 会返回如下所示的响应:

canIpForward: false
cpuPlatform: Intel Ivy Bridge
creationTimestamp: '2016-08-24T14:11:38.012-07:00'
...
metadata:
  items:
  - key: instance-template
    value: projects/123456789012/global/instanceTemplates/example-it
  - key: created-by
    value: projects/123456789012/zones/us-central1-f/instanceGroupManagers/igm-metadata

查看托管实例的保留状态

如果您配置了有状态 MIG 并且想查看保留状态,请参阅查看有状态配置和保留状态

后续步骤