创建具有有状态磁盘的 MIG


本文档介绍如何创建代管式实例组 (MIG),以便为 MIG 的所有虚拟机保留具有给定设备名称的磁盘上的数据,即使在虚拟机重新创建时(例如自动修复、更新或重新创建 MIG 中的虚拟机时)也是如此。保留磁盘对某些工作负载(例如数据库或旧版应用)非常有用。

除了为实例组中的所有虚拟机保留磁盘之外,您还可以为以下各项配置有状态 MIG:

  • 您可以添加和保留特定于实例的磁盘。
  • 您可以添加和保留特定于实例的元数据。
  • 您可以添加和保留 IP 地址。

如需了解详情,请参阅有状态 MIG 概览

您还可以阅读创建 MIG 的其他基本场景

准备工作

  • 创建实例模板,以便创建代管式实例组。
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. 设置默认区域和可用区

    Terraform

    如需从本地开发环境使用本页面上的 Terraform 示例,请安装并初始化 gcloud CLI,然后使用用户凭据设置应用默认凭据。

    1. 安装 Google Cloud CLI。
    2. 如需初始化 gcloud CLI,请运行以下命令:

      gcloud init
    3. 为您的 Google 账号创建本地身份验证凭据:

      gcloud auth application-default login

    如需了解详情,请参阅 为本地开发环境设置身份验证

    REST

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

      安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init

限制

具有有状态配置的 MIG(有状态 MIG)具有以下限制:

  • 如果您的 MIG 采用有状态配置,则您无法使用自动扩缩功能。
  • 如果您要使用自动滚动更新,则必须将替换方法设置为 RECREATE
  • 对于有状态区域级 MIG,必须停用主动式重新分布功能(将重新分布类型设置为 NONE),以防止通过自动跨可用区重新分布删除有状态实例。
  • 如果您使用所有实例配置来替换实例模板属性,则无法在任何每个实例配置中指定这些属性,同时也无法在组的所有实例配置中指定这些属性。

如需查看 MIG 限制的完整列表(因您使用的配置而异),请参阅 MIG 限制

创建具备有状态磁盘的 MIG

使用 Google Cloud 控制台gcloud CLI、Terraform, 或 REST

控制台

  1. 前往实例组页面。

    转到“实例组”

    其余步骤将自动显示在 Google Cloud 控制台中。

  2. 点击创建实例组
  3. 选择新建代管式实例组(有状态)选项。
  4. 为实例组指定名称和(可选)说明。
  5. 为实例组选择一个实例模板或创建一个新实例模板
  6. 实例数字段中,指定该实例组所需的初始虚拟机数。
  7. 组配置下的有状态配置部分,点击要设为有状态的磁盘,然后执行以下步骤。
    1. 有状态部分中,选择
    2. 永久删除实例时列表中,选择在永久删除虚拟机时要分离磁盘还是删除磁盘。
    3. 如需保存设置,请点击完成
  8. 如需创建 MIG,请点击创建

gcloud

如需指定创建 MIG 时实例模板中的哪些磁盘应为有状态磁盘,请将 --stateful-disk 标志与 gcloud compute instance-groups managed create 命令结合使用:

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --template INSTANCE_TEMPLATE \
    --size SIZE \
    --stateful-disk device-name=DEVICE_NAME[,auto-delete=DELETE_RULE]

替换以下内容:

  • INSTANCE_GROUP_NAME:要创建的代管实例组的名称。
  • INSTANCE_TEMPLATE:创建实例时要使用的实例模板的名称。 对于区域级实例模板,您必须指定模板的完整或部分网址。完整网址的示例是 https://www.googleapis.com/compute/v1/projects/example-project/regions/us-central1/instanceTemplates/example-regional-instance-template,部分网址是 projects/example-project/regions/us-central1/instanceTemplates/example-regional-instance-template
  • SIZE:您所需的该实例组初始虚拟机数。
  • DEVICE_NAME:实例模板中指定的磁盘的设备名称。
  • DELETE_RULE:用于设置在删除虚拟机后应如何处理有状态磁盘的值。可用的选项包括:

    • never:(默认值)永不删除磁盘;而是在删除磁盘虚拟机后分离磁盘。
    • on-permanent-instance-deletion:从实例组永久删除磁盘的虚拟机实例时(例如,手动删除代管实例或减小实例组大小时),删除该磁盘。

    无论删除规则的值如何,有状态磁盘在虚拟机自动修复、更新和重新创建操作时始终会保留。

Terraform

如果您尚未创建您希望为 MIG 中的每个虚拟机指定机器类型、启动磁盘映像、网络和其他虚拟机属性的实例模板,请创建实例模板

如需指定创建 MIG 时实例模板中的哪些磁盘应为有状态,请添加 stateful_disk 组成块。以下示例会创建一个具有有状态磁盘的可用区级 MIG。如需详细了解示例中使用的资源,请参阅 google_compute_instance_group_manager 资源

resource "google_compute_instance_group_manager" "default" {
  name               = "igm-stateful-disk-basic"
  zone               = "us-central1-f"
  base_instance_name = "instance"
  target_size        = 1

  version {
    instance_template = google_compute_instance_template.default.id
  }

  stateful_disk {
    device_name = "example-disk"
    delete_rule = "NEVER"
  }

}

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

REST

如需指定创建 MIG 时实例模板中的哪些磁盘应为有状态,请将这些磁盘添加到请求正文中的 statefulPolicy 字段。对于可用区级 MIG,请使用 instanceGroupManagers.insert 方法;对于区域级 MIG,请使用 regionInstanceGroupManagers.insert 方法

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instanceGroupManagers

{
  "name": "NAME",
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/TEMPLATE"
    }
  ],
  "targetSize": SIZE,
  "statefulPolicy": {
    "preservedState": {
      "disks": {
        "DEVICE_NAME": {"autoDelete": "DELETE_RULE" },
        "DEVICE_NAME": {"autoDelete": "DELETE_RULE" }
      }
    }
  }
}

替换以下内容:

  • PROJECT:请求的项目 ID。
  • ZONE:MIG 所在的区域(适用于区域级 MIG)。
    • 对于地区级 MIG,将 zones/ZONE 替换为 regions/REGION 并指定 MIG 所在的地区。
  • NAME:要创建的 MIG 的名称。
  • TEMPLATE:创建实例时要使用的实例模板的名称。
  • SIZE:您所需的该实例组初始实例数。
  • DEVICE_NAME:实例模板中指定的磁盘的设备名称。
  • DELETE_RULE:用于设置在删除虚拟机实例后应如何处理有状态磁盘的值。可用的选项包括:

    • never:(默认值)永不删除磁盘;而是在删除磁盘虚拟机后分离磁盘。
    • on_permanent_instance_deletion:从实例组永久删除有状态磁盘的虚拟机时(例如,手动删除代管实例或减小实例组大小时),删除该有状态磁盘。

    无论删除规则的值如何,有状态磁盘在实例自动修复、更新和重新创建操作时始终会保留。

后续步骤