创建托管实例组

本页面介绍了如何在一个地区内创建一组托管实例(称为托管实例组)。托管实例组包含可作为单个实体进行管理的多个相同实例。托管实例组通过主动保持实例可用(即处于 RUNNING 状态)来维护应用的高可用性,支持自动调节、负载平衡、滚动更新、自动修复等。

此外,您还可以创建包含同一区域内多个地区的实例的区域托管实例组。如需了解实例组,请参阅实例组概览

准备工作

限制

  • 每个托管实例组最多可包含 1000 个虚拟机实例。
  • 更新托管实例组时,可以通过单个请求指定的实例数上限为 1000 个。

将托管实例组用于无状态应用

托管实例组旨在支持符合以下条件的无状态应用:不依赖于要运行的基础虚拟机实例的特定状态。这样可实现自动调节和自动修复等功能,即托管实例组可以自动删除和重新创建实例。此外,如果由于用户执行的某种操作导致某个实例在自动修复的过程中从托管实例组中删除,或者由于在实例未设置为实时迁移的情况下进行基础架构维护,致使该实例从托管实例组中删除,该实例组将自动使用新的根永久性磁盘重新创建该实例。

由于托管实例组的无状态特性,您应该对应用进行设计或改进,确保其不依赖于不会持久保留的特定实例属性,例如 IP 地址或内存数据。同样,启动永久性磁盘的默认行为是在相应的虚拟机实例被删除时将这些启动永久性磁盘删除,因此您不应使用启动磁盘来存储托管实例组中的持久性数据。

为了保留您的数据,Google 建议的最佳做法是定期对操作系统映像进行维护以确保其保持最新状态,使用启动脚本,并将数据备份到另一个集中存放数据的位置(例如 Google Cloud Storage)。

在实例模板中,您可以指定容器映像自定义映像和相关的启动脚本,以确保重新创建的实例安装了必要的软件应用并可以访问所需的数据。如需了解创建实例模板的更多建议,请参阅确定性的实例模板

如果您确定需要保留与托管实例组关联的启动磁盘,则可以停用 disks.autoDelete 选项以防止启动永久性磁盘被删除,但请记住,这样将导致托管实例组无法创建新实例,因此不建议您采用此方法。

创建托管实例组

在创建托管实例组之前,您必须创建实例模板来指定操作系统映像或容器映像以及组中每个实例的设置。

创建模板后,您可以通过 Google Cloud Platform Consolegcloud compute 工具API 创建托管实例组。

Console

  1. 转到 GCP Console 中的“实例组”页面。

    转到“实例组”页面

  2. 点击创建实例组
  3. 输入托管实例组的名称,然后选择该组所属的地区。
  4. 组类型下方,选择托管实例组
  5. 实例模板下方,选择一个实例模板。如果没有可用的模板,请创建实例模板
  6. 指定要在组中创建的实例数。您还可以选择启用自动扩缩,以便该组根据实例的 CPU 使用率自动添加或移除实例,或者启用自动修复以对实例组内的实例执行运行状况检查。
  7. 点击创建以创建新组。

gcloud

使用 instance-groups managed create 命令创建实例组,如下所示:

gcloud compute instance-groups managed create [NAME] \
    --base-instance-name [BASE_NAME] \
    --size [SIZE] \
    --template [INSTANCE_TEMPLATE] \
    --zone [ZONE]

其中,您需要替换以下项:

  • [NAME] 替换为此实例组的名称。
  • [BASE_NAME] 替换为在此实例组中创建的实例将使用的名称。由于这些实例完全相同,因此系统会为每个实例分配一个随机字符串,作为实例名称的一部分。基本名称将作为前缀,后跟此随机字符串。例如,如果基本名称是 example,则实例的名称将是 example-yahs, example-qtyz 等。
  • [SIZE] 替换为实例组的大小。
  • [INSTANCE_TEMPLATE] 替换为该组的实例模板将使用的名称。
  • [ZONE] 替换为提供 Compute Engine 服务的地区

    例如,以下命令将创建一个名为 example-group 的实例组,其基本实例名称为 test。该组包含三个实例:

    gcloud compute instance-groups managed create example-group
    --base-instance-name test
    --size 3
    --template an-instance-template

API

在 API 中,构建一个向 instanceGroupManagers 服务发出的 POST 请求。在请求正文中包含所需的组名、组大小、组中实例的基本名称以及实例模板的网址。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers

{
  "baseInstanceName": "[BASE_NAME]",
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/[INSTANCE_TEMPLATE]"
    }
  ],
  "name": "[NAME]",
  "targetSize": [SIZE]
}

其中,您需要替换以下项:

  • [PROJECT_ID] 替换为请求的项目 ID。
  • [ZONE] 替换为请求对应的地区。
  • [NAME] 替换为此实例组的名称。
  • [BASE_NAME] 替换为在此实例组中创建的实例将使用的名称。由于这些实例完全相同,因此系统会为每个实例分配一个随机字符串,作为实例名称的一部分。基本名称将作为前缀,后跟此随机字符串。例如,如果基本名称是 example,则实例的名称将是 example-yahs, example-qtyz 等。
  • [SIZE] 替换为实例组的大小。
  • [INSTANCE_TEMPLATE] 替换为用于该组的实例模板。

检索现有组和组说明

您可以使用 Consolegcloud 命令行工具或 API 获取有关现有托管实例组的信息。要获得该组的 id,您必须使用 gcloud 或 API。

Console

  1. 转到 GCP Console 中的“实例组”页面。

    转到“实例组”页面

    如果您已有实例组,页面会列出这些组。请注意,该页面还会列出非托管实例组

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

gcloud

要列出项目中的所有托管实例组,请执行如下命令:

gcloud compute instance-groups managed list

要获取有关特定组的信息,请执行如下命令:

gcloud compute instance-groups managed describe [INSTANCE_GROUP] \
    --zone [ZONE]

API

要列出地区中的所有托管实例组,请构建一个向 instanceGroupManagers 服务发出的 GET 请求:

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers

要获取有关特定组的信息,请构建一个向 instanceGroupManagers 服务发出的 GET 请求,并在其中包含特定托管实例组的名称:

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

对于区域(多地区)托管实例组,请改为使用 regionInstanceGroupManagers 资源:regionInstanceGroupManagers.listregionInstanceGroupManagers.get

更改托管实例组的实例模板

您可以更改托管实例组的实例模板,而无需对现有实例进行任何更改。当您请求添加或重新创建实例时,托管实例组会使用新模板,但该模板不会自动更新组中的现有实例。因此您可以精确地控制要更新的实例,不过这样会导致您的实例组中包含不同的实例。

创建新实例模板后,请更改现有实例组的实例模板。

Console

  1. 转到 GCP Console 中的“实例组”页面。

    转到“实例组”页面

  2. 在列表的名称列下方,点击要更改其实例模板的实例组的名称。
  3. 点击修改组以修改此托管实例组。
  4. 实例模板下方,选择要对此组使用的新实例模板。
  5. 点击保存以应用新模板。

gcloud

要使用 set-instance-template 方法更新模板,请将新模板传递给 instance-groups managed set-instance-template 子命令:

gcloud compute instance-groups managed set-instance-template [INSTANCE_GROUP] \
    --template [INSTANCE_TEMPLATE] \
    --zone [ZONE]

API

使用目标托管实例组的名称构建向 instanceGroupManagers 服务发出的请求。在请求正文中包含新实例模板的网址,如下所示:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers[INSTANCE_GROUP]/setInstanceTemplate

{
 "instanceTemplate": "global/instanceTemplates/[INSTANCE_TEMPLATE]
}

更改实例模板后,请重新创建单个实例或使用滚动更新更新组中的所有实例。

自动调节托管实例组的大小

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

手动调节托管实例组的大小

如果托管实例组尚未设置为自动调节,您可以手动调节组的大小以更改组中的实例数。如果增加大小,则托管实例组会使用当前实例模板添加新实例。如果减小大小,则托管实例组将从组中删除实例。请注意,组首先会删除 currentActionDELETINGCREATINGRECREATING 的实例,然后才会删除正在运行并且预计不会被执行任何操作的实例。

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

您可以使用 Google Cloud Platform Consolegcloud compute 工具API 调节托管实例组的大小。

Console

  1. 转到 GCP Console 中的“实例组”页面。

    转到“实例组”页面

  2. 在列表的名称列下方,点击要更改组大小的实例组的名称。
  3. 点击修改组以修改此托管实例组。
  4. 实例数下方,指定要包含在此托管实例组中的实例的数量。如果启用了自动扩缩,则该组会根据需要自动添加或移除实例。不过,您可以更改实例数下限实例数上限值,以通过自动调节程序间接调节组大小。
  5. 点击保存以应用新模板。

gcloud

命令用法如下:

gcloud compute instance-groups managed resize [INSTANCE_GROUP ] \
    --size [NEW_SIZE] \
    --zone [ZONE]

API

使用目标托管实例组的名称构建向 instanceGroupManagers 服务发出的请求。将新的实例大小指定为一个参数。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/resize?size=[NEW_SIZE]

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

停用创建重试模式

默认情况下,如果虚拟机实例的初始创建失败,则托管实例组会不断重试以创建每个实例,直到成功创建实例。但是,如果您不希望创建重试自动进行,则可以在调节实例组的大小时通过提供 --nocreation-retries 标志来停用创建重试模式。在此模式下,托管实例组仅尝试创建所有实例一次。如果在创建过程中出错,则托管实例组将不会创建此实例,而是会缩小托管实例组的目标大小。

此模式仅在首次尝试创建实例期间适用。如果在启用此模式时成功创建了实例,则此实例的运行方式将与使用常规调节大小请求创建的所有其他实例相同。具体而言,如果正在运行的实例日后异常终止并且需要重新创建,则在这种情况下,此模式不会影响重新创建行为。

如果您将系统设置为自动创建实例组并且不需要提供确切数量的实例,则停用创建重试模式特别有用。您可能希望让托管实例组的大小快速稳定下来,并能够灵活调整组中的实例数量,而不是无限期地等待系统创建完所有请求的实例,因为这样可能会由于配额错误或其他无关的问题而导致暂时或永久延迟。

要在已停用创建重试模式的情况下调节托管实例组的大小,请使用 gcloud compute 工具API

gcloud

使用 gcloud 命令行工具,运行指定了 --no-creation-retries 标志的 resize 命令,如下所示:

gcloud beta compute instance-groups managed resize [INSTANCE_GROUP] --size [NEW_SIZE] \
    --nocreation-retries \
    --zone [ZONE]

API

使用目标托管实例组的名称构建向 instanceGroupManagers 服务发出的请求。在请求正文中指定新的实例大小和 noCreationRetries 字段。

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/resizeAdvanced

{
 "targetSize": [SIZE]
 "noCreationRetries": true
}

您可以使用 listManagedInstances 方法查看正在创建的实例及其所处的模式。在已停用创建重试模式的情况下创建的实例将处于 CREATING_WITHOUT_RETRIES 状态。

为托管实例组设置运行状况检查和自动修复

要提高应用的可用性以及验证应用是否正在响应,可以为托管实例组配置自动修复政策。自动修复政策依赖于基于应用的运行状况检查来验证应用是否按预期响应。与仅验证实例是否处于 RUNNING 状态相比,检查应用是否响应的精确度更高。

如果自动修复程序确定应用没有响应,则托管实例组会自动重新创建该实例。对于抢占式实例,该组会在必要的资源变得再次可用时重新创建实例。

您可以使用运行状况检查信号来验证实例是否已创建以及其应用是否正在响应。当托管实例处于创建过程时,其 currentActionCREATING。如果附加了自动修复政策,托管实例一旦创建完成并运行,该实例的 currentAction 将变为 VERIFYING,并且运行状况检查将开始探测实例的应用。如果应用在其启动过程中通过了此初始运行状况检查,则实例将通过验证且其 currentAction 将变为 NONE。首次将运行状况检查附加到托管实例组时,可能需要 15 分钟才能完成验证。如需了解详情,请参阅验证托管实例组中的实例状态

自动修复重新创建实例时,将使用最初创建该实例时所用的实例模板(不一定是附加到托管实例组的默认实例模板)。除非您采取预防措施,否则在删除并重新创建实例及其磁盘时,写入实例磁盘的任何数据都将丢失。如需详细了解 Compute Engine 自动修复程序的行为以及自动修复如何影响挂接的磁盘,请参阅托管实例组和自动修复。您可以为每个托管实例组设置一个自动修复政策。

如需了解如何对托管实例组使用运行状况检查,请按照以下说明创建运行状况检查,以检查端口 80 上是否存在网络服务器响应。然后,您可以将该运行状况检查应用于托管实例组,以确保该组中的网络服务器正常运行:

Console

  1. 为自动修复创建运行状况检查,这种运行状况检查比负载平衡运行状况检查更加保守。

    例如,创建一个运行状况检查,使其在端口 80 上查找响应,而且在将实例标记为 UNHEALTHY 并导致这些实例被重新创建之前,该运行状况检查可以容许某些故障。在本例中,如果实例成功返回一次,则会被标记为“运行状况良好”。如果连续 3 次未能成功返回,则会被标记为“运行状况不佳”。

    1. 转到 GCP Console 中的“创建运行状况检查”页面。

      转到“创建运行状况检查”页面

    2. 为此运行状况检查指定名称,例如 example-check
    3. 如果尚未选择协议,请选择 HTTP
    4. 对于端口,请输入 80
    5. 对于检查间隔,请输入 5
    6. 对于超时,请输入 5
    7. 设置状况良好判断阈值以确定在将运行状况不佳的实例标记为运行状况良好之前,必须返回的连续成功运行状况检查次数。对于此示例,请输入 1
    8. 设置状况不佳判断阈值以确定在将运行状况良好的实例标记为运行状况不佳之前,必须返回的连续不成功运行状况检查次数。对于此示例,请输入 3
    9. 点击创建以创建运行状况检查。
  2. 创建防火墙规则以允许运行状况检查探测连接到您的应用。

    运行状况检查探测请求来自 130.211.0.0/2235.191.0.0/16 范围间的地址,因此请确保您的网络防火墙规则允许运行状况检查进行连接。在本例中,我们的托管实例组使用的是 default 网络,并且其实例侦听的是端口 80。如果端口 80 尚未在默认网络中打开,请创建防火墙规则。

    1. 转到 GCP Console 中的“创建防火墙规则”页面。

      转到“创建防火墙规则”页面

    2. 对于名称,请为防火墙规则输入一个名称(例如 allow-health-check)。
    3. 对于网络,请选择 default 网络。
    4. 对于来源过滤条件,请选择 IP ranges
    5. 对于来源 IP 地址范围,请输入 130.211.0.0/2235.191.0.0/16
    6. 协议和端口中,选择指定的协议和端口并输入 tcp:80
    7. 点击创建
  3. 通过为区域或地区托管实例组配置自动修复政策来应用运行状况检查。

    1. 转到 GCP Console 中的“实例组”页面。

      转到“实例组”页面

    2. 在列表的名称列下方,点击要应用运行状况检查的实例组的名称。
    3. 点击修改组以修改此托管实例组。
    4. 自动修复下方,选择您之前创建的运行状况检查。
    5. 更改或保留初始延迟时间设置。此设置会使自动修复功能推迟可能会在实例启动过程中提前重新创建实例的行为。初始延迟计时器从实例的 currentActionVERIFYING 时开始计时。
    6. 点击保存以应用更改。

    可能经过几分钟之后,自动修复才会开始监视组中的实例。

gcloud

  1. 为自动修复创建运行状况检查,这种运行状况检查比负载平衡运行状况检查更加保守。

    例如,创建一个运行状况检查,使其在端口 80 上查找响应,而且在将实例标记为 UNHEALTHY 并导致这些实例被重新创建之前,该运行状况检查可以容许某些故障。在本例中,如果实例成功返回一次,则会被标记为“运行状况良好”。如果连续 3 次未能成功返回,则会被标记为“运行状况不佳”。

    gcloud compute health-checks create http example-check --port 80 \
        --check-interval 30s \
        --healthy-threshold 1 \
        --timeout 10s \
        --unhealthy-threshold 3
    
  2. 创建防火墙规则以允许运行状况检查探测连接到您的应用。

    运行状况检查探测请求来自 130.211.0.0/2235.191.0.0/16 范围间的地址,因此请确保您的防火墙规则允许运行状况检查进行连接。在本例中,我们的托管实例组使用的是 default 网络,并且其实例侦听的是端口 80。如果端口 80 尚未在默认网络中打开,请创建防火墙规则。

    gcloud compute firewall-rules create allow-health-check \
        --allow tcp:80 \
        --source-ranges 130.211.0.0/22,35.191.0.0/16 \
        --network default
    
  3. 通过为区域或地区托管实例组配置自动修复政策来应用运行状况检查。

    使用 gcloud beta compute 中的 set-autohealing 命令以将运行状况检查应用于托管实例组。

    initial-delay 设置会使自动修复功能推迟可能会在实例启动过程中提前重新创建实例的行为。初始延迟计时器从实例的 currentActionVERIFYING 时开始计时。

    例如:

    gcloud beta compute instance-groups managed set-autohealing my-mig \
        --health-check example-check \
        --initial-delay 300 \
        --zone us-east1-b
    

    可能经过 15 分钟之后,自动修复才会开始监视组中的实例。

API

  1. 为自动修复创建运行状况检查,这种运行状况检查比负载平衡运行状况检查更加保守。

    例如,创建一个运行状况检查,使其在端口 80 上查找响应,而且在将实例标记为 UNHEALTHY 并导致这些实例被重新创建之前,该运行状况检查可以容许某些故障。在本例中,如果实例成功返回一次,则会被标记为“运行状况良好”。如果连续 3 次未能成功返回,则会被标记为“运行状况不佳”。

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks
    
    {
     "name": "example-check",
     "type": "http",
     "port": 80,
     "checkIntervalSec": 30,
     "healthyThreshold": 1,
     "timeoutSec": 10,
     "unhealthyThreshold": 3
    }
    
  2. 创建防火墙规则以允许运行状况检查探测连接到您的应用。

    运行状况检查探测请求来自 130.211.0.0/2235.191.0.0/16 范围间的地址,因此请确保您的防火墙规则允许运行状况检查进行连接。在本例中,我们的托管实例组使用的是 default 网络,并且其实例侦听的是端口 80。如果端口 80 尚未在默认网络中打开,请创建防火墙规则。

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls
    
    {
     "name": "allow-health-check",
     "network": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default",
     "sourceRanges": [
      "130.211.0.0/22",
      "35.191.0.0/16"
     ],
     "allowed": [
      {
       "ports": [
        "80"
       ],
       "IPProtocol": "tcp"
      }
     ]
    }
    
  3. 通过为区域或地区托管实例组配置自动修复政策来应用运行状况检查。

    自动修复政策是 instanceGroupManager 资源或 regionInstanceGroupManager 资源的一部分。

    您可以使用 insertpatch 方法设置自动修复政策。

    下面的示例使用 instanceGroupManagers.patch 方法设置自动修复政策。

    PATCH https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]
    {
      "autoHealingPolicies": [
        {
          "healthCheck": "global/healthChecks/example-check",
          "initialDelaySec": 300
        }
      ],
    }
    

    initialDelaySec 设置会使自动修复功能推迟可能会在实例启动过程中提前重新创建实例的行为。初始延迟计时器从实例的 currentActionVERIFYING 时开始计时。

    可能经过几分钟之后,自动修复才会开始监视组中的实例。

    要关闭基于应用的自动修复,请将自动修复政策设置为空值,即 autoHealingPolicies[]。托管实例组将仅重新创建未处于 RUNNING 状态的实例。

    您可以通过读取 instanceGroupManagers.autoHealingPolicies 字段来获取托管实例组的自动修复政策。您可以使用以下某个方法获取托管实例组资源:

查看历史自动修复操作

您可以使用 gcloud 工具或 API 查看过去的自动修复事件。

gcloud

gcloud compute operations list 命令和过滤条件搭配使用可以仅查看项目中自动修复的相应修复事件。

gcloud compute operations list --filter='operationType~compute.instances.repair.*'

如需详细了解特定修复操作,请使用 describe 命令。例如:

gcloud compute operations describe repair-1539070348818-577c6bd6cf650-9752b3f3-1d6945e5 --zone us-east1-b

API

对于地区托管实例组,请向地区的 operations 资源提交 GET 请求,并包含一个过滤条件,以将输出列表范围限定为 compute.instances.repair.* 事件。

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/operations?filter=operationType+%3D+%22compute.instances.repair.*%22

对于区域托管实例组,请使用区域(而不是地区)的 operations 资源。

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/region/[REGION]/operations?filter=operationType+%3D+%22compute.instances.repair.*%22

如需详细了解特定修复操作,请提交针对该特定操作的 GET 请求。

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/operations/repair-1539070348818-577c6bd6cf650-9752b3f3-1d6945e5

识别属于组的实例

要查看组中所有实例的列表,请参阅检索现有组和组描述

要检查特定实例当前是否是组的成员,您可以使用 Console 或 API。

Console

  1. 转到“虚拟机实例”页面。

    转到“虚拟机实例”页面

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

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'
disks:
- autoDelete: true
  boot: true
  deviceName: persistent-disk-0
  index: 0
  interface: SCSI
  kind: compute#attachedDisk
...[snip]...
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

从组中删除单个实例

您可以删除托管实例组中的单个实例。删除实例会缩减实例组的指定 targetSize,并从实例所属的任何目标池中移除实例。

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

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

您可以使用 Google Cloud Platform Consolegcloud compute 工具API 从托管实例组中删除实例。

Console

  1. 转到 GCP Console 中的“实例组”页面。

    转到“实例组”页面

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

gcloud

要使用 gcloud 删除实例,请使用 instance-groups managed delete-instances 子命令:

gcloud compute instance-groups managed delete-instances [INSTANCE_GROUP] \
    --instances example-i3n2,example-z2x9 \
    --zone [ZONE]

API

使用目标托管实例组的名称构建向 instanceGroupManagers 服务发出的请求。在请求正文中包含要删除的一个或多个实例的网址。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/deleteInstances

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

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

放弃组中的实例

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

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

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

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

Console

  1. 转到 GCP Console 中的“实例组”页面。

    转到“实例组”页面

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

gcloud

要从实例组中移除实例而不删除实例,请使用 abandon-instances 子命令。

gcloud compute instance-groups managed abandon-instances [INSTANCE_GROUP] \
    --instances example-i3n2,example-z2x9 \
    --zone [ZONE]

API

使用目标托管实例组的名称构建向 instanceGroupManagers 服务发出的请求。在请求正文中包含要放弃的一个或多个实例的网址。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/abandonInstances

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

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

在组中重新创建实例

如果重新创建实例,系统将删除指定的实例,并使用分配给托管实例组的实例模板创建新实例。

使用此方法可更新选定的实例,从而让这些实例使用最新的实例模板。如果需要重新创建托管实例组中的所有实例,请改为启动滚动更新

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

您可以使用 gcloud compute 工具API 在托管实例组中重新创建选定实例。

gcloud

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

gcloud compute instance-groups managed recreate-instances [INSTANCE_GROUP] \
    --instances example-i3n2,example-z2x9 \
    --zone [ZONE]

API

使用目标托管实例组的名称构建向 instanceGroupManagers 服务发出的请求。在请求正文中包含要重新创建的一个或多个实例的网址。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/recreateInstances

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

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

验证托管实例组中的实例状态

有多种命令和请求可用来在托管实例组中创建、删除和修改实例。一旦实例组预定将执行创建、删除或更新这些实例的操作,这些操作将返回 DONE 状态。但这并不表示组中的实例已被创建、删除或更新,除非相应的底层操作已完成。您必须使用 gcloud compute 工具API 来验证这些实例的状态。

gcloud

使用 instance-groups managed list-instances 命令列出组中的实例和当前预定要对这些实例执行的操作。

gcloud compute instance-groups managed list-instances [INSTANCE_GROUP] \
    --zone [ZONE]

例如:

gcloud compute instance-groups managed list-instances example-group \
    --zone [ZONE]
NAME               STATUS  ACTION   LAST_ERROR
example-group-0gnk RUNNING NONE
example-group-15xy         CREATING Error QUOTA_EXCEEDED: Instance 'example-group-15xy' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 23.0
example-group-18ep         CREATING Error QUOTA_EXCEEDED: Instance 'example-group-18ep' creation failed: Quota 'CPUS' exceeded.  Limit: 24.0, Error QUOTA_EXCEEDED: Instance 'example-group-18ep' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 23.0
example-group-1u1y         CREATING

在本例中,example-group 包含四个实例:一个正在运行的实例、两个系统正尝试创建但由于地址和 CPU 配额而无法创建的实例,以及一个正在创建且未出错的实例。

对于抢占式实例组,如果没有抢占式容量,则创建操作将失败,并显示错误:ZONE_RESOURCE_POOL_EXHAUSTED。要查看过去的抢占事件,请参阅检测实例是否被抢占

等待直至稳定

您可以使用 instance-groups managed wait-until-stable 命令自动检查实例组,并指示脚本等到组中的所有实例都处于稳定状态再执行。

gcloud compute instance-groups managed wait-until-stable example-group \
    --zone [ZONE]

API

构建一个向 instanceGroupManagers 服务发出的请求,并指定包含您要验证的实例的托管实例组的名称。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/listManagedInstances

例如:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instanceGroupManagers/example-group/listManagedInstances

请求会获得以下响应:

{
 "managedInstances": [
  {
   "instance": "https://content.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-group-0gnk",
   "id": "16960422116594945029",
   "instanceStatus": "RUNNING",
   "currentAction": "NONE"
  },
  {
   "instance": "https://content.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-group-15xy",
   "currentAction": "CREATING",
   "lastAttempt": {
    "errors": {
     "errors": [
      {
       "code": "QUOTA_EXCEEDED",
       "message": "Instance 'example-group-15xy' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 23.0"
      }
     ]
    }
   }
  },
  {
   "instance": "https://content.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-group-18ep",
   "currentAction": "CREATING",
   "lastAttempt": {
    "errors": {
     "errors": [
      {
       "code": "QUOTA_EXCEEDED",
       "message": "Instance 'example-group-18ep' creation failed: Quota 'CPUS' exceeded.  Limit: 24.0"
      },
      {
       "code": "QUOTA_EXCEEDED",
       "message": "Instance 'example-group-18ep' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 23.0"
      }
     ]
    }
   }
  },
  {
   "instance": "https://content.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-group-1u1y",
   "id": "7239700230861444556",
   "instanceStatus": "RUNNING",
   "currentAction": "CREATING"
  }
 ]
}

在本例中,example-group 包含四个实例:一个正在运行的实例、两个系统正尝试创建但由于地址和 CPU 配额而无法创建的实例,以及一个正在创建且未出错的实例。

对于抢占式实例组,如果没有抢占式容量,则创建操作将失败,并显示错误:ZONE_RESOURCE_POOL_EXHAUSTED。要查看过去的抢占事件,请参阅检测实例是否被抢占

删除托管实例组

当您使用 Google Cloud Platform Console 或 gcloud 删除托管实例组后,组中的所有实例和任何附加的自动调节程序也将被删除。如果您必须保留此托管实例组中的某些实例,请先放弃实例,以将这些实例从组中移除。然后再删除(可使用 delete 命令)托管实例组。

在使用 API 删除托管实例组之前,您必须另外先发出请求来删除任何附加的自动调节程序。

您可以使用 Google Cloud Platform Consolegcloud compute 工具API 删除整个托管实例组及其实例。

Console

  1. 转到 GCP Console 中的“实例组”页面。

    转到“实例组”页面

  2. 在列表中选择一个或多个要删除的组。
  3. 点击删除以删除相应托管实例组及其所有实例。

gcloud

使用 instance-groups managed delete 子命令。

gcloud compute instance-groups managed delete [INSTANCE_GROUP] \
    --zone [ZONE]

API

构建一个向 instanceGroupManagers 服务发出的 DELETE 请求,并指定要删除的托管实例组的名称。

DELETE https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]

创建抢占式实例组

您可以使用托管实例组快速创建多个抢占式实例,这样可以降低托管实例组中实例的成本。例如,您可以创建一组抢占式实例,使用这些实例运行批处理任务,然后在任务完成时删除该组。

要创建一组抢占式实例,请在实例模板中设置抢占式选项,然后使用该模板创建托管实例组。

Console

  1. 转到 GCP Console 中的“实例模板”页面。

    转到“实例模板”页面

  2. 点击新建实例模板
  3. 根据需要填写实例模板的属性。
  4. 点击显示高级选项以展开可用性政策部分。
  5. 抢占设置为开启
  6. 点击创建以创建模板。
  7. 使用此模板创建托管实例组

gcloud

gcloud compute 中,使用 instance-templates create 命令创建实例模板。请记得指定 --preemptible 标志。

gcloud compute instance-templates create [INSTANCE_TEMPLATE] \
    --preemptible

创建实例模板后,使用该模板来创建托管实例组

API

使用 instanceTemplates().insert 方法创建新实例模板。在 scheduling 下方添加 preemptible 属性并将其设置为 true

{
"name": "[INSTANCE_TEMPLATE]",
"properties": {
  "machineType": "zones/[ZONE]/machineTypes/[MACHINE_TYPE]",
  "networkInterfaces": [
    {
      "network": "global/networks/default",
      "accessConfigs":
      [
        {
          "name": "external-IP",
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "scheduling":
  {
    "preemptible": true
  },
  "disks":
  [
    {
      "type": "PERSISTENT",
      "boot": true,
      "mode": "READ_WRITE",
      "initializeParams":
      {
        "sourceImage": "projects/debian-cloud/global/images/family/debian-9"
      }
    }
  ]
  }
}

创建实例模板后,使用该模板来创建托管实例组

将托管实例组添加到负载平衡器

Google Cloud Platform 负载平衡功能使用托管和非托管的实例组来处理流量。根据您正在使用的负载平衡器的类型,您可以将实例组添加到目标池或后端服务。要详细了解托管实例组和负载平衡,请参阅实例组概览

将托管实例组添加到后端服务

若要创建 HTTP(S)、内部或 SSL 负载平衡器,必须使用后端服务。后端服务包含多个单独的后端,每个后端包含一个实例组(托管或非托管)。由于实例组中的实例会响应来自负载平衡器的流量,后端服务可借此了解可以使用哪些实例、可以处理多少流量,以及当前正在处理多少流量。此外,后端服务会监控运行状况检查,并且不会向运行状况不佳的实例发送新连接。

有关将实例组添加到后端服务的说明,请参阅将实例组添加到后端服务

将托管实例组添加到目标池

目标池是包含一个或多个虚拟机实例的对象。目标池可用于网络负载平衡环境。在该环境中,网络负载平衡器会将用户请求转发到附加的目标池。属于该目标池的实例会处理这些请求并返回响应。您可以将托管实例组添加到目标池,这样一来,当您在实例组中添加或移除实例时,目标池也会自动更新并应用这些更改。

目标池必须存在,这样您才能将托管实例组添加到目标池。如需了解详情,请参阅关于添加目标池的文档。

要将现有托管实例组添加到目标池,请按照以下说明操作。如此操作后,属于托管实例组的所有虚拟机实例都会被添加到目标池。

Console

  1. 转到 GCP Console 中的“目标池”页面。

    转到“目标池”页面

  2. 点击您要向其中添加实例组的目标池。
  3. 点击修改按钮。
  4. 向下滚动到虚拟机实例部分,然后点击选择实例组
  5. 从下拉菜单中选择一个实例组。
  6. 保存更改。

gcloud

gcloud 命令行工具中,使用 set-target-pools 命令:

gcloud compute instance-groups managed set-target-pools [INSTANCE_GROUP] \
    --target-pools [TARGET_POOL,..] [--zone ZONE]

其中:

  • [INSTANCE_GROUP] 是实例组的名称。
  • [TARGET_POOL] 是要向其中添加此实例组的一个或多个目标池的名称。
  • [ZONE] 是实例组的地区。

API

在 API 中,向以下 URI 发出 POST 请求:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers/[INSTANCE_GROUP]/setTargetPools

其中:

  • [PROJECT_ID] 是此请求的项目 ID。
  • [ZONE] 是实例组的地区。
  • [INSTANCE_GROUP] 是实例组的名称。

请求正文应包含您要向其中添加此组的目标池的 URI 列表。例如:

{
  "targetPools": [
    "regions/us-central1/targetPools/example-targetpool-1",
    "regions/us-central1/targetPools/example-targetpool-2"
  ]
}

将已命名端口分配给托管实例组

已命名端口是键/值对,用于表示服务名称和运行该服务的端口号。负载平衡服务使用这些已命名端口将流量引向各个实例上的特定端口。例如,如果您将已命名端口设置为 http:80,然后将后端服务配置为将流量发送到名为 http 的端口,则负载平衡会将流量转发到属于实例组的各个实例的端口 80。

已命名端口是负载平衡使用的简单元数据。但是,已命名端口并未控制 Compute Engine 中的网络或防火墙资源。

您可以为每个服务名称分配多个端口,并为每个端口分配多个服务名称。但是请注意,指定的后端服务一次只能将流量转发到一个已命名端口。

Console

  1. 转到 GCP Console 中的“实例组”页面。

    转到“实例组”页面

  2. 点击要在其中指定所需端口的实例组的名称。此时将打开一个页面,其中包含实例组属性。
  3. 点击修改组以修改此托管实例组。
  4. 点击指定端口名称映射以展开指定端口选项。
  5. 点击添加一项,然后根据需要输入端口名称以及要与该名称关联的端口号。如有必要,再次点击添加一项以添加更多条目。
  6. 点击保存以保存更改,并将指定端口应用到托管实例组中的实例。

gcloud

使用 set-named-ports 命令设置一个或多个已命名端口,如下所示:

gcloud compute instance-groups managed set-named-ports [INSTANCE_GROUP] \
  --named-ports [PORT_NAME]:[PORT],[PORT_NAME]:[PORT]

例如:

gcloud compute instance-groups managed set-named-ports [INSTANCE_GROUP] \
  --named-ports name1:80,name2:8080

要向每个服务名称分配多个端口或为每个服务分配多个名称,请为每个名称或端口创建多个条目。例如,向端口 102080 分配 name1。然后向端口 80 分配 name2name3。最后,向端口 9000 分配 name4

gcloud compute instance-groups managed set-named-ports [INSTANCE_GROUP] \
  --named-ports name1:10,name1:20,name1:80,\
                name2:8080,name3:8080,\
                name4:9000

使用 get-named-ports 命令检查托管实例组的指定端口分配情况,如下所示:

gcloud compute instance-groups managed get-named-ports [INSTANCE_GROUP]
NAME  PORT
name1 10
name1 20
name1 80
name2 8080
name3 8080
name4 9000

API

Instance Group Manager API 不提供 setNamedPorts API 方法,但您可以使用 Instance Group API 执行此任务。

构建一个向 Instance Group API 发出的请求并在其中包含实例组的名称。通过获取特定组的相关信息来获取实例组的当前 fingerprint 值。在请求正文中包含 fingerprint 以及一个或多个 namedPorts 值对,如下所示:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroups/[INSTANCE_GROUP]/setNamedPorts

{
 "fingerprint": "42WmSpB8rSM=",
 "namedPorts": [
  {
   "name": "[PORT_NAME]",
   "port": [PORT_NUMBER]
  },
  {
   "name": "[PORT_NAME]",
   "port": [PORT_NUMBER]
  }
 ]
}

例如:

POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts

{
 "fingerprint": "42WmSpB8rSM=",
 "namedPorts": [
  {
   "name": "name1",
   "port": 80
  },
  {
   "name": "name2",
   "port": 8080
  }
 ]
}

要将多个端口分配给每个服务名称,请为该服务名称创建多个条目。例如,您可以将端口 102080 分配给 name1。同时将端口 8080 分配给 name2

POST https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts

{
 "fingerprint": "42WmSpB8rSM=",
 "namedPorts": [
  {
   "name": "name1",
   "port": 10
  },
  {
   "name": "name1",
   "port": 20
  }
  {
   "name": "name1",
   "port": 80
  }
  {
   "name": "name2",
   "port": 8080
  }
  {
   "name": "name3",
   "port": 80
  }
  {
   "name": "name4",
   "port": 8080
  }
 ]
}

要列出已分配给托管实例组的已命名端口,请构建一个指向该组的 GET 请求,如下所示:

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

了解 instanceTemplateversions 字段

创建托管实例组时,您需要提供一个实例模板,以便托管实例组用于创建单个虚拟机实例。默认情况下,Compute Engine 描述的是在两个单独的 API 属性(顶级 instanceTemplate 属性和 versions 属性)中使用的实例模板。例如,在以下托管实例组中,请注意 instanceTemplateversions 字段已填充:

{

 "name": "example-group",
 "zone": "zones/us-central1-a",
 "instanceTemplate": "global/instanceTemplates/example-it",
 "versions": [
  {
   "name": "v3",
   "instanceTemplate": "global/instanceTemplates/example-it",
   "targetSize": {
    "calculated": 3
   }
  }
 ]...
}

Compute Engine 会自动填充顶级 instanceTemplate 字段和 versions 字段,以实现向后兼容性。我们建议您尽可能指定 versions 字段并忽略顶级 instanceTemplates 字段。但是,如果您的应用代码当前设置了顶级 instanceTemplate 字段,那么它仍然是一个有效的请求。

要详细了解托管实例组更新程序,请参阅更新托管实例组

(高级)使用托管实例组对实例模板进行金丝雀测试

您可以创建一个托管实例组,其中包含两组使用不同实例模板的虚拟机。例如,您可以创建一个包含 20 个虚拟机实例的托管实例组,其中 10 个虚拟机应在特定操作系统映像上运行,而其余的虚拟机则在其他操作系统映像上运行。借助此功能,您可以比较两个不同的实例模板版本,然后从中选择一个。

在 API 中,对以下网址发出 POST 请求:

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/instanceGroupManagers

您的请求正文应省略顶级 instanceTemplates 字段,但包含设置了两个实例模板的 versions 属性。在每个 versions 对象中,您应指定一个实例模板。对于其中一个 versions 对象,您还必须指定 targetSize。例如,以下请求会创建一个实例组,其中 50% 的虚拟机实例使用 example-template 实例模板,而其余的虚拟机实例使用 small-machine-type 模板:

{
  "baseInstanceName": "example-instances",
  "name": "example-group",
  "targetSize": 5,
  "versions":
  [
    {
      "instanceTemplate": "global/instanceTemplates/example-template",
      "targetSize":
      {
        "percent": 50
      }
    },
   {
     "instanceTemplate": "global/instanceTemplates/small-machine-type"
   }
  ]
}

托管实例组和 IAM

由属于托管实例组的 Compute Engine 执行的所有操作都是使用您项目的 Google API 服务帐号完成的。每个项目的服务帐号的电子邮件地址如下所示:

[PROJECT_ID]@cloudservices.gserviceaccount.com

其中,

  • [PROJECT_ID] 是相应项目的数字 ID。

Google API 服务帐号与默认的 Compute Engine 服务帐号不同。

因此,您应确保托管实例组使用的服务帐号具有足够的权限,可根据实例模板创建虚拟机实例。具体来说,这意味着服务帐号需要被授予 compute.instanceAdmin.v1serviceAccountUser 角色(可选),这样才能在实例组中创建和管理实例。仅当托管实例组将创建可以服务帐号的身份运行的实例时,才需要使用 serviceAccountUser 角色。另请注意,此帐号会被其他进程(包括 Deployment Manager)使用。

当您创建托管实例组或更新实例模板时,Compute Engine 会对 Google API 服务帐号进行验证,以确定:

  • 该帐号是否被授予了实例模板的 serviceAccountUser 角色(如果您计划创建可以服务帐号身份运行的实例)。
  • 该帐号是否有权使用通过实例模板引用的所有资源,例如映像、磁盘、VPC 网络和子网。

如需详细了解服务帐号,请参阅服务帐号概览

更新托管实例组中的所有实例

请参阅更新托管实例组

问题排查

我的托管实例组始终无法创建实例。这是怎么回事?

有多种问题会使得实例组无法成功创建或重新创建实例。常见的问题包括:

  • 托管实例组正在尝试创建或重新创建实例和启动永久性磁盘,但当前已存在永久性磁盘。默认情况下,在创建新实例时,会同时创建新的启动永久性磁盘。这些磁盘以实例命名。如果实例的名称为 my-awesome-instance,则磁盘的名称也将为 my-awesome-instance。如果已存在同名的永久性磁盘,则请求将失败。如需解决此问题,请删除现有的永久性磁盘。

  • 您的实例模板已针对启动永久性磁盘将 disks.autoDelete 选项设置为 false,这样在删除实例时(例如,因自动修复而删除),永久性磁盘不会随之删除。当托管实例组尝试重新创建同名的实例时,也会遇到已存在同名的永久性磁盘的问题。请删除现有的永久性磁盘以解决这个即时问题。如果您希望在删除实例的同时删除启动永久性磁盘,请更新实例模板以将 disks.autoDelete 设置为 true

  • 您的实例模板可能无效。如果您最近更新了实例模板,则可能存在会导致托管实例组无法创建实例的无效属性。造成一些属性无效的原因可能包括:

    • 您指定了不存在的资源,例如来源映像。
    • 您拼错了资源名称。
    • 您尝试挂接读写模式的其他非启动永久性磁盘。由于实例组包含多个实例,因此您要在组中的所有实例之间共享的任何其他磁盘只能挂接为只读模式。

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档