使用此页面上的方法可以获取有关您的托管实例组 (MIG) 的信息,以及获取有关每个托管实例组中虚拟机 (VM) 实例的信息。
准备工作
- 如果您要使用本指南中的 API 示例,请设置 API 访问权限。
- 如果希望使用本指南中的命令行示例,请安装
gcloud
命令行工具。 - 创建托管实例组。
获取有关 MIG 的信息
您可以检索有关实例组本身的信息,例如检查实例组附加的政策,以及实例组处于稳定状态还是正在进行更改。如需获取有关 MIG 中虚拟机实例的信息,请参阅获取有关托管实例的信息。
列出 MIG
如需获取托管实例组的列表,请使用控制台、gcloud
工具或 API。
控制台
gcloud
如需列出项目中的所有托管实例组,请使用以下命令:
gcloud compute instance-groups managed list
API
如需列出一个地区中所有托管实例组,请构建一个向 instanceGroupManagers.list
方法发出的 GET
请求:
GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers
对于区域级(多地区)托管实例组,请改为使用 regionInstanceGroupManagers
资源:regionInstanceGroupManagers.list。
GET https://compute.googleapis.com/compute/v1/projects/project-id/regions/region/instanceGroupManagers
获取 MIG 的属性
如需获取有关特定 MIG 的信息,包括附加的政策(例如,自动修复政策),请使用控制台、gcloud
工具或 API。
要获取实例组的 id
,您必须使用 gcloud
工具或 API。
控制台
gcloud
如需获取有关特定组的信息,请使用以下命令:
gcloud compute instance-groups managed describe instance-group \ [--zone zone | --region region]
该命令会返回相应组的详细信息,包括附加的政策。
API
如需获取有关特定组的信息,请构建一个向 instanceGroupManagers.get
方法发出的 GET
请求,并在其中添加特定托管实例组的名称:
GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group
对于区域级(多地区)托管实例组,请改为使用 regionInstanceGroupManagers
资源:regionInstanceGroupManagers.list 和 regionInstanceGroupManagers.get。
GET https://compute.googleapis.com/compute/v1/projects/project-id/regions/region/instanceGroupManagers/instance-group
响应包含有关实例组的详细信息,包括除自动扩缩政策之外的其他附加政策。
如需获取有关自动扩缩程序的信息,请构建一个向 autoscalers.get
方法发出的 GET
请求,并在其中添加特定托管实例组的名称:
GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/autoscalers/instance-group
对于区域级(多地区)托管实例组,请改为使用 regionAutoscalers
资源:regionAutoscalers.get
。
GET https://compute.googleapis.com/compute/v1/projects/project-id/regions/region/regionAutoscalers/instance-group
验证 MIG 是否处于稳定状态
有多种命令和请求可用来创建、删除和修改托管实例组中的实例。一旦实例组预定将执行创建、删除或更新这些实例的操作,这些操作将返回 DONE
状态。但这并不表示组中的实例已经完成了创建、删除或更新,而是要等到相应的底层操作完成。您必须验证实例组的状态,或验证这些实例的状态。
托管实例组在满足如下所有条件时即处于稳定状态:托管实例组中的所有实例均未进行任何更改、未安排在将来对实例进行更改,并且组本身也未进行修改。
如果您的依赖项需要组中的所有实例运行状况良好并能处理流量才能正常工作,您可能有必要知道该组是否处于稳定状态。例如,您可能需要首先确认所有虚拟机正在运行且运行状况良好,然后才能开始调度作业、发送流量或分配键范围。
通过检查实例组的 status.isStable
字段的值来验证代管实例组中的所有实例是否正在运行且状况良好。
gcloud
使用 describe
命令:
gcloud compute instance-groups managed describe instance-group-name \ [--zone zone | --region region]
gcloud
工具会返回 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
后返回。
API
对于地区级 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
Compute Engine API 会返回 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 的托管实例
如需获取有关实例组中托管实例的列表,包括托管实例的状态和模板,请使用控制台、gcloud
工具或 API。
控制台
gcloud
使用 gcloud
工具 list-instances
子命令。
gcloud compute instance-groups managed list-instances instance-group \ [--zone zone | --region region]
该命令会返回实例列表及实例详细信息,包括其当前状态、实例模板和最近的错误。
API
对于地区级 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
状态。但这并不表示组中的实例已经完成了创建、删除或更新,而是要等到相应的底层操作完成。您必须验证这些实例的状态,或者验证组本身的状态。
您可以使用 gcloud
命令行工具或 Compute Engine API 查看代管实例组中每个实例正在执行的 currentAction
以及 status
。
gcloud
gcloud compute instance-groups managed list-instances INSTANCE_GROUP_NAME \ [--zone=ZONE | --region=REGION]
该命令会返回 MIG 中的实例列表及其状态和当前操作。例如:
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
列显示为空,除非您已设置运行状况检查。
API
对区域或可用区 MIG 资源调用 listManagedInstances
方法。例如:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME/listManagedInstances
调用会返回 MIG 的实例列表,其中包含每个实例的 instanceStatus
和 currentAction
。
{ "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
:正在使用stop
和start
方法重启该实例。VERIFYING
:该实例已创建并且正在接受验证。NONE
:没有对实例执行任何操作。
如需检查整个实例组处于稳定状态还是正在进行更改,请参阅检查实例组的状态。
检查运行状况
如果您为托管实例组配置了自动修复,则可以检查每个虚拟机的运行状况。请参阅检查运行状况。
列出实例错误
如果您的托管实例发生错误,您可以查看这些错误以诊断原因并采取缓解措施。
使用 Google Cloud Console、gcloud
工具或 Compute Engine API 列出错误。
控制台
在 Google Cloud Console 中,转到实例组页面。
在列表的名称列下方,点击要检查的实例组的名称。此时将打开一个页面,其中会显示实例组属性和组内包含的实例的列表。
点击错误。
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 ...
API
为地区或区域托管实例组构造一个向 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
如需检查特定虚拟机当前是否为组成员,您可以使用控制台或 API。
控制台
- 在 Google Cloud Console 中,转到虚拟机实例页面。
- 点击某个实例以访问其虚拟机实例详细信息。
- 如果虚拟机实例是托管实例组的成员,则该托管实例组的名称将显示在使用者标题下。如果虚拟机实例不是实例组的成员,则实例详细信息页面上不会显示使用者标题。
API
请参阅查看虚拟机实例的引用方。
另外,如需确定某个虚拟机是否是(或曾经是)某个托管实例组的成员,请在该实例的元数据中查找以下两个元数据键:
instance-template
表示创建虚拟机时使用的模板。created-by
表示创建虚拟机的托管实例组。
即使您放弃该实例,该虚拟机仍将包含这些元数据条目,除非您手动移除这些条目。
例如,如果存在一个名为 random-instance-biy
的虚拟机,并且您想知道该虚拟机是否由托管实例组所创建,您可以描述该实例并查找上述元数据键。例如:
gcloud compute instances describe random-instance-biy \ --zone us-central1-f
gcloud
工具会返回如下所示的响应:
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
查看托管实例的保留状态
如果您配置了有状态托管实例组并且想查看保留状态,请参阅查看有状态配置和保留状态。