限制 MIG 中虚拟机的运行时间


本文档介绍如何通过指定虚拟机的时间限制来自动终止托管式实例组 (MIG) 中的虚拟机。本文档还介绍了 MIG 中虚拟机的时间限制的运作方式。

您可以通过为 MIG 中的虚拟机指定时间限制来优化临时工作负载。当虚拟机达到其时限时,MIG 会自动终止(删除)该虚拟机。通过时间限制来限制 MIG 中虚拟机的运行时间有助于最大限度地降低费用并释放配额。

如需了解如何为独立式虚拟机指定时限,请参阅限制虚拟机的运行时间。如果您希望 MIG 根据工作负载自动添加或删除虚拟机,请参阅自动扩缩实例组

准备工作

  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以选择以下任一选项向 Compute Engine 进行身份验证:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

限制 MIG 中虚拟机的运行时

您可以通过在用于 MIG 的实例模板中指定时限来限制 MIG 中的虚拟机的运行时。当 MIG 根据模板创建虚拟机时,系统会对每个虚拟机应用时限

您可以指定以下两种类型的时间限制之一:

  • 将时间限制设为运行时长
  • 将时限设为终止时间

如需为 MIG 中的虚拟机指定时限,请按以下步骤操作:

  1. 创建具有虚拟机运行时长具有虚拟机终止时间的实例模板。

  2. 使用实例模板创建 MIG更新现有 MIG

限制

  • 您必须遵守独立式虚拟机的运行时间的限制

  • 创建实例模板以指定 MIG 中虚拟机的时间限制时,存在以下限制:

    • 您无法将终止操作设置为 STOP。MIG 仅支持 DELETE
    • 您无法使用 Spot 虚拟机。
  • 您无法在使用会限制虚拟机运行时间的实例模板的 MIG 中创建调整大小请求

  • 如果区域级 MIG 的目标分布形状为 EVEN主动式实例重新分布功能处于启用状态,则您无法限制虚拟机的运行时。

创建具有虚拟机运行时长的实例模板

如需在 MIG 中的虚拟机运行一段时间后自动终止它们,请在实例模板中设置最长运行时长 (maxRunDuration)。

控制台

  1. 在 Google Cloud 控制台中,转到实例模板页面。

    转到“实例模板”

  2. 点击创建实例模板

  3. 按如下方式选择位置

    • 如果要跨区域使用实例模板,请选择全球级
    • 如果要降低跨区域依赖性,请选择区域级
  4. 如果选择区域级,则选择要在其中创建实例模板的区域

  5. 可用性政策部分中,展开虚拟机预配模型高级设置

  6. 选中为虚拟机设置时间限制复选框。

  7. 时间限制类型字段中,选择按小时(默认)以将时间限制指定为时长。在下一个字段中输入时长(以小时为单位)。

  8. 虚拟机终止时列表中,选择删除

  9. 对于其他字段,接受默认值或根据需要进行修改。

  10. 点击创建

gcloud

使用 instance-templates create 命令。如需在特定时长后自动删除虚拟机,请添加 --max-run-duration 标志并将 --instance-termination-action 标志设置为 DELETE,如下所示:

  gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
      --max-run-duration=DURATION \
      --instance-termination-action=DELETE

替换以下内容:

  • INSTANCE_TEMPLATE_NAME:实例模板的名称。
  • DURATION:您希望虚拟机运行的时长。MIG 会在指定时长后自动删除虚拟机。

    将时长格式设置为天数、小时数、分钟数和秒数,后面分别跟 dhms。例如,指定 30m 表示 30 分钟时长,指定 1d2h3m4s 表示 1 天 2 小时 3 分钟 4 秒时长。最短时长为 30 秒 (30s),最长时长为 120 天 (120d)。

Terraform

如需使用 Terraform 创建实例模板,请使用 google_compute_instance_template 资源。如需创建在特定时长后自动删除虚拟机的实例模板,您必须添加 max_run_duration 参数,并将 instance_termination_action 参数设置为 DELETE

如需了解详情,请参阅 google_compute_instance_template 资源的 Terraform 文档

REST

使用 instanceTemplates.insert 方法。 如需在特定时长后自动删除虚拟机,请添加 maxRunDuration 字段,并将 instanceTerminationAction 字段设置为 DELETE,如下所示:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default",
        "accessConfigs": [
          {
            "name": "external-IP",
            "type": "ONE_TO_ONE_NAT"
          }
        ]
      }
    ],
    "disks": [
      {
        "type": "PERSISTENT",
        "boot": true,
        "mode": "READ_WRITE",
        "initializeParams":
        {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ]
    "scheduling": {
      "maxRunDuration":
      {
        "seconds": DURATION
      },
      "instanceTerminationAction": "DELETE"
    }
  }
}

替换以下内容:

  • PROJECT_ID:您要创建实例模板的项目 ID
  • INSTANCE_TEMPLATE_NAME:实例模板的名称。
  • MACHINE_TYPE:组中虚拟机的预定义自定义机器类型。
  • IMAGE_PROJECT:映像所属的映像项目;例如 debian-cloud
  • IMAGEIMAGE_FAMILY:指定以下其中一项:

    • IMAGE:操作系统映像的特定版本;例如 debian-10-buster-v20200309

    • IMAGE_FAMILY映像系列。此项指定最新的未弃用操作系统映像。例如,如果您指定 family/debian-10,则系统会使用 Debian 10 映像系列中的最新版本。

  • DURATION:您希望虚拟机运行的时长。MIG 会在指定时长后自动删除虚拟机。

    将时长格式设置为天数、小时数、分钟数和秒数,后面分别跟 dhms。例如,指定 30m 表示 30 分钟时长,指定 1d2h3m4s 表示 1 天 2 小时 3 分钟 4 秒时长。最短时长为 30 秒 (30s),最长时长为 120 天 (120d)。

创建具有虚拟机终止时间的实例模板

如需在特定时间自动终止 MIG 中的虚拟机,请在实例模板中设置终止时间 (terminationTime)。您可以设置 MIG 终止虚拟机的日期和时间。

控制台

  1. 在 Google Cloud 控制台中,转到实例模板页面。

    转到“实例模板”

  2. 点击创建实例模板

  3. 按如下方式选择位置

    • 如果要跨区域使用实例模板,请选择全球级
    • 如果要降低跨区域依赖性,请选择区域级
  4. 如果选择区域级,则选择要在其中创建实例模板的区域

  5. 可用性政策部分中,展开虚拟机预配模型高级设置

  6. 时间限制类型字段中,选择按日期指定时间限制作为时间和日期。在下一个字段中,点击 选择日期和时间,然后选择自动终止的日期、时间和时区。

  7. 虚拟机终止时列表中,选择删除

  8. 对于其他字段,接受默认值或根据需要进行修改。

  9. 点击创建

gcloud

使用 instance-templates create 命令。如需在特定时间自动删除虚拟机,请添加 --termination-time 标志并将 --instance-termination-action 标志设置为 DELETE,如下所示:

  gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
      --termination-time=TIME \
      --instance-termination-action=DELETE

替换以下内容:

  • INSTANCE_TEMPLATE_NAME:实例模板的名称。
  • TIME:您希望此虚拟机自动终止的时间。您指定的时间必须至少是未来 30 秒,最长是未来 120 天。将时间格式设置为 RFC 3339 时间戳

    YYYY-MM-DDTHH:MM:SSOFFSET
    

    请替换以下内容:

    • YYYY-MM-DD:采用 4 位数格式的日期,2 位数月份和 2 位数日期(用连字符分隔)。
    • HH:MM:SS:采用 24 小时制的 2 位数小时,2 位数分钟和 2 位数秒(用冒号分隔)。
    • OFFSET:采用世界协调时间 (UTC) 的偏移量格式的时区。例如,要使用太平洋标准时间 (PST),比世界协调时间 (UTC) 早 8 小时,请指定 -08:00。或者,如需不使用偏移 (UTC+0),请指定 Z

REST

使用 instanceTemplates.insert 方法。 如需在特定时间自动删除虚拟机,请添加 terminationTime 字段,并将 instanceTerminationAction 字段设置为 DELETE,如下所示:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default",
        "accessConfigs": [
          {
            "name": "external-IP",
            "type": "ONE_TO_ONE_NAT"
          }
        ]
      }
    ],
    "disks": [
      {
        "type": "PERSISTENT",
        "boot": true,
        "mode": "READ_WRITE",
        "initializeParams":
        {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ]
    "scheduling": {
      "terminationTime": TIME,
      "instanceTerminationAction": "DELETE"
    }
  }
}

替换以下内容:

  • PROJECT_ID:您要创建实例模板的项目 ID
  • INSTANCE_TEMPLATE_NAME:实例模板的名称。
  • MACHINE_TYPE:组中虚拟机的预定义自定义机器类型。
  • IMAGE_PROJECT:映像所属的映像项目;例如 debian-cloud
  • IMAGEIMAGE_FAMILY:指定以下其中一项:

    • IMAGE:操作系统映像的特定版本;例如 debian-10-buster-v20200309

    • IMAGE_FAMILY映像系列。此项指定最新的未弃用操作系统映像。例如,如果您指定 family/debian-10,则系统会使用 Debian 10 映像系列中的最新版本。

  • TIME:您希望此虚拟机自动终止的时间。您指定的时间必须至少是未来 30 秒,最长是未来 120 天。将时间格式设置为 RFC 3339 时间戳

    YYYY-MM-DDTHH:MM:SSOFFSET
    

    请替换以下内容:

    • YYYY-MM-DD:采用 4 位数格式的日期,2 位数月份和 2 位数日期(用连字符分隔)。
    • HH:MM:SS:采用 24 小时制的 2 位数小时,2 位数分钟和 2 位数秒(用冒号分隔)。
    • OFFSET:采用世界协调时间 (UTC) 的偏移量格式的时区。例如,要使用太平洋标准时间 (PST),比世界协调时间 (UTC) 早 8 小时,请指定 -08:00。或者,如需不使用偏移 (UTC+0),请指定 Z

MIG 中虚拟机的时间限制的运作方式

为 MIG 中的虚拟机指定时间限制后,MIG 将在虚拟机的终止时间戳 (terminationTimestamp) 字段中自动设置终止虚拟机的时间。

根据您指定的时间限制类型,虚拟机的终止时间戳会按如下方式设置:

  • 将时限指定为运行时长 (maxRunDuration):

    虚拟机的 terminationTimestamp = 虚拟机的最新创建或启动时间 + maxRunDuration

    您指定时长后,终止时间戳将相对于虚拟机的最新创建时间或开始时间进行设置。如果虚拟机被重新创建、重启、恢复或替换,系统会重新计算终止时间戳。MIG 中的虚拟机的终止时间戳可能会因每个虚拟机上次创建或启动的时间而异。例如,如果虚拟机已修复,系统会将修复期间虚拟机重新创建的时间与时长相加,以重新计算虚拟机的终止时间戳。

  • 将时限设为终止时间 (terminationTime):

    虚拟机的 terminationTimestamp = terminationTime

    当您指定时间时,系统会将终止时间戳设置为该时间(前提是该时间在未来)。如果终止时间已过,任何尝试创建、重启或替换虚拟机的 MIG 操作都会失败并返回错误。如需解决此类错误,您必须创建一个具有未来终止时间的新实例模板,并将该模板应用于 MIG。如果您想在新模板中使用现有模板属性,请根据现有模板创建实例模板

在虚拟机刷新期间,终止时间戳不会更改。例如,如果您将更新的中断级别设置为 REFRESH,则每当 MIG 更新虚拟机时,都会保留终止时间戳。

当您在 MIG 中暂停或停止虚拟机时,系统会自动清除终止时间戳,无论时间限制类型如何。当您恢复或启动虚拟机时,系统会根据本部分前面所述的时间限制类型重新设置终止时间戳。

设置时间限制后自动扩缩功能的运作方式

借助自动扩缩功能,您的 MIG 可以根据负载的增减自动添加或移除虚拟机。当 MIG 删除已达到终止时间戳的虚拟机时,MIG 会创建新虚拟机,以保持自动扩缩器的建议大小。新虚拟机会在指定的时间限制内运行。如果自动扩缩器建议减少虚拟机数量,则 MIG 会在虚拟机达到其时间限制之前删除虚拟机。

如果您已配置伸缩时间表,则虚拟机仅会在时间表结束或虚拟机达到其终止时间戳(以先到者为准)之前运行。

后续步骤