使用代管实例

您可以将代管实例组 (MIG) 及其虚拟机 (VM) 实例作为单个实体进行控制。例如,您可以为实例组设置自动修复、自动扩缩和自动更新政策。MIG 根据您的规范自动对其实例进行操作,以达到期望的状态。

例如,如果您需要对 MIG 中的特定托管实例进行操作,例如创建或删除具有特定名称的实例,您仍必须通过组实体对这些实例进行操作。可以使用本页面中所述的方法,例如 instanceGroupManagerregionInstanceGroupManager API 方法。

如果您使用实例组方法以外的方法对托管实例进行操作,则您的操作可能会与实例组的操作发生冲突。例如,如果您删除属于某个组的实例,但未使用该组的实例删除方法,则 MIG 可能会根据该组的规范自动重新创建该实例。

准备工作

什么是托管实例?

托管实例是 MIG 中的数据实体,其中包含实际虚拟机实例的当前状态和预期状态。具体而言:

  • 当前状态包括:
  • 预期状态包括:
    • 预期版本,即要用于实例的版本名称和实例模板。
    • 待保留项(磁盘、元数据)的保留状态

对于 MIG 中的每个托管实例,MIG 会根据该托管实例的规范启动并运行实际虚拟机。

如需查看托管实例的规范,请参阅获取有关 MIG 中托管虚拟机的信息

向 MIG 添加实例

如需向 MIG 添加更多实例,您可以执行以下操作:

如需验证新添加的实例已经启动且正在运行,请验证组的状态验证托管实例的状态

手动调整大小

如果托管实例组尚未设置为自动扩缩,您可以手动调整组的大小以更改组中的实例数。请参阅手动调整 MIG 的大小

自动扩缩

您可以将托管实例组配置为根据其工作负载自动添加或移除实例。您的应用可以顺利应对流量增加的情况,同时您也可以在计算资源需求量降低时减少费用。如需自动扩缩 MIG,请参阅自动扩缩实例组

添加具有特定名称的实例

如果您的系统依赖于特定名称,请使用 gcloud 工具API 将具有特定名称的虚拟机添加到现有 MIG。

如果 MIG 重新创建虚拟机,则您为这些托管实例分配的名称仍会保留。如需详细了解如何保留 MIG 实例状态,请参阅有状态 MIG

限制

如果您创建具有特定名称的实例:

  • 您必须在实例创建过程中停用自动扩缩功能。
  • 您必须将 MIG 的更新政策设置为寻机更新
  • 如果您要更新区域级 MIG:
  • 您不能在项目中使用重复的虚拟机实例名称。

gcloud

使用 create-instances 子命令:

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

替换以下内容:

  • instance-group-name 是要添加新实例的区域级或地区级 MIG 的名称。
  • managed-instance-name 是您要分配给新实例的名称。

API

在 API 中,向 regionInstanceGroupManagers.createInstances 方法发出 POST 请求。对于地区级托管实例组,请使用 instanceGroupManagers.createInstances 方法。在请求正文中,添加包含一个或多个实例名称的 instances 字段。

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group-name/createInstances
{
  "instances": [
    {
      "name": "instance-name-1"
    },
    {
      "name": "instance-name-2"
    }
  ]
}

更新实例组中的选定实例

请参阅发布 MIG 更新

从 MIG 中删除实例

在您删除托管实例时,MIG 会缩减实例组的 targetSize 并删除相应的虚拟机实例。MIG 会从其所属的任何目标池中移除实例。

从代管实例组中删除实例并不会更改任何指定的自动扩缩器设置。如果您从托管实例组中删除实例,自动扩缩程序可能会检测到组中其他实例的工作负载增加,并将组大小增加回其先前的级别。为了防止出现这种情况,请在尝试删除实例之前停止自动扩缩程序

如果该实例组属于已启用连接排空后端服务,则在连接排空结束后,最长可能需要再等待 60 秒才会移除或删除虚拟机实例。

如需删除托管实例并删除其相应的虚拟机实例,您可以执行以下操作:

删除特定实例

您可以删除托管实例组中的特定实例。删除实例会缩减实例组的指定 targetSize,并从实例所属的任何目标池中移除实例。如果您设置了有状态 MIG,则 MIG 还会删除实例的保留状态配置。

从代管实例组中删除实例并不会更改任何指定的自动扩缩器设置。如果您从托管实例组中删除实例,自动扩缩程序可能会检测到组中其他实例的工作负载增加,并将组大小增加回其先前的级别。为了防止出现这种情况,请在尝试删除实例之前停止自动扩缩程序

如果该实例组属于已启用连接排空后端服务,则在连接排空结束后,最长可能需要再等待 60 秒才会移除或删除虚拟机实例。

您可以使用 Google Cloud Consolegcloud 命令行工具API 删除托管实例组中的实例。

控制台

  1. 在 Cloud Console 中,转到实例组页面。

    转到“实例组”页面

  2. 在列表的名称列下方,点击要在其中删除单个实例的实例组的名称。此时将打开一个页面,其中会显示实例组属性和组中包含的实例的列表。
  3. 在实例列表中,选择要删除的一个或多个实例。
  4. 点击删除。选定的实例即会被删除。

gcloud

如需使用 gcloud 工具删除实例,请使用 instance-groups managed delete-instances 子命令:

gcloud compute instance-groups managed delete-instances instance-group-name \
    --instances example-i3n2,example-z2x9 \
    [--region region | --zone zone]

API

在 API 中,向 regionInstanceGroupManagers.deleteInstances 方法发出 POST 请求。对于地区级托管实例组,请使用 instanceGroupManagers.deleteInstances 方法。

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

{
 "instances": [
  "zones/zone/instances/example-instance-i3n2",
  "zones/zone/instances/example-instance-l6n1"
 ]
}

当您发出删除代管实例组中的实例的请求后,只要系统可以删除这些实例,这些实例就会停止。此过程可能会耗费大量时间,具体取决于您从组中删除的实例数。验证组的状态验证托管实例的状态

放弃 MIG 中的实例

您可以将虚拟机实例从托管实例组中分离出来,以便更轻松地调试个别实例的问题,而不会影响整个实例组。放弃组中的某个实例时,也会从分配给托管实例组的负载平衡器中移除该实例。请注意,手动分配给特定单个实例的目标池不会被移除。

放弃实例会缩减实例组的指定 targetSize,但不会更改任何指定的自动扩缩程序设置。包含自动扩缩程序的托管实例组会根据需要继续自动添加或移除实例。

如果该实例组属于已启用连接排空后端服务,则在连接排空结束后,最长可能需要再等待 60 秒才会移除或删除虚拟机实例。

您可以使用 Google Cloud Consolegcloud 工具API 放弃代管实例组中的实例。

控制台

  1. 在 Cloud Console 中,转到实例组页面。

    转到“实例组”页面

  2. 在列表的名称列下方,点击要从中移除实例的实例组的名称。此时将打开一个页面,其中会显示实例组属性和组中包含的实例的列表。
  3. 在实例列表中,选择要从组中移除的一个或多个实例。
  4. 点击从组中移除。选定的实例即会从组中移除,但会继续在组外运行。

gcloud

如需从实例组中移除实例而不删除虚拟机,请使用 abandon-instances 子命令。

gcloud compute instance-groups managed abandon-instances instance-group-name \
    --instances example-i3n2,example-z2x9 \
    [--region region | --zone zone]

API

在 API 中,向 regionInstanceGroupManagers.abandonInstances 方法发出 POST 请求。对于地区级托管实例组,请使用 instanceGroupManagers.abandonInstances 方法。

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

{
 "instances": [
  "zones/zone/instances/example-instance-i3n2",
  "zones/zone/instances/example-instance-l6n1"
 ]
}

在您发出从托管实例组中放弃实例的请求后,该组会尽快移除相应实例。验证组的状态验证托管实例的状态

在 MIG 中重新创建实例

重新创建某个实例会删除指定的虚拟机,并使用分配给该托管实例的配置创建新的虚拟机。

您可以使用此方法来更新选定的虚拟机,从而让这些虚拟机使用最新的实例模板和有状态配置(如果有)。如果您需要重新创建托管实例组中的所有虚拟机,请改为启动滚动更新

如果该实例组属于已启用连接排空后端服务,则在连接排空结束后,最长可能需要再等待 60 秒才会移除或删除虚拟机实例。

您可以使用 gcloud 工具API 重新创建托管实例组中的选定虚拟机实例。

gcloud

使用 instance-groups managed recreate-instances 子命令。

gcloud compute instance-groups managed recreate-instances instance-group-name \
    --instances example-i3n2,example-z2x9 \
    [--region region | --zone zone]

API

在 API 中,向 regionInstanceGroupManagers.recreateInstances 方法发出 POST 请求。对于地区级托管实例组,请使用 instanceGroupManagers.recreateInstances 方法。

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

{
 "instances": [
  "zones/zone/instances/example-instance-i3n2",
  "zones/zone/instances/example-instance-l6n1"
 ]
}

在您发出在托管实例组中重新创建虚拟机实例的请求后,新虚拟机会在系统可以对其进行预配后立即启动。此过程可能会耗费大量时间,具体取决于您重新创建的实例数。验证组的状态验证托管实例的状态

获取 MIG 中的实例相关信息

请参阅获取 MIG 中的托管实例相关信息

后续步骤