缩短 Compute Engine 实例关停时间


本文档介绍了如何通过将 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

    1. 安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:

      gcloud init

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

    2. Set a default region and zone.

    REST

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

      安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:

      gcloud init

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

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

所需的角色

如需获得将实例配置为跳过 guest 操作系统关停所需的权限,请让管理员向您授予项目的 Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含将实例配置为跳过客机操作系统关停所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

您需要具备以下权限才能将实例配置为跳过 guest 操作系统关停:

  • 如需创建实例,请执行以下操作:
    • 针对项目的 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

  1. 如果您尚未停止实例,请先停止。

  2. 如需将实例配置为跳过客机操作系统关停,请使用带有 --skip-guest-os-shutdown 标志的 gcloud beta compute instances set-scheduling 命令

    gcloud beta compute instances set-scheduling INSTANCE_NAME \
        --skip-guest-os-shutdown \
        --zone=ZONE
    

    替换以下内容:

    • INSTANCE_NAME:实例的名称。

    • ZONE:实例所在的可用区。

REST

  1. 如果您尚未停止实例,请先停止。

  2. 如需将实例配置为跳过客机操作系统关停,请向 Beta 版 instances.setScheduling 方法发出 POST 请求。在请求正文中,添加 skipGuestOsShutdown 字段并将其设置为 true

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/setScheduling
    
    {
      "skipGuestOsShutdown": true
    }
    

如需详细了解如何更新实例,请参阅更新实例属性

在创建实例时配置客机操作系统关停

如需创建配置为跳过 Guest 操作系统关停的计算实例,请选择以下选项之一:

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 请求。在请求正文中,添加设置为 trueskipGuestOsShutdown 字段:

POST https://compute.googleapis.com/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:指定以下其中一项:

    • 操作系统映像的特定版本,例如 debian-12-bookworm-v20240617

    • 映像系列,其格式必须为 family/IMAGE_FAMILY。此值指定最新的未弃用操作系统映像。例如,如果您指定 family/debian-12,Compute Engine 会使用 Debian 12 映像系列中的最新版本。如需详细了解如何使用映像系列,请参阅映像系列最佳实践

如需详细了解如何创建实例,请参阅创建和启动 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-1instance-2 开头的实例,并以这种递增模式持续生成实例,直到达到您在 COUNT 中指定的实例数量。

  • ZONE:您希望创建实例的可用区。

REST

如需批量创建配置为跳过客机操作系统关停的实例,请向 instances.bulkInsert 方法发出 POST 请求。在请求正文中,添加设置为 trueskipGuestOsShutdown 字段。

例如,如需在单个可用区中批量创建使用名称模式的实例,请发出 POST 请求,如下所示:

POST https://compute.googleapis.com/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-1instance-2 开头的实例,并以这种递增模式持续生成实例,直到达到您在 COUNT 中指定的实例数量。

  • MACHINE_TYPE:用于实例的机器类型。

  • IMAGE_PROJECT:映像所属的映像项目;例如 debian-cloud。如需详细了解支持的映像项目,请参阅公共映像

  • IMAGE:指定以下其中一项:

    • 操作系统映像的特定版本,例如 debian-12-bookworm-v20240617

    • 映像系列,其格式必须为 family/IMAGE_FAMILY。此值指定最新的未弃用操作系统映像。例如,如果您指定 family/debian-12,Compute Engine 会使用 Debian 12 映像系列中的最新版本。如需详细了解如何使用映像系列,请参阅映像系列最佳实践

如需详细了解如何批量创建实例,请参阅批量创建实例

在创建实例模板时配置客机操作系统关停

创建实例模板并将其配置为在您停止或删除计算实例时跳过客机操作系统关停后,您可以使用该实例模板执行以下操作:

如需创建配置为跳过 guest 操作系统关停的实例模板,请选择以下选项之一:

gcloud

如需创建配置为跳过 guest 操作系统关停的实例模板,请使用带有 --skip-guest-os-shutdown 标志的 gcloud compute instance-templates create 命令

例如,如需创建指定跳过 guest 操作系统关停的区域级实例模板,请运行以下命令。如果您要创建全球实例模板,请使用相同的命令,但不带 --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

如需创建配置为跳过 guest 操作系统关停的实例模板,请向以下方法之一发出 POST 请求:

在请求正文中,添加设置为 trueskipGuestOsShutdown 字段。

例如,如需创建指定跳过 guest 操作系统关停的区域级实例模板,请发出 POST 请求,如下所示:

POST https://compute.googleapis.com/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:指定以下其中一项:

    • 操作系统映像的特定版本,例如 debian-12-bookworm-v20240617

    • 映像系列,其格式必须为 family/IMAGE_FAMILY。此项指定最新的未弃用操作系统映像。例如,如果您指定 family/debian-12,则系统会使用 Debian 12 映像系列中的最新版本。如需详细了解如何使用映像系列,请参阅映像系列最佳实践

  • MACHINE_TYPE:要在实例模板中指定的机器类型。

如需详细了解如何创建实例模板,请参阅创建实例模板

查看客机操作系统关停设置

您可以检查在停止或删除计算实例时,Compute Engine 是否会跳过客机操作系统关停。

如需查看实例中的客机操作系统关停时间,请选择以下选项之一:

gcloud

如需查看实例的详细信息以及实例是否跳过 guest 操作系统关机,请使用 gcloud compute instances describe 命令

gcloud compute instances describe INSTANCE_NAME \
    --zone=ZONE

替换以下内容:

  • INSTANCE_NAME:实例的名称。

  • ZONE:实例所在的可用区。

如果您将实例配置为跳过客机操作系统关停,则输出包含设置为 trueskipGuestOsShutdown 字段,如下例所示:

...
scheduling:
  automaticRestart: true
  skipGuestOsShutdown: true
  onHostMaintenance: MIGRATE
  preemptible: false
  provisioningModel: STANDARD
...

否则,如果 skipGuestOsShutdown 字段缺失或设置为 false,则 guest 操作系统会使用默认关机时间

REST

如需查看实例的详细信息以及该实例是否跳过 guest 操作系统关机,请向 instances.get 方法发出 GET 请求:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME

替换以下内容:

  • PROJECT_ID:实例所在项目的 ID。

  • ZONE:实例所在的可用区。

  • INSTANCE_NAME:实例的名称。

如果您将实例配置为跳过客机操作系统关停,则输出包含设置为 trueskipGuestOsShutdown 字段,如下例所示:

{
  ...
  "scheduling": {
    "automaticRestart": true,
    "skipGuestOsShutdown": true,
    "onHostMaintenance": "MIGRATE",
    "preemptible": false,
    "provisioningModel": "STANDARD"
  },
  ...
}

否则,如果 skipGuestOsShutdown 字段缺失或设置为 false,则 guest 操作系统会使用默认关机时间

后续步骤