本文档介绍如何限制新的或现有虚拟机实例的运行时间,以及如何监控这些虚拟机的运行时间。对于托管式实例组 (MIG),请改为参阅限制 MIG 的运行时间。
限制虚拟机的运行时间时,您可以安排虚拟机在达到特定时间限制(时长或时间)时自动终止(停止或删除)。 使用时间限制可帮助优化临时工作负载;通过自动限制虚拟机运行时间,您可以最大限度地降低费用并释放配额。
如需了解如何立即停止虚拟机,请参阅停止或重启虚拟机。如需了解如何立即删除虚拟机,请参阅删除虚拟机。
准备工作
-
如需获得限制虚拟机运行时间所需的权限,请让管理员向您授予项目的 Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1
) IAM 角色。 如需详细了解如何授予角色,请参阅管理访问权限。 -
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
自动终止操作必须是停止或删除。您不能将虚拟机配置为在达到时间限制时自动暂停。
最短时间限制为 30 秒,最长时间限制为 120 天。
自动终止所需的时间最多可能比您指定的开始停止或删除虚拟机的时长或时间多 30 秒。
当虚拟机由于时间限制自动停止时,无法保留虚拟机的本地 SSD 数据。如需了解详情,请参阅停止具有本地 SSD 的虚拟机。
虚拟机的终止时间戳 (
terminationTimestamp
) 是一个只读字段(表示自动终止的计划时间),每当虚拟机存在时间限制并进入RUNNING
状态时,Compute Engine 都会自动定义该时间戳。每当虚拟机重启或恢复时,系统都会根据您设置的时间限制类型自动重新定义终止时间戳:
- 如果您为虚拟机设置了时长,则系统会通过将该时长与虚拟机的最新开始时间相加来重新计算终止时间戳。
- 如果您为虚拟机设置了时间,则终止时间戳会设置为该时间。但是,时间必须是将来的时间;否则,任何创建或重新运行虚拟机的请求都将失败,直到您更新或移除时间为止。
在 Google Cloud 控制台中,转到创建实例页面。
在可用性政策部分中,展开虚拟机预配模型高级设置。
选中为虚拟机设置时间限制复选框。 此时会显示时间限制类型字段。
在时间限制类型字段中,选择按小时(默认)以将时间限制指定为时长。在以下字段中输入时长(以小时为单位)。
在虚拟机终止时列表中,选择虚拟机运行时间达到指定时间限制时会出现什么情况:
- 如需自动停止虚拟机,请选择停止(默认)。
- 如需删除虚拟机,请选择删除。
可选:指定其他虚拟机选项。如需了解详情,请参阅创建和启动虚拟机实例。
要创建并启动该虚拟机,请点击创建。
- 如需创建在特定时长后自动终止的虚拟机,您必须添加
--max-run-duration
标志。 - 要指定终止操作,请添加
--instance-termination-action
标志。 - 配置
--discard-local-ssds-at-termination-timestamp
标志:- 如果虚拟机具有任何本地 SSD,并且终止操作 (
TERMINATION_ACTION
) 为停止 (STOP
),则必须添加--discard-local-ssds-at-termination-timestamp=true
标志。 - 否则,请省略
--discard-local-ssds-at-termination-timestamp
标志。
- 如果虚拟机具有任何本地 SSD,并且终止操作 (
VM_NAME
:新虚拟机的名称。DURATION
:您希望此虚拟机在自动终止之前运行的时长。将时长格式设置为天数、小时数、分钟数和秒数,后面分别跟d
、h
、m
和s
。例如,指定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
标志。
- 如果是 Spot 虚拟机(如果虚拟机使用
- 如需创建在特定时长后自动终止的虚拟机,您必须添加
max_run_duration
参数。 - 如需指定终止操作,请添加
instance_termination_action
参数。您必须添加instance_termination_action
参数,除非您是创建 Spot 虚拟机(将provisioning_model
参数设置为SPOT
),这种情况下默认为停止 (STOP
)。 - 配置
on_instance_stop_action
参数:- 如果虚拟机具有任何本地 SSD,并且终止操作(
instance_termination_action
参数)为停止 (STOP
),则必须将on_instance_stop_action
参数设置为 true (true
)。 - 否则,请省略
on_instance_stop_action
参数。
- 如果虚拟机具有任何本地 SSD,并且终止操作(
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"
必填字段。
- 如果是 Spot 虚拟机(如果虚拟机使用
在 Google Cloud 控制台中,转到创建实例页面。
在可用性政策部分中,展开虚拟机预配模型高级设置。
选中为虚拟机设置时间限制复选框。 此时会显示时间限制类型字段。
在时间限制类型字段中,选择按日期指定时间限制作为时间和日期。在以下字段中,点击
选择日期和时间,然后为时间限制选择日期、时间和时区。在虚拟机终止时列表中,选择虚拟机运行时间达到指定时间限制时会出现什么情况:
- 如需自动停止虚拟机,请选择停止(默认)。
- 如需删除虚拟机,请选择删除。
可选:指定其他虚拟机选项。如需了解详情,请参阅创建和启动虚拟机实例。
要创建并启动该虚拟机,请点击创建。
- 如需创建在特定时间自动终止的虚拟机,您必须添加
--termination-time
标志。 - 如需指定终止操作,请添加
--instance-termination-action
标志,该标志对于 Spot 虚拟机是可选的。 - 配置
--discard-local-ssds-at-termination-timestamp
标志:- 如果虚拟机具有任何本地 SSD 并将终止操作 (
TERMINATION_ACTION
) 设置为停止 (STOP
),则必须添加--discard-local-ssds-at-termination-timestamp=true
标志。 - 否则,请省略
--discard-local-ssds-at-termination-timestamp
标志。
- 如果虚拟机具有任何本地 SSD 并将终止操作 (
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
标志。
- 如果是 Spot 虚拟机(如果虚拟机使用
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"
必填字段。
- 如果是 Spot 虚拟机(如果虚拟机使用
在 Google Cloud 控制台中,转到虚拟机实例页面。
在名称列中,点击要更新的虚拟机的名称。
在虚拟机实例详情页面中,完成以下步骤:
- 如果虚拟机正在运行,请点击停止以停止虚拟机。
- 如需修改虚拟机,请点击 修改。
在修改实例页面上,完成以下步骤:
在可用性政策部分中,根据需要修改为虚拟机设置时间限制复选框及其下方任何字段。
如需详细了解如何配置时间限制的属性,请参阅限制新虚拟机的运行时间。
要保存更改,请点击保存。
可选:要立即开始运行虚拟机,请点击启动。
如果虚拟机正在运行,请使用
gcloud compute instances stop
命令停止虚拟机:gcloud compute instances stop VM_NAME
将
VM_NAME
替换为您要更新的虚拟机的名称。使用
gcloud compute instances set-scheduling
命令更新虚拟机的时间限制。gcloud compute instances set-scheduling VM_NAME \ --max-run-duration=DURATION \ --termination-time=TIME \ --instance-termination-action=TERMINATION_ACTION \ --discard-local-ssds-at-termination-timestamp=true
配置以下标志:
- 您必须省略
--max-run-duration
标志或--termination-time
标志,以分别将时间限制设置为时间或时长。 - 添加
--instance-termination-action
标志以设置终止操作。 - 如果虚拟机具有任何本地 SSD 并将终止操作 (
TERMINATION_ACTION
) 设置为停止 (STOP
),则必须添加--discard-local-ssds-at-termination-timestamp=true
标志。否则,请省略--discard-local-ssds-at-termination-timestamp=true
标志。
然后,替换以下内容:
VM_NAME
:您要更新的虚拟机的名称。DURATION
:您希望此虚拟机在自动终止之前运行的时长。将时长格式设置为天数、小时数、分钟数和秒数,后面分别跟d
、h
、m
和s
。例如,指定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
标志。
- 如果是 Spot 虚拟机(如果虚拟机使用
- 您必须省略
如果您希望虚拟机开始运行,请使用
gcloud compute instances start
命令启动虚拟机:gcloud compute instances start VM_NAME
将
VM_NAME
替换为虚拟机名称。如果虚拟机正在运行,请使用
instances.stop
方法停止该虚拟机:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
请替换以下内容:
使用
instances.setScheduling
方法更新虚拟机的scheduling
属性,包括虚拟机时间限制的字段。添加maxRunDuration
字段或terminationTime
字段以分别将时间限制设置为时长或时间:如需设置时长,请使用以下请求:
POST https://compute.googleapis.com/compute/v1/projects/
PROJECT_ID
/zones/ZONE
/instances/VM_NAME/setScheduling { "maxRunDuration": { "seconds": DURATION }, "instanceTerminationAction": "TERMINATION_ACTION" }如需设置时间,请使用以下请求:
POST https://compute.googleapis.com/compute/v1/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"
必填字段。
- 如果是 Spot 虚拟机(如果虚拟机使用
如果您希望虚拟机开始运行,请使用
instances.start
方法启动虚拟机:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/start
请替换以下内容:
如需了解正在运行的虚拟机何时计划自动终止,请查看虚拟机的终止时间戳:
- 查看虚拟机的详细信息。
- 在输出中,查看虚拟机的终止时间戳字段:
- 如果您使用的是 Google Cloud 控制台,请查看时长上限字段。
- 如果您使用的是 Google Cloud CLI 或 Compute Engine API,请查看
terminationTimestamp
字段。
如需验证虚拟机是否已自动终止,请查看虚拟机的操作:
- 查看虚拟机操作。
在输出中,您可以通过查找以下类型的操作来确定由时间限制导致的虚拟机操作:
compute.instances.deferredStop
表示停止的自动终止操作compute.instances.deferredDelete
表示删除的自动终止操作
了解如何进一步优化虚拟机:
详细了解自动限制虚拟机运行时间的更多选项:
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
限制
限制虚拟机的运行时间具有以下限制:
限制新虚拟机的运行时
以下部分介绍了如何在创建新虚拟机时配置时间限制。您可以将时间限制(即您希望虚拟机自动终止的时间)指定为时长 (
maxRunDuration
) 或时间 (terminationTime
)。在确定虚拟机的时间限制类型时,请考虑虚拟机可能会中断,例如由用户请求或主机事件中断。时间限制的行为因中断类型和时间限制类型而异:
设置时长
时长表示虚拟机的预期总运行时间。如需创建在运行特定的时长后自动终止的虚拟机,请使用 Google Cloud 控制台、Google Cloud CLI、Terraform 或 Compute Engine API。
控制台
gcloud
如需通过 gcloud CLI 创建虚拟机,请使用
gcloud compute instances create
命令。gcloud compute instances create VM_NAME \ --max-run-duration=DURATION \ --instance-termination-action=TERMINATION_ACTION
替换以下内容:
如需详细了解您在创建虚拟机时可以指定的其他选项,请参阅创建和启动虚拟机实例。
Terraform
如需使用 Terraform 创建虚拟机,请使用
google_compute_instance
资源。如需了解详情,请参阅
google_compute_instance
资源的 Terraform 文档。REST
如需通过 Compute Engine API 创建虚拟机,请使用
instances.insert
方法。您必须为虚拟机指定名称、机器类型和启动磁盘。如需创建在特定时长后自动终止的虚拟机,您必须添加
maxRunDuration
字段。如需指定终止操作,请添加instanceTerminationAction
字段,该字段对于 Spot 虚拟机是可选的。POST https://compute.googleapis.com/compute/v1/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" }, }请替换以下内容:
如需详细了解您在创建虚拟机时可以指定的选项,请参阅创建和启动虚拟机实例。
设置时间
时间表示您希望虚拟机终止的日期、时间和时区。如需创建在特定时间自动终止的虚拟机,请使用 Google Cloud 控制台、Google Cloud CLI 或 Compute Engine API。
控制台
gcloud
如需通过 gcloud CLI 创建虚拟机,请使用
gcloud compute instances create
命令。gcloud compute instances create VM_NAME \ --termination-time=TIME \ --instance-termination-action=TERMINATION_ACTION
替换以下内容:
如需详细了解您在创建虚拟机时可以指定的其他选项,请参阅创建和启动虚拟机实例。
REST
如需通过 Compute Engine API 创建虚拟机,请使用
instances.insert
方法。您必须为虚拟机指定名称、机器类型和启动磁盘。如需创建在特定时间自动终止的虚拟机,您必须添加
terminationTime
字段。如需指定终止操作,请添加instanceTerminationAction
字段,该字段对于 Spot 虚拟机是可选的。POST https://compute.googleapis.com/compute/v1/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" }, }请替换以下内容:
如需详细了解您在创建虚拟机时可以指定的选项,请参阅创建和启动虚拟机实例。
限制现有虚拟机的运行时
您可以通过更新虚拟机的时间表来限制现有虚拟机的运行时。如果您还不知道如何配置时间限制设置,请先查看前面的如何限制新虚拟机的运行时间部分。
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Compute Engine API 更新虚拟机的调度相关属性,如本部分所述。此方法要求您先停止虚拟机,更新其属性,然后再重启虚拟机。或者,如果您要同时更新其他虚拟机属性并自动停止和重启虚拟机,请参阅更新实例属性。
控制台
gcloud
如需使用 gcloud CLI 更新虚拟机的时间限制,请完成以下步骤:
REST
如需使用 Compute Engine API 更新虚拟机的时间限制,请完成以下步骤:
监控虚拟机的运行时
您可以使用以下选项监控具有时间限制的虚拟机的运行时间:
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-10-04。
-