本文档介绍了如何在新建或现有 Compute Engine 实例中启用正常关闭功能。如需详细了解正常关停,请参阅正常关停概览。
在实例中启用正常关闭功能后,当您停止或删除实例时,可以为其客机操作系统最多留出 1 小时的时间来彻底关闭。这有助于防止可能的数据丢失或文件系统损坏。
准备工作
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 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.
-
如需创建实例,请执行以下操作:
- 针对项目的
compute.instances.create
权限 - 使用自定义映像创建虚拟机:针对映像的
compute.images.useReadOnly
权限 - 使用快照创建虚拟机:针对快照的
compute.snapshots.useReadOnly
权限 - 使用实例模板创建虚拟机:针对实例模板的
compute.instanceTemplates.useReadOnly
权限 - 为虚拟机分配旧版网络:针对项目的
compute.networks.use
权限 - 为虚拟机指定静态 IP 地址:针对项目的
compute.addresses.use
权限 - 使用旧版网络时为虚拟机分配外部 IP 地址:针对项目的
compute.networks.useExternalIp
权限 - 为虚拟机指定子网:针对项目或所选子网的
compute.subnetworks.use
权限 - 在使用 VPC 网络时为虚拟机分配外部 IP 地址:针对项目或所选子网的
compute.subnetworks.useExternalIp
权限 - 为虚拟机设置虚拟机实例元数据:针对项目的
compute.instances.setMetadata
权限 - 为虚拟机设置标记:针对虚拟机的
compute.instances.setTags
权限 - 为虚拟机设置标签:针对虚拟机的
compute.instances.setLabels
权限 - 为虚拟机设置要使用的服务账号:针对虚拟机的
compute.instances.setServiceAccount
权限 - 为虚拟机创建新磁盘:针对项目的
compute.disks.create
权限 - 以只读或读写模式挂接现有磁盘:针对磁盘的
compute.disks.use
权限 - 以只读模式挂接现有磁盘:针对磁盘的
compute.disks.useReadOnly
权限
- 针对项目的
- 如需创建实例模板:针对项目的
compute.instanceTemplates.create
权限 -
如需在现有实例中启用正常关闭功能,请执行以下操作:
在实例上执行
compute.instances.update
在 Google Cloud 控制台中,前往虚拟机实例页面。
在名称列中,点击要为其启用正常关闭的实例的名称。
实例的详情页面随即打开。
点击
修改。在管理部分中,执行以下操作:
选中正常关停虚拟机复选框。
可选:如需指定自定义正常关闭期限,请在时长上限字段中指定时长。
点击保存。
INSTANCE_NAME
:实例的名称。ZONE
:实例所在的区域。创建一个空的 JSON 文件。
如需查看现有实例的属性,请向 Beta 版
instances.get
方法发出GET
请求:GET https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME
替换以下内容:
PROJECT_ID
:实例所在项目的 ID。ZONE
:实例所在的区域。INSTANCE_NAME
:现有实例的名称。
在您在上一步中创建的空 JSON 文件中,执行以下操作:
输入
GET
请求输出中的实例配置详细信息。在
scheduling
字段中,添加gracefulShutdown
字段,如下所示:{ ... "scheduling": { ... "gracefulShutdown": { "enabled": true } }, ... }
(可选)如需指定自定义正常关闭期限,请添加
maxDuration
字段:{ ... "scheduling": { ... "gracefulShutdown": { ... "enabled": true, "maxDuration": { "seconds": "MAX_DURATION" } } }, ... }
将
MAX_DURATION
替换为正常关闭期的时长(以秒为单位)。该值必须介于1
到3600
(3,600 秒,即 1 小时)之间。
如需更新实例并重启它,请向 Beta 版
instances.update
方法发出PUT
请求。在请求中,执行以下操作:在请求网址中添加
mostDisruptiveAllowedAction
查询参数并设置为RESTART
。在请求正文中,添加您在上一步中创建和更新的 JSON 文件中的实例属性。
用于更新实例的
PUT
请求类似于以下内容:PUT https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME?mostDisruptiveAllowedAction=RESTART { ... "scheduling": { ... "gracefulShutdown": { "enabled": true } }, ... }
在 Google Cloud 控制台中,前往虚拟机实例页面。
点击创建实例。
创建实例页面即会打开。
为该实例指定名称。
指定要在其中创建实例的区域和可用区。
为实例指定机器类型。
在导航菜单中,点击高级。
展开
虚拟机预配模型高级设置部分,然后执行以下操作:选中正常关停虚拟机复选框。
可选:如需指定自定义正常关闭期限,请在时长上限字段中指定时长。
点击创建。
INSTANCE_NAME
:实例的名称。MACHINE_TYPE
:要用于实例的机器类型。ZONE
:要在其中创建实例的区域。PROJECT_ID
:要在其中创建实例的项目的 ID。ZONE
:要在其中创建实例的区域。INSTANCE_NAME
:实例的名称。MACHINE_TYPE
:实例的机器类型。IMAGE_PROJECT
:映像所属的映像项目;例如debian-cloud
。如需详细了解支持的映像项目,请参阅公共映像。IMAGE
:指定以下其中一项:COUNT
:要创建的实例数量。MACHINE_TYPE
:实例的机器类型。NAME_PATTERN
:实例的名称模式。如需替换实例名称中的数字序列,请使用哈希值 (#
) 字符序列。例如,使用instance-#
作为名称模式将生成名称以instance-1
、instance-2
开头的实例,一直到由COUNT
指定的实例数量。ZONE
:要用于批量创建实例的可用区。PROJECT_ID
:要在其中批量创建实例的项目的 ID。ZONE
:要用于批量创建实例的可用区。COUNT
:要创建的实例数量。NAME_PATTERN
:实例的名称模式。如需替换实例名称中的数字序列,请使用哈希值 (#
) 字符序列。例如,使用instance-#
作为名称模式将生成名称以instance-1
、instance-2
开头的实例,一直到由COUNT
指定的实例数量。MACHINE_TYPE
:实例的机器类型。IMAGE_PROJECT
:映像所属的映像项目;例如debian-cloud
。如需详细了解支持的映像项目,请参阅公共映像。IMAGE
:指定以下其中一项:ZONE
:要用于批量创建实例的可用区。在 Google Cloud 控制台中,打开实例模板页面。
点击创建实例模板。
系统随即会打开创建实例模板页面。
在名称字段中,输入实例模板的名称。
按如下方式选择位置:
如需通过创建区域级实例模板来减少跨区域依赖项,请执行以下操作:
选择地区级(如果尚未选择)。
在区域字段中,选择要在其中创建实例模板的区域。
否则,如需跨区域使用实例模板,请选择全球级。
在机器配置部分中,指定机器类型。
展开
虚拟机预配模型高级设置部分,然后执行以下操作:选中正常关停虚拟机复选框。
可选:如需指定自定义正常关闭期限,请在时长上限字段中指定时长。
点击创建。
INSTANCE_TEMPLATE_NAME
:实例模板的名称。REGION
:要在其中创建实例模板的区域。MACHINE_TYPE
:使用实例模板创建的实例的机器类型。如需创建全球实例模板:Beta 版
instanceTemplates.insert
方法。如需创建区域级实例模板:Beta 版
regionInstanceTemplates.insert
方法。PROJECT_ID
:要在其中创建实例模板的项目的 ID。REGION
:要创建实例模板的区域。INSTANCE_TEMPLATE_NAME
:实例模板的名称。IMAGE_PROJECT
:映像所属的映像项目;例如debian-cloud
。如需详细了解支持的映像项目,请参阅公共映像。IMAGE
:指定以下其中一项:MACHINE_TYPE
:使用实例模板创建的实例的机器类型。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
所需的角色
如需获得在计算实例中启用正常关闭功能所需的权限,请让管理员向您授予项目的 Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1
) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。此预定义角色包含在计算实例中启用正常关闭所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需在计算实例中启用正常关闭功能,您需要具备以下权限:
启用安全关停
如需在计算实例中启用正常关闭功能,请使用以下方法之一:
在现有实例中启用正常关闭
您可以在现有计算实例中启用正常关闭,而无需停止或重启该实例。默认的正常关闭时长为 10 分钟,但您可以指定 1 秒到 1 小时之间的自定义关闭时长。
如需在现有实例中启用正常关闭功能,请选择以下选项之一:
控制台
gcloud
如需在现有实例中启用正常关闭功能,请使用带有
--graceful-shutdown
标志的gcloud beta compute instances update
命令:gcloud beta compute instances update INSTANCE_NAME \ --graceful-shutdown \ --zone=ZONE
替换以下内容:
(可选)如需指定自定义正常关闭期限,请添加
--graceful-shutdown-max-duration
标志:gcloud beta compute instances update INSTANCE_NAME \ --graceful-shutdown \ --graceful-shutdown-max-duration=MAX_DURATION \ --zone=ZONE
将
MAX_DURATION
替换为关闭时段的持续时间。该值的格式必须为小时数、分钟数或秒数,后面分别跟h
、m
和s
。例如,指定1h
表示 1 小时,或指定20m10s
表示 20 分钟 10 秒。REST
如需详细了解如何更新实例的属性,请参阅更新实例属性。
在创建实例时启用安全关闭
创建启用了正常关停功能的计算实例时,默认关停时段为 10 分钟。您还可以选择指定 1 秒到 1 小时之间的自定义关机时长。
如需创建已启用正常关闭的实例,请选择以下选项之一:
控制台
gcloud
如需创建启用了正常关闭的实例,请使用带有
--graceful-shutdown
标志的gcloud beta compute instances create
命令:gcloud beta compute instances create INSTANCE_NAME \ --graceful-shutdown \ --machine-type=MACHINE_TYPE \ --zone=ZONE
替换以下内容:
(可选)如需指定自定义正常关闭期限,请添加
--graceful-shutdown-max-duration
标志:gcloud beta compute instances create INSTANCE_NAME \ --graceful-shutdown \ --graceful-shutdown-max-duration=MAX_DURATION \ --machine-type=MACHINE_TYPE \ --zone=ZONE
将
MAX_DURATION
替换为正常关闭期的时长。该值的格式必须为小时数、分钟数或秒数,后面分别跟h
、m
和s
。例如,指定1h
表示 1 小时,或指定20m10s
表示 20 分钟 10 秒。REST
如需创建已启用正常关闭的实例,请向
beta.instances.insert
方法发出POST
请求。在请求正文中,添加gracefulShutdown
字段:POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances { "name": "INSTANCE_NAME", "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE", "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "networkInterfaces": [ { "network": "global/networks/default" } ], "scheduling": { "gracefulShutdown": { "enabled": true } } }
替换以下内容:
(可选)如需指定自定义正常关闭期限,请在请求正文中添加
maxDuration
字段:POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances { "name": "INSTANCE_NAME", "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE", "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "networkInterfaces": [ { "network": "global/networks/default" } ], "scheduling": { "gracefulShutdown": { "enabled": true, "maxDuration": { "seconds": "MAX_DURATION" } } } }
将
MAX_DURATION
替换为正常关闭期的时长(以秒为单位)。该值必须介于1
到3600
(3,600 秒,即 1 小时)之间。如需了解创建实例时的更多配置选项,请参阅创建和启动 Compute Engine 实例。
在批量创建实例时启用安全关闭
当您批量创建启用了正常关停功能的计算实例时,默认关闭时段为 10 分钟。您还可以选择指定 1 秒到 1 小时之间的自定义关机时长。
如需批量创建已启用正常关闭的实例,请选择以下选项之一:
gcloud
如需批量创建启用了正常关闭功能的实例,请将
gcloud beta compute instances bulk create
命令与--graceful-shutdown
标志结合使用。例如,如需在单个可用区中批量创建实例并为实例指定名称模式,请运行以下命令:
gcloud beta compute instances bulk create \ --count=COUNT \ --graceful-shutdown \ --machine-type=MACHINE_TYPE \ --name-pattern="NAME_PATTERN" \ --zone=ZONE
替换以下内容:
(可选)如需指定自定义正常关闭期限,请添加
--graceful-shutdown-max-duration
标志:gcloud beta compute instances bulk create \ --count=COUNT \ --graceful-shutdown \ --graceful-shutdown-max-duration=MAX_DURATION \ --machine-type=MACHINE_TYPE \ --name-pattern="NAME_PATTERN" \ --zone=ZONE
将
MAX_DURATION
替换为正常关闭期的时长。该值的格式必须为小时数、分钟数或秒数,后面分别跟h
、m
和s
。例如,指定1h
表示 1 小时,或指定20m10s
表示 20 分钟 10 秒。REST
如需批量创建启用了正常关停的实例,请向 Beta 版
instances.bulkInsert
方法发出POST
请求。在请求正文中,包含gracefulShutdown
字段。例如,如需在单个可用区中批量创建实例并为实例指定名称模式,请发出
POST
请求,如下所示:POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/bulkInsert { "count": COUNT, "namePattern": "NAME_PATTERN", "instanceProperties": { "machineType": "MACHINE_TYPE", "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "networkInterfaces": [ { "network": "global/networks/default" } ], "scheduling": { "gracefulShutdown": { "enabled": true } } } }
替换以下内容:
(可选)如需指定自定义正常关闭期限,请在请求正文中添加
maxDuration
字段:POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/bulkInsert { "count": COUNT, "namePattern": "NAME_PATTERN", "instanceProperties": { "machineType": "MACHINE_TYPE", "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "networkInterfaces": [ { "network": "global/networks/default" } ], "scheduling": { "gracefulShutdown": { "enabled": true, "maxDuration": { "seconds": "MAX_DURATION" } } } } }
将
MAX_DURATION
替换为正常关闭期的时长(以秒为单位)。该值必须介于1
到3600
(3,600 秒,即 1 小时)之间。如需了解批量创建实例时的更多配置选项,请参阅批量创建虚拟机。
在创建实例模板时启用正常关闭
创建启用了正常关停的实例模板时,默认关闭时段为 10 分钟。您还可以选择指定 1 秒到 1 小时之间的自定义关机时长。
使用实例模板创建的所有计算实例都启用了正常关闭功能。
如需创建已启用正常关闭的实例模板,请选择以下选项之一:
控制台
gcloud
如需创建启用了正常关闭的实例模板,请将
gcloud beta compute instance-templates create
命令与--graceful-shutdown
标志结合使用。例如,如需创建已启用优雅关闭功能的区域实例模板,请运行以下命令:
gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \ --graceful-shutdown \ --instance-template-region=REGION \ --machine-type=MACHINE_TYPE
替换以下内容:
(可选)如需指定自定义正常关闭期限,请添加
--graceful-shutdown-max-duration
标志。gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \ --graceful-shutdown \ --graceful-shutdown-max-duration=MAX_DURATION \ --instance-template-region=REGION \ --machine-type=MACHINE_TYPE
将
MAX_DURATION
替换为关闭时段的持续时间。该值的格式必须为小时数、分钟数或秒数,后面分别跟h
、m
和s
。例如,指定1h
表示 1 小时,或指定20m10s
表示 20 分钟 10 秒。REST
如需创建已启用正常关闭的实例模板,请向以下方法之一发出
POST
请求:例如,如需创建已启用优雅关闭功能的区域实例模板,请发出
POST
请求,如下所示:POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceTemplates { "name": "INSTANCE_TEMPLATE_NAME", "properties": { "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "machineType": "MACHINE_TYPE", "networkInterfaces": [ { "network": "global/networks/default" } ], "scheduling": { "gracefulShutdown": { "enabled": true } } } }
替换以下内容:
(可选)如需指定自定义正常关闭期限,请在请求正文中添加
maxDuration
字段。POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/instanceTemplates { "name": "INSTANCE_TEMPLATE_NAME", "properties": { "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "machineType": "MACHINE_TYPE", "networkInterfaces": [ { "network": "global/networks/default" } ], "scheduling": { "gracefulShutdown": { "enabled": true, "maxDuration": { "seconds": "MAX_DURATION" } } } } }
将
MAX_DURATION
替换为关机时长的时长(以秒为单位)。该值必须介于1
到3600
(3,600 秒,即 1 小时)之间。如需了解创建实例模板时的更多配置选项,请参阅创建实例模板。
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-03-04。
-