本文档介绍了如何通过将 Compute Engine 实例配置为在停止或删除时跳过客机操作系统关停,来缩短实例的关停时间。
如果您将实例配置为在停止或删除时跳过客机操作系统关停,则当实例状态变为 STOPPING 时,Compute Engine 会立即关停客机操作系统。此操作有助于加快实例停止或删除速度,从而更快地释放配额或资源。如需详细了解实例在停止或删除期间经历的阶段,包括干净利落地关停客户机操作系统的默认间隔,请参阅停止操作。
准备工作
-
如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Google Cloud 服务和 API。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:
Select the tab for how you plan to use the samples on this page:
gcloud
-
安装 Google Cloud CLI,然后使用联合身份登录 gcloud CLI。 登录后,运行以下命令来初始化 Google Cloud CLI:
gcloud init - Set a default region and zone.
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。
安装 Google Cloud CLI,然后使用联合身份登录 gcloud CLI。 登录后,运行以下命令来初始化 Google Cloud CLI:
gcloud init如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
-
所需的角色
如需获得将实例配置为跳过客机操作系统关停所需的权限,请让管理员向您授予项目的 Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) IAM 角色。
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色包含将实例配置为跳过客机操作系统关停所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
您需要具备以下权限才能将实例配置为跳过客机操作系统关停:
-
如需创建实例,请执行以下操作:
- 针对项目的
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
配置实例以跳过客机操作系统关停
如需将计算实例配置为在您停止或删除该实例时跳过客机操作系统关停,请使用以下方法之一:
在现有实例中配置客机操作系统关停
只有当计算实例处于停止 (TERMINATED) 状态时,您才能将其配置为跳过客机操作系统关停。
如需将实例配置为跳过客机操作系统关停,请选择以下选项之一:
gcloud
如果您尚未停止实例,请先停止。
如需将实例配置为跳过客机操作系统关停,请使用带有
--skip-guest-os-shutdown标志的gcloud beta compute instances set-scheduling命令:gcloud compute instances set-scheduling INSTANCE_NAME \ --skip-guest-os-shutdown \ --zone=ZONE替换以下内容:
INSTANCE_NAME:实例的名称。ZONE:实例所在的可用区。
REST
如果您尚未停止实例,请先停止。
如需将实例配置为跳过客机操作系统关停,请向
instances.setScheduling方法发出POST请求。在请求正文中,添加skipGuestOsShutdown字段并将其设置为true:POST https://compute./compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/setScheduling { "skipGuestOsShutdown": true }
如需详细了解如何更新实例,请参阅更新实例属性。
在创建实例时配置客机操作系统关停
如需创建配置为跳过客机操作系统关停的计算实例,请选择以下选项之一:
gcloud
如需创建配置为跳过客机操作系统关停的实例,请使用带有 --skip-guest-os-shutdown 标志的 gcloud compute instances create 命令:
gcloud compute instances create INSTANCE_NAME \
--machine-type=MACHINE_TYPE \
--skip-guest-os-shutdown \
--zone=ZONE
替换以下内容:
INSTANCE_NAME:实例的名称。MACHINE_TYPE:用于实例的机器类型。ZONE:您希望创建实例的可用区。
REST
如需创建配置为跳过客机操作系统关停的实例,请向 instances.insert 方法发出 POST 请求。在请求正文中,添加设置为 true 的 skipGuestOsShutdown 字段:
POST https://compute./compute/v1/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": {
"skipGuestOsShutdown": true
}
}
替换以下内容:
PROJECT_ID:您要在其中创建实例的项目的 ID。ZONE:您希望创建实例的可用区。INSTANCE_NAME:实例的名称。MACHINE_TYPE:用于实例的机器类型。IMAGE_PROJECT:映像所属的映像项目;例如debian-cloud。如需详细了解支持的映像项目,请参阅��共映像。IMAGE:指定以下其中一项:
如需详细了解如何创建实例,请参阅创建和启动 Compute Engine 实例。
在批量创建实例时配置客机操作系统关停
如需批量创建配置为跳过客机操作系统关停的计算实例,请选择以下选项之一:
gcloud
如需批量创建配置为跳过 guest 操作系统关停的实例,请使用带有 --skip-guest-os-shutdown 标志的 gcloud compute instances bulk create 命令。
例如,如需在单个可用区中批量创建使用名称模式的实例,请运行以下命令:
gcloud compute instances bulk create \
--count=COUNT \
--machine-type=MACHINE_TYPE \
--name-pattern="NAME_PATTERN" \
--skip-guest-os-shutdown \
--zone=ZONE
替换以下内容:
COUNT:要创建的实例数量。MACHINE_TYPE:用于实例的机器类型。NAME_PATTERN:实例的名称格式。如需替换实例名称中的数字序列,请使用哈希值 (#) 字符序列。例如,如果您使用instance-#作为名称模式,Compute Engine 会生成名称以instance-1、instance-2开头的实例,并持续以这种递增模式生成实例,直到达到您在COUNT中指定的实例数量。ZONE:您希望创建实例的可用区。
REST
如需批量创建配置为跳过客机操作系统关停的实例,请向 instances.bulkInsert 方法发出 POST 请求。在请求正文中,添加设置为 true 的 skipGuestOsShutdown 字段。
例如,如需在单个可用区中批量创建使用名称模式的实例,请发出 POST 请求,如下所示:
POST https://compute./compute/v1/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": {
"skipGuestOsShutdown": true
}
}
}
替换以下内容:
PROJECT_ID:您要在其中批量创建实例的项目的 ID。ZONE:您希望创建实例的可用区。COUNT:要创建的实例数量。NAME_PATTERN:实例的名称格式。如需替换实例名称中的数字序列,请使用哈希值 (#) 字符序列。例如,如果您使用instance-#作为名称模式,Compute Engine 会生成名称以instance-1、instance-2开头的实例,并持续以这种递增模式生成实例,直到达到您在COUNT中指定的实例数量。MACHINE_TYPE:用于实例的机器类型。IMAGE_PROJECT:映像所属的映像项目;例如debian-cloud。如需详细了解支持的映像项目,请参阅公共映像。IMAGE:指定以下其中一项:
如需详细了解如何批量创建实例,请参阅批量创建实例。
在创建实例模板时配置客机操作系统关停
创建实例模板并将其配置为在您停止或删除计算实例时跳过客机操作系统关停后,您可以使用该实例模板执行以下操作:
您可以配置托管式实例组 (MIG) 中的实例,以便在停止或删除时跳过客户机操作系统关停,方法如下:
如需创建配置为跳过客机操作系统关停的实例模板,请选择以下选项之一:
gcloud
如需创建配置为跳过客机操作系统关停的实例模板,请使用带有 --skip-guest-os-shutdown 标志的 gcloud compute instance-templates create 命令。
例如,如需创建指定跳过客机操作系统关停的区域级实例模板,请运行以下命令。如果您要创建全球实例模板,请使用相同的命令,但不带 --instance-template-region 标志。
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
--instance-template-region=REGION \
--machine-type=MACHINE_TYPE \
--skip-guest-os-shutdown
替换以下内容:
INSTANCE_TEMPLATE_NAME:实例模板的名称。REGION:要在其中创建实例模板的区域。MACHINE_TYPE:要在实例模板中指定的机器类型。
REST
如需创建配置为跳过客机操作系统关停的实例模板,请向以下方法之一发出 POST 请求:
如需创建全球实例模板:
instanceTemplates.insert方法如需创建区域级实例模板:
regionInstanceTemplates.insert方法
在请求正文中,添加设置为 true 的 skipGuestOsShutdown 字段。
例如,如需创建指定跳过客机操作系统关停的区域级实例模板,请发出 POST 请求,如下所示:
POST https://compute./compute/v1/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": {
"skipGuestOsShutdown": true
}
}
}
替换以下内容:
PROJECT_ID:您要在其中创建实例模板的项目的 ID。REGION:要在其中创建实例模板的区域。INSTANCE_TEMPLATE_NAME:实例模板的名称。IMAGE_PROJECT:映像所属的映像项目;例如debian-cloud。如需详细了解支持的映像项目,请参阅公共映像。IMAGE:指定以下其中一项:MACHINE_TYPE:要在实例模板中指定的机器类型。
如需详细了解如何创建实例模板,请参阅创建实例模板。
查看客机操作系统关停设置
您可以检查在停止或删除计算实例时,Compute Engine 是否会跳过客机操作系统关停。
如需查看实例中的客机操作系统关停时间,请选择以下选项之一:
gcloud
如需查看实例的详细信息以及该实例是否跳过客机操作系统关停,请使用 gcloud compute instances describe 命令:
gcloud compute instances describe INSTANCE_NAME \
--zone=ZONE
替换以下内容:
INSTANCE_NAME:实例的名称。ZONE:实例所在的可用区。
如果您将实例配置为跳过客机操作系统关停,则输出包含设置为 true 的 skipGuestOsShutdown 字段,如下例所示:
...
scheduling:
automaticRestart: true
skipGuestOsShutdown: true
onHostMaintenance: MIGRATE
preemptible: false
provisioningModel: STANDARD
...
否则,如果 skipGuestOsShutdown 字段缺失或设置为 false,则客机操作系统会使用默认关停时间。
REST
如需查看实例的详细信息以及该实例是否跳过客机操作系统关停,请向 instances.get 方法发出 GET 请求:
GET https://compute./compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME
替换以下内容:
PROJECT_ID:实例所在项目的 ID。ZONE:实例所在的可用区。INSTANCE_NAME:实例的名称。
如果您将实例配置为跳过客机操作系统关停,则输出包含设置为 true 的 skipGuestOsShutdown 字段,如下例所示:
{
...
"scheduling": {
"automaticRestart": true,
"skipGuestOsShutdown": true,
"onHostMaintenance": "MIGRATE",
"preemptible": false,
"provisioningModel": "STANDARD"
},
...
}
否则,如果 skipGuestOsShutdown 字段缺失或设置为 false,则客机操作系统会使用默认关停时间。