创建代管实例组

本文档介绍如何创建代管式实例组 (MIG)。MIG 是您将其作为单个实体进行控制的一组虚拟机 (VM) 实例。MIG 支持自动修复负载平衡自动扩缩自动更新有状态工作负载等功能。

您可以创建地区级 MIG 或区域级 MIG。地区级 MIG 可提供比区域级 MIG 更高的可用性,因为地区级 MIG 中的实例分布在单个地区内的多个区域中。本文档介绍如何创建区域级 MIG 或地区级 MIG。但是,地区级 MIG 具有额外的选项和注意事项。如需详细了解地区级 MIG,请参阅地区级 MIG 概览

如需了解有关实例组及其功能的概念信息,请参阅实例组概览

准备工作

限制

  • 使用地区级 MIG,您可以在一个地区中最多创建 2000 个虚拟机,其中每个区域的虚拟机数量上限为 1000 个。使用区域级 MIG,您最多可以创建 1000 个虚拟机。如果您需要更多信息,请与支持团队联系
  • 更新 MIG 时,您可以在单个请求中最多指定 1000 个虚拟机。
  • 如果您需要有状态 MIG,请查看有状态 MIG 限制

  • 如果您需要地区级 MIG,请查看地区级 MIG 限制

对无状态应用使用 MIG

您可以对无状态应用使用 MIG,无状态应用的运行不依赖底层虚拟机实例的特定状态。您的应用不应依赖于不会持久保留的虚拟机属性,例如挂接的磁盘的内容或内存中数据。如果您的应用需要保留虚拟机属性,请参阅有状态 MIG

无状态 MIG 中所有永久性磁盘的默认行为是在相应的虚拟机被删除或重新创建时随之删除或重新创建,因此您不应使用挂接的磁盘来存储无状态 MIG 中的持久性数据。如需保留您的数据,Google 建议您定期对自定义映像进行软件和配置维护,使其保持最新状态。如需保留您的数据,请使用启动脚本,并将您的应用配置为将数据集中备份到另一个位置(例如 Cloud Storage)。

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

对有状态应用使用 MIG

代管实例组还支持有状态应用。有状态 MIG 会在机器重启、重新创建、自动修复或更新后保留每个虚拟机的独有状态(虚拟机实例名称、挂接的 Persistent Disk 和/或元数据)。

将有状态 MIG 用于具有有状态数据或配置的应用,例如数据库、数据处理应用、旧式应用以及设有检查点且长时间运行的批量工作负载。

如果您要将有状态应用或集群部署到 Compute Engine,并希望通过自动修复和多区域部署来提高其可用性,或者希望通过自动滚动更新来简化和加速更新,请考虑使用有状态 MIG。

如需了解如何创建有状态 MIG 或向现有 MIG 添加有状态配置,请参阅配置有状态 MIG

创建代管式实例组

MIG 会根据您指定的实例模板和可选的有状态配置来创建每个代管式实例。每个代管式实例都是 MIG 中的数据实体,其中包含实际虚拟机实例的当前状态和预期状态。MIG 会主动确保实际虚拟机可用(即处于 RUNNING 状态),以保持应用的高可用性。

您可以通过 Google Cloud Consolegcloud compute 工具API 来创建 MIG。如果您想创建地区级 MIG,请参阅创建地区级 MIG

控制台

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

    转到“实例组”页面

  2. 点击创建实例组
  3. 输入 MIG 的名称,然后选择要在其中查找该组的区域。
  4. 组类型下方,选择代管实例组
  5. 实例模板下方,选择一个实例模板。如果没有可用的模板,请创建实例模板
  6. 指定要在组中创建的实例数。您还可以选择启用自动扩缩功能,以便该实例组根据其利用率自动添加或移除实例;或者启用自动修复功能,以便对该实例组内的虚拟机执行基于应用的运行状况检查。
  7. 点击创建以创建新组。

gcloud

使用 instance-groups managed create 子命令创建实例组:

gcloud compute instance-groups managed create instance-group-name \
    --base-instance-name base-name \
    --size size \
    --template instance-template \
    --zone zone

替换以下内容:

  • instance-group-name:此实例组的名称。
  • base-name:在此实例组中创建的虚拟机将使用的名称。由于这些虚拟机是基于通用模板创建的,因此系统会为每个虚拟机分配一个随机字符串,作为虚拟机名称的一部分。基本名称加在此随机字符串的前面。例如,如果您将基本名称设置为 example,则虚拟机名称将类似于 example-yahsexample-qtyz。如果您需要特定名称,请参阅在 MIG 中创建具有特定名称的实例
  • 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.insert 方法或 regionInstanceGroupManagers.insert 方法的 POST 请求。在请求正文中,添加实例组名称、实例组大小、实例组内虚拟机的基本名称以及实例模板的网址。

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

{
  "baseInstanceName": "base-name",
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/instance-template"
    }
  ],
  "name": "instance-group-name",
  "targetSize": size
}

替换以下内容:

  • project-id:请求的项目 ID。
  • zone:请求所在的区域
    • 对于地区级 MIG,将 zones/zone 替换为 regions/region 并指定地区。
  • instance-group-name:此实例组的名称。
  • base-name:在此实例组中创建的虚拟机将使用的名称。由于这些虚拟机是基于通用模板创建的,因此系统会为每个虚拟机分配一个随机字符串,作为虚拟机名称的一部分。基本名称加在此随机字符串的前面。例如,如果您将基本名称设置为 example,则虚拟机名称将类似于 example-yahsexample-qtyz。如果您需要特定名称,请参阅在 MIG 中创建具有特定名称的实例
  • size:实例组的大小。
  • instance-template:用于该组的实例模板。

各种政策和操作可能会影响组中的实例,具体取决于您对 MIG 进行配置和操作的方式。若要确定哪些代管实例已启动并正在运行,请参阅检查代管实例的状态

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

您可以更改代管实例组的实例模板,而不将任何更改应用于现有实例。当您发出添加或重新创建实例的请求时,代管实例组会使用新模板,但该模板不会自动更新实例组内的现有虚拟机。因此,您可以精确地控制要更新的虚拟机,不过这样会导致您的实例组包含不同的虚拟机。

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

控制台

  1. 在 Cloud 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-name \
    --template instance-template \
    --zone zone

API

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

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

{
 "instanceTemplate": "global/instanceTemplates/instance-template
}

更改实例模板后,重新创建各个实例,或使用滚动更新功能更新该实例组内的所有虚拟机。

调整代管实例组的大小

如需在 MIG 中添加实例或从 MIG 中移除虚拟机,您可以执行以下操作:

自动调整 MIG 的大小

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

手动设置 MIG 的大小

如果代管实例组尚未设置为自动扩缩,则可以手动调整组的大小以更改实例数。如果增加大小,则代管实例组会使用当前实例模板添加新实例。如果您要减小代管实例组的大小,则该实例组将删除自身所含的某些虚拟机。实例组首先会删除 currentActionDELETINGCREATINGRECREATING 的实例,然后才会删除正在运行并且无任何计划内操作的实例。

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

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

控制台

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

    转到“实例组”页面

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

gcloud

使用 resize 子命令。

gcloud compute instance-groups managed resize instance-group-name \
    --size new-size \
    --zone zone

API

构建对 resize 方法的请求。以参数形式指定新的实例组大小。

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group-name/resize?size=new-size

如果是地区级代管实例组,请将 zones/zone 替换为 regions/region

当您发出调整代管实例组大小的请求后,虚拟机会在系统可以对其进行预配或删除后立即启动或停止。此过程可能会耗费大量时间,具体取决于组内的实例数。您可以验证代管实例组中的实例状态

在调整大小期间停用创建重试模式

默认情况下,如果虚拟机实例的初始创建失败,则代管实例组会不断重试,直到成功创建虚拟机为止。但是,如果您不希望系统自动重试创建操作,可以在调整实例组大小时设置 --nocreation-retries 标志来停用创建重试模式。在此模式下,代管实例组仅尝试创建所有实例一次。如果在创建实例期间出现错误,则代管实例组会放弃此实例,将其从实例组的代管实例列表中移除,并减小代管实例组的目标大小。

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

如果您将系统设置为自动创建虚拟机组并且对虚拟机的准确数量不做要求,则停用创建重试模式特别有用。您可能希望让代管实例组的大小快速稳定下来,并能够灵活调整组内的虚拟机数量,而不是无限期地等待系统完成请求的所有实例的创建,因为配额错误或其他不相干的问题可能会导致实例的创建暂时或永久延迟。

如需在已停用创建重试模式的情况下调整代管实例组的大小,请使用 gcloud 工具API

gcloud

使用带有 --no-creation-retries 标志的 resize 子命令。

gcloud beta compute instance-groups managed resize instance-group-name --size new-size \
    --no-creation-retries \
    --zone zone

API

构建对 resizeAdvanced 方法的请求。在请求正文中指定新的实例组大小和 noCreationRetries 字段。

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

{
 "targetSize": size
 "noCreationRetries": true
}

如果是地区级代管实例组,请将 zones/zone 替换为 regions/region

您可以使用 listManagedInstances 方法查看正在创建的实例及其所处的模式。对于在停用创建重试模式下创建的实例,其 currentActionCREATING_WITHOUT_RETRIES

在 MIG 中创建具有特定名称的实例

如果您的系统依赖于特定名称,您可以创建具有这些名称的虚拟机。分配给这些代管实例的名称会在虚拟机重新创建后保留。请参阅添加具有特定名称的实例

从组中删除特定实例

您可以删除代管实例组内的个别虚拟机实例。删除实例会缩减实例组的指定 targetSize,并从虚拟机所属的任何目标池中移除该虚拟机。

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

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

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

控制台

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

    转到“实例组”页面

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

gcloud

使用 instance-groups managed delete-instances 子命令:

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

API

构建对 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"
 ]
}

如果是地区级代管实例组,请将 zones/zone 替换为 regions/region

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

放弃组中的实例

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

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

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

您可以使用 Google Cloud Consolegcloud compute 工具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 \
    --zone zone

API

构建对 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"
 ]
}

如果是地区级代管实例组,请将 zones/zone 替换为 regions/region

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

在组内重新创建实例

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

您可以使用此方法来更新选定的虚拟机,让这些虚拟机使用最新的实例模板。如果您需要重新创建代管实例组内的所有虚拟机,请改为启动滚动更新

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

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

gcloud

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

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

API

构建对 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"
 ]
}

如果是地区级代管实例组,请将 zones/zone 替换为 regions/region

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

删除代管实例组

当您删除代管实例组时,该实例组内的所有虚拟机也将随之删除。如果您必须保留此代管实例组内的某些虚拟机,请先放弃这些实例,以将虚拟机从该实例组移除。然后再删除代管实例组。

当您使用 Google Cloud Consolegcloud compute 工具删除代管实例组及其实例时,所有挂接的自动扩缩程序也会自动一并删除。但是,如果使用的是 API,则必须先发出单独的请求来通过 autoscalers.deleteregionAutoscalers.delete 删除所有挂接的自动扩缩程序。

控制台

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

    转到“实例组”页面

  2. 在列表中选择一个或多个要删除的组。
  3. 点击删除,以删除该实例组以及代管实例组内的所有虚拟机。

gcloud

使用 instance-groups managed delete 子命令。

gcloud compute instance-groups managed delete instance-group-name \
    --zone zone

API

构建对 instanceGroupManagers.delete 方法的请求。

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

如果是地区级代管实例组,请将 zones/zone 替换为 regions/region

创建抢占式实例组

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

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

控制台

  1. 在 Cloud 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"
      }
    }
  ]
  }
}

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

了解 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 字段,那么它仍然是一个有效的请求。

如需详细了解代管实例组更新程序,请参阅发布 MIG 更新

(高级)使用代管式实例组对实例模板进行 Canary 更新

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

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

POST https://compute.googleapis.com/compute/v1/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 是相应项目的数字 ID:

project-id@cloudservices.gserviceaccount.com

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

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

当您创建代管实例组或更新实例模板时,Compute Engine 会验证 Google API 服务帐号是否具有以下角色/权限:

  • serviceAccountUser 角色。如果您计划创建可以服务帐号身份运行的实例,则该角色很重要。
  • 针对通过实例模板引用的所有资源(例如映像、磁盘、VPC 网络和子网)的权限。

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

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

请参阅发布 MIG 更新

问题排查

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

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

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

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

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

    • 您指定了不存在的资源,例如来源映像。
    • 您拼错了资源名称。
    • 您尝试挂接读写模式下的其他非启动 Persistent Disk。由于实例组包含多个虚拟机,因此您要在组内的所有虚拟机之间共享的任何其他磁盘只能在只读模式下挂接。
  • 如果您已配置自动修复政策,但未配置(或未正确配置)防火墙规则以允许运行状况检查探测访问您的应用,则您的虚拟机会显示运行状况不佳,而 MIG 会持续尝试重新创建这些虚拟机。如需了解如何配置运行状况检查防火墙规则,请参阅运行状况检查设置示例

后续步骤