限制虚拟机的运行时


本文档介绍如何使用自动终止来限制新虚拟机实例或现有虚拟机实例的运行时,以及如何在随后监控这些虚拟机的运行时。

您可以通过自动限制虚拟机运行时来优化临时工作负载,这有助于最大限度地降低费用并释放配额。利用自动终止功能,您可以安排虚拟机在达到特定时间限制(时长或时间)时终止(停止或删除)。

如需详细了解如何停止虚拟机,请参阅停止和启动虚拟机。如需详细了解如何删除虚拟机,请参阅删除虚拟机

或者,如需为周期性工作负载安排虚拟机运行时,请参阅安排虚拟机启动和停止

准备工作

  • 如需获取自动终止功能所需的权限,请让管理员授予您项目的 Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) IAM 角色。如需详细了解如何授予角色,请参阅管理访问权限

    您也可以通过自定义角色或其他预定义角色来获取所需的权限。

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

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

    控制台

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

    gcloud

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

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

    REST

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

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

      gcloud init

限制

自动终止功能具有以下限制:

  • 每当虚拟机停止或暂停时,系统会自动清除自动终止。此限制旨在防止意外终止已完成运行或中断的虚拟机,然后在未更新的情况下再次启动。

  • 自动终止的最低时间限制为 30 秒,最长时间上限为 120 天。

  • 自动终止所需的时间最多可能比您指定的开始停止或删除虚拟机的时长或时间多 30 秒。

  • 您不能对旧版抢占式虚拟机使用自动终止,但是可以对 Spot 虚拟机使用自动终止。

如果您希望将虚拟机安排为停止工作不受间断影响或具有更大的最长时间限制,请改用实例时间表

限制新虚拟机的运行时

以下部分介绍了如何在创建新虚拟机时配置自动终止。

将时间限制设置为时长时间,以指定您希望终止虚拟机的时间。

设置时长

时长表示虚拟机所需的总运行时。如需创建在运行特定的时长后自动终止的虚拟机,请使用 Google Cloud 控制台、Google Cloud CLI 或 Compute Engine API。

控制台

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

    转到“创建实例”

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

  3. 如需启用自动终止,请选中为虚拟机设置时间限制复选框。此时会显示时间限制类型字段。

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

  5. 虚拟机终止时列表中,选择虚拟机运行时达到指定时间限制时会出现什么情况:

    • 如需自动停止虚拟机,请选择停止(默认)。
    • 如需删除虚拟机,请选择删除
  6. 可选:指定其他虚拟机选项。如需了解详情,请参阅创建和启动虚拟机实例

  7. 要创建并启动该虚拟机,请点击创建

gcloud

如需通过 gcloud CLI 创建虚拟机,请使用 gcloud beta compute instances create 命令。如需创建在特定时长后自动终止的虚拟机,您必须添加 --max-run-duration 标志。如需指定终止操作,请添加 --instance-termination-action 标志,该标志对于 Spot 虚拟机是可选的。

gcloud beta compute instances create VM_NAME \
    --max-run-duration=DURATION \
    --instance-termination-action=TERMINATION_ACTION

请替换以下内容:

  • VM_NAME:新虚拟机的名称
  • DURATION:您希望此虚拟机在自动终止之前运行的时长。将时长格式设置为天数、小时数、分钟数和秒数,后面分别跟 dhms。例如,指定 30m 表示 30 分钟时长,指定 1d2h3m4s 表示 1 天 2 小时 3 分钟 4 秒时长。最短时长为 30 秒 (30s),最长时长为 120 天 (120d)。
  • TERMINATION_ACTION:此虚拟机的终止操作,可以是停止 (STOP) 或删除 (DELETE)。此字段是必填字段还是具有默认值取决于虚拟机的预配形式:
    • 如果是 Spot 虚拟机(如果虚拟机使用 --provisioning-model=SPOT 标志),则 --instance-termination-action=TERMINATION_ACTION 标志是可选的。如果省略此标志,则默认终止操作是停止。
    • 否则(默认值)必须使用 --instance-termination-action=TERMINATION_ACTION 标志。

如需详细了解您在创建虚拟机时可以指定的其他选项,请参阅创建和启动虚拟机实例

REST

如需 通过 Compute Engine API 创建虚拟机,请使用 Beta 版 instances.insert 方法。您必须为虚拟机指定名称、机器类型和启动磁盘。

如需创建在特定时长后自动终止的虚拟机,您必须添加 maxRunDuration 字段。如需指定终止操作,请添加 instanceTerminationAction 字段,该字段对于 Spot 虚拟机是可选的。

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances
{
  "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "disks": [
    {
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      },
      "boot": true
    }
  ]
  "scheduling":
  {
    "maxRunDuration":
    {
      "seconds": DURATION
    },
    "instanceTerminationAction": "TERMINATION_ACTION"
  },
}

请替换以下内容:

  • PROJECT_ID:要在其中创建虚拟机的项目的 ID
  • ZONE:要在其中创建虚拟机的可用区。该可用区还必须支持要用于新虚拟机的机器类型。
  • MACHINE_TYPE:新虚拟机的预定义自定义机器类型。
  • VM_NAME:新虚拟机的名称
  • IMAGE_PROJECT包含映像的项目。例如,如果您将 family/debian-10 指定为映像,请将 debian-cloud 指定为映像项目。
  • IMAGE:新虚拟机的映像。您可以指定特定版本的公共映像或映像系列。例如,如果您将 family/debian-10 指定为映像,并将 debian-cloud 指定为映像项目,则 Compute Engine 会通过 Debian 10 映像系列中最新版本的操作系统映像创建虚拟机。
  • DURATION:您希望此虚拟机在自动终止之前运行的时长(以秒为单位)。最短时长为 30 秒 (30s),最长时长为 120 天 (120d)。
  • TERMINATION_ACTION:此虚拟机的终止操作,可以是停止 (STOP) 或删除 (DELETE)。此字段是必填字段还是具有默认值取决于虚拟机的预配形式:
    • 如果是 Spot 虚拟机(如果虚拟机使用 "provisioningModel": "SPOT" 字段),则 "instanceTerminationAction": "TERMINATION_ACTION" 字段为可选字段。如果省略此字段,则默认终止操作是停止。
    • 否则(默认值)为 "instanceTerminationAction": "TERMINATION_ACTION" 必填字段。

如需详细了解您在创建虚拟机时可以指定的选项,请参阅创建和启动虚拟机实例

设置时间

时间表示您希望虚拟机终止的日期、时间和时区。如需创建在特定时间自动终止的虚拟机,请使用 Google Cloud 控制台、Google Cloud CLI 或 Compute Engine API。

控制台

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

    转到“创建实例”

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

  3. 如需启用自动终止,请选中为虚拟机设置时间限制复选框。此时会显示时间限制类型字段。

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

  5. 虚拟机终止时列表中,选择虚拟机运行时达到指定时间限制时会出现什么情况:

    • 如需自动停止虚拟机,请选择停止(默认)。
    • 如需删除虚拟机,请选择删除
  6. 可选:指定其他虚拟机选项。如需了解详情,请参阅创建和启动虚拟机实例

  7. 要创建并启动该虚拟机,请点击创建

gcloud

如需通过 gcloud CLI 创建虚拟机,请使用 gcloud beta compute instances create 命令。如需创建在特定时间自动终止的虚拟机,您必须添加 --termination-time 标志。如需指定终止操作,请添加 --instance-termination-action 标志,该标志对于 Spot 虚拟机是可选的。

gcloud beta compute instances create VM_NAME \
    --termination-time=TIME \
    --instance-termination-action=TERMINATION_ACTION

请替换以下内容:

  • VM_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
  • TERMINATION_ACTION:此虚拟机的终止操作,可以是停止 (STOP) 或删除 (DELETE)。此字段是必填字段还是具有默认值取决于虚拟机的预配形式:

    • 如果是 Spot 虚拟机(如果虚拟机使用 --provisioning-model=SPOT 标志),则 --instance-termination-action=TERMINATION_ACTION 标志是可选的。如果省略此标志,则默认终止操作是停止。
    • 否则(默认值)必须使用 --instance-termination-action=TERMINATION_ACTION 标志。

如需详细了解您在创建虚拟机时可以指定的其他选项,请参阅创建和启动虚拟机实例

REST

如需 通过 Compute Engine API 创建虚拟机,请使用 Beta 版 instances.insert 方法。您必须为虚拟机指定名称、机器类型和启动磁盘。

如需创建在特定时间自动终止的虚拟机,您必须添加 terminationTime 字段。如需指定终止操作,请添加 instanceTerminationAction 字段,该字段对于 Spot 虚拟机是可选的。

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances
{
  "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "disks": [
    {
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      },
      "boot": true
    }
  ]
  "scheduling":
  {
    "terminationTime": "TIME",
    "instanceTerminationAction": "TERMINATION_ACTION"
  },
}

请替换以下内容:

  • PROJECT_ID:要在其中创建虚拟机的项目的 ID
  • ZONE:要在其中创建虚拟机的可用区。该可用区还必须支持要用于新虚拟机的机器类型。
  • MACHINE_TYPE:新虚拟机的预定义自定义机器类型。
  • VM_NAME:新虚拟机的名称
  • IMAGE_PROJECT包含映像的项目。例如,如果您将 family/debian-10 指定为映像,请将 debian-cloud 指定为映像项目。
  • IMAGE:新虚拟机的映像。您可以指定特定版本的公共映像或映像系列。例如,如果您将 family/debian-10 指定为映像,并将 debian-cloud 指定为映像项目,则 Compute Engine 会通过 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
  • TERMINATION_ACTION:此虚拟机的终止操作,可以是停止 (STOP) 或删除 (DELETE)。此字段是必填字段还是具有默认值取决于虚拟机的预配形式:

    • 如果是 Spot 虚拟机(如果虚拟机使用 "provisioningModel": "SPOT" 字段),则 "instanceTerminationAction": "TERMINATION_ACTION" 字段为可选字段。如果省略此字段,则默认终止操作是停止。
    • 否则(默认值)为 "instanceTerminationAction": "TERMINATION_ACTION" 必填字段。

如需详细了解您在创建虚拟机时可以指定的选项,请参阅创建和启动虚拟机实例

限制现有虚拟机的运行时

您可以通过更新虚拟机的时间表来限制现有虚拟机的运行时。如果您还不知道如何配置自动终止的设置,请考虑查看前面的如何限制新虚拟机的运行时部分。

您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Compute Engine API 更新虚拟机的时间表,如本部分所述;但这种方法要求您先停止虚拟机,再设置其时间表,然后重启虚拟机。或者,如果要一次更新多个虚拟机属性,并在设置其属性时自动停止和重启虚拟机,请参阅更新实例属性

控制台

  1. 在 Google Cloud 控制台中,转到虚拟机实例页面。

    进入“虚拟机实例”

  2. 名称列中,点击要更新的虚拟机的名称。

  3. 虚拟机实例详情页面中,完成以下步骤:

    1. 如果虚拟机正在运行,请点击停止以停止虚拟机。
    2. 如需修改虚拟机,请点击 修改
    3. 修改实例页面上,完成以下步骤:

      1. 可用性政策部分中,根据需要修改为虚拟机设置时间限制复选框及其下方任何字段。

        如需详细了解如何配置属性以自动终止,请参阅限制新虚拟机的运行时

      2. 要保存更改,请点击保存

    4. 可选:要立即开始运行虚拟机,请点击启动

gcloud

如需使用 gcloud CLI 更新虚拟机自动终止的时间表,请完成以下步骤:

  1. 如果虚拟机正在运行,请使用 gcloud compute instances stop 命令停止虚拟机:

    gcloud compute instances stop VM_NAME
    

    VM_NAME 替换为您要更新的虚拟机的名称。

  2. 使用 gcloud beta compute instances set-scheduling 命令更新虚拟机的自动终止设置。您必须添加 --max-run-duration 标志或 --termination-time 标志,以分别将时间限制设置为时长或时间:

    • 如需设置时长,请使用以下命令:

      gcloud beta compute instances set-scheduling VM_NAME \
          --max-run-duration=DURATION \
          --instance-termination-action=TERMINATION_ACTION
      
    • 如需设置时间,请使用以下命令:

      gcloud beta compute instances set-scheduling VM_NAME \
          --termination-time=TIME \
          --instance-termination-action=TERMINATION_ACTION
      

    请替换以下内容:

    • VM_NAME:您要更新的虚拟机的名称
    • DURATION:您希望此虚拟机在自动终止之前运行的时长。将时长格式设置为天数、小时数、分钟数和秒数,后面分别跟 dhms。例如,指定 30m 表示 30 分钟时长,指定 1d2h3m4s 表示 1 天 2 小时 3 分钟 4 秒时长。最短时长为 30 秒 (30s),最长时长为 120 天 (120d)。
    • 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
    • TERMINATION_ACTION:此虚拟机的终止操作,可以是停止 (STOP) 或删除 (DELETE)。此字段是必填字段还是具有默认值取决于虚拟机的预配形式:

      • 如果是 Spot 虚拟机(如果虚拟机使用 --provisioning-model=SPOT 标志),则 --instance-termination-action=TERMINATION_ACTION 标志是可选的。如果省略此标志,则默认终止操作是停止。
      • 否则(默认值)必须使用 --instance-termination-action=TERMINATION_ACTION 标志。
  3. 如果您希望虚拟机开始运行,请使用 gcloud compute instances start 命令启动虚拟机:

    gcloud compute instances start VM_NAME
    

    VM_NAME 替换为虚拟机名称。

REST

如需使用 Compute Engine API 更新虚拟机自动终止的时间表,请完成以下步骤:

  1. 如果虚拟机正在运行,请使用 instances.stop 方法停止该虚拟机:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
    

    请替换以下内容:

    • PROJECT_ID:包含该虚拟机的项目的 ID
    • ZONE:包含虚拟机的可用区
    • VM_NAME:您要更新的虚拟机的名称
  2. 更新虚拟机的 scheduling 属性,包括使用 Beta 版 instances.setScheduling 方法自动终止的字段。添加 maxRunDuration 字段或 terminationTime 字段以分别将时间限制设置为时长或时间:

    • 如需设置时长,请使用以下请求:

      POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling
      {
        "maxRunDuration":
        {
          "seconds": DURATION
        },
        "instanceTerminationAction": "TERMINATION_ACTION"
      }
      
    • 如需设置时间,请使用以下请求:

      POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling
      {
        "terminationTime": "TIME",
        "instanceTerminationAction": "TERMINATION_ACTION"
      }
      

    请替换以下内容:

    • PROJECT_ID:要在其中创建虚拟机的项目的 ID
    • ZONE:要在其中创建虚拟机的可用区。该可用区还必须支持要用于新虚拟机的机器类型。
    • MACHINE_TYPE:新虚拟机的预定义自定义机器类型。
    • VM_NAME:新虚拟机的名称
    • IMAGE_PROJECT包含映像的项目。例如,如果您将 family/debian-10 指定为映像,请将 debian-cloud 指定为映像项目。
    • IMAGE:新虚拟机的映像。您可以指定特定版本的公共映像或映像系列。例如,如果您将 family/debian-10 指定为映像,并将 debian-cloud 指定为映像项目,则 Compute Engine 会通过 Debian 10 映像系列中最新版本的操作系统映像创建虚拟机。
    • DURATION:您希望此虚拟机在自动终止之前运行的时长(以秒为单位)。最短时长为 30 秒 (30s),最长时长为 120 天 (120d)。
    • 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
    • TERMINATION_ACTION:此虚拟机的终止操作,可以是停止 (STOP) 或删除 (DELETE)。此字段是必填字段还是具有默认值取决于虚拟机的预配形式:

      • 如果是 Spot 虚拟机(如果虚拟机使用 "provisioningModel": "SPOT" 字段),则 "instanceTerminationAction": "TERMINATION_ACTION" 字段为可选字段。如果省略此字段,则默认终止操作是停止。
      • 否则(默认值)为 "instanceTerminationAction": "TERMINATION_ACTION" 必填字段。
  3. 如果您希望虚拟机开始运行,请使用 instances.start 方法启动虚拟机:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/start
    

    请替换以下内容:

    • PROJECT_ID:包含该虚拟机的项目的 ID
    • ZONE:包含虚拟机的可用区
    • VM_NAME:虚拟机的名称

监控虚拟机的运行时

如需监控虚拟机的运行时(例如,查看虚拟机在安排自动终止之前是否中断),请查看虚拟机操作。如需确定由自动终止导致的虚拟机操作,请查找以下操作类型:

  • compute.instances.deferredStop(对于停止的终止操作)
  • compute.instances.deferredDelete(用于删除的终止操作)

后续步骤