为计算实例设置主机维护政策


本文档介绍了如何为 Compute Engine 实例设置主机维护政策,以确定其在主机事件期间的行为。如需详细了解主机维护政策,请参阅主机维护政策

主机维护政策决定了当实例所在的主机需要维护或遇到错误时,实例的响应方式。为实例配置主机维护政策有助于您执行以下操作:

  • 最大限度地减少停机时间。

  • 防止数据丢失。

限制

对于主机维护政策,存在以下限制:

  • 使用 E2 机器类型的虚拟机实例只能在主机维护事件期间实时迁移,除非它们是 Spot 虚拟机或抢占式虚拟机。

  • 以下实例只能在主机维护事件期间停止:

    • 不支持实时迁移的实例,例如裸机实例或挂接了 GPU 的虚拟机。

    • Spot 虚拟机或抢占式虚拟机。

  • Spot 虚拟机和抢占式虚拟机在发生主机错误或按计划停止后无法自动重启。

准备工作

  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 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

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. 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 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含为计算实例设置主机维护政策所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需为计算实例设置主机维护政策,您需要具备以下权限:

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

您也可以使用自定义角色或其他预定义角色来获取这些权限。

可用的主机维护属性

您可以自定义计算实例在预定的维护或意外的主机事件期间的行为。除非您另行指定,否则在您创建实例、批量实例或实例模板时,Compute Engine 会使用默认设置。

您可以配置以下主机维护属性:

  • 维护行为 (onHostMaintenance):在实例的主机上发生可能导致实例重启的维护事件期间,实例会发生什么情况。您可以将此属性设置为以下某个值:

    • 迁移:Compute Engine 会自动将您的实例实时迁移到另一个主机。这是除 Spot 虚拟机和抢占式虚拟机以外的所有类型实例的默认设置。

    • 终止:Compute Engine 会停止您的实例。这是 Spot 虚拟机或抢占式虚拟机的默认设置,也是 Z3 实例、裸金属实例以及挂接了 GPU 或 TPU 的实例支持的唯一设置。

  • 自动重启 (automaticRestart):在实例崩溃或 Compute Engine 因计划性停止(例如维护事件)而停止实例时,实例是否重启。您可以将此属性设置为以下某个值:

    • 开启:Compute Engine 会自动重启实例。这是除 Spot 虚拟机和抢占式虚拟机以外的所有类型实例的默认设置。您可以按如下方式指定此设置:

      • 对于 Google Cloud 控制台,在高级窗格中的自动重启列表中,选择开启(推荐)

      • 对于 Google Cloud CLI,请使用 --restart-on-failure 标志。

      • 对于 REST,请将 automaticRestart 字段设置为 true

    • 关闭:Compute Engine 不会重启实例。这是 Spot 虚拟机或可抢占式虚拟机的默认设置。您可以按如下所示指定此设置:

      • 对于 Google Cloud 控制台,在高级窗格中的自动重启列表中,选择关闭

      • 对于 gcloud CLI,请使用 --no-restart-on-failure 标志。

      • 对于 REST,请将 automaticRestart 字段设置为 false

  • 本地 SSD 数据恢复超时 (localSsdRecoveryTimeout):此设置仅适用于挂接了本地 SSD 磁盘的实例。它决定了 Compute Engine 在主机发生错误后等待从本地 SSD 磁盘恢复数据的时长。默认情况下,此属性未设置。您可以将此属性设置为以下任一项:

    • 未设置:Compute Engine 使用默认等待时间:

      • 对于 Z3 虚拟机,为 6 小时

      • 对于所有其他类型的实例,1 小时

    • 一个介于 0 到 168 之间的整数:等待时长(以小时为单位)。将此属性设置为 0 表示 Compute Engine 不会恢复本地 SSD 数据,并会立即重启实例。

  • 主机错误超时 (hostErrorTimeoutSeconds):此属性决定 Compute Engine 等待重启无响应实例的时长。您必须在实例变为无响应之前配置此设置。使用足够长的时间来让实例从无响应状态恢复。您可以将此属性设置为以下某个值:

    • 未设置:Compute Engine 最长会等待 330 秒(5 分 30 秒)。这是任何类型实例的默认设置。

    • 一个介于 90 到 330 之间的整数:等待时间(以秒为单位),增量为 30 秒。

为实例设置主机维护政策

默认情况下,计算实例会为其主机维护政策使用默认设置。如需自定义这些设置,请使用以下任一方法:

为现有实例设置政策

在更改现有实例的主机维护政策之前,请确保满足以下条件:

  • 您无法更改以下类型的实例的维护行为 (onHostMaintenance):

    • 使用 E2 机器类型的虚拟机。

    • Spot 虚拟机或抢占式虚拟机。

    • 不支持实时迁移的实例。

  • 您无法将 Spot 虚拟机或抢占式虚拟机配置为在发生主机错误或按计划停止后自动重启。

如需更改已挂接本地 SSD 磁盘的实例中的本地 SSD 数据恢复超时设置,请使用 gcloud CLI 或 REST API。否则,请选择以下任一选项:

控制台

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

    进入“虚拟机实例”

  2. 名称列中,点击要更新的实例的名称。系统会显示一个页面,其中包含实例的详细信息。

  3. 点击 修改。系统随即会显示一个页面,您可以在其中修改实例属性。

  4. 管理部分中,您可以执行以下一项或多项操作:

    • 如需更改维护事件期间的行为,请从主机维护时列表中选择其他选项

    • 如需更改在重启无响应实例之前的超时期限,请从主机错误超时列表中选择其他选项。

    • 如需更改在主机出错或按计划停止后是否重启实例,请从自动重启列表中选择其他选项。

  5. 点击保存

gcloud

如需更改现有实例的主机维护政策,请将 gcloud compute instances set-scheduling 命令与以下一个或多个标志结合使用:

  • 如需更改主机维护行为,请添加 --maintenance-policy 标志。

  • 如需更改自动重启行为,请执行以下操作之一:

    • 如需自动重启实例,请添加 --restart-on-failure 标志。

    • 如需防止实例自动重启,请添加 --no-restart-on-failure 标志。

  • 如果您的实例挂接了本地 SSD 磁盘,如需更改本地 SSD 数据恢复超时设置,请添加 --local-ssd-recovery-timeout 标志。

  • 如需更改主机错误超时,请添加 --host-error-timeout-seconds 标志。

例如,如需更改主机维护行为、在主机出错或按计划停止后自动重启实例、更改本地 SSD 数据恢复超时时间,以及更改主机错误超时时间,请运行以下命令:

gcloud compute instances set-scheduling INSTANCE_NAME \
    --host-error-timeout-seconds=ERROR_DETECTION_TIMEOUT \
    --local-ssd-recovery-timeout=LOCAL_SSD_RECOVERY_TIMEOUT \
    --maintenance-policy=MAINTENANCE_POLICY \
    --restart-on-failure \
    --zone=ZONE

替换以下内容:

  • INSTANCE_NAME:实例的名称。

  • ERROR_DETECTION_TIMEOUT:Compute Engine 重启无响应实例之前等待的秒数。该值必须介于 90(90 秒)到 330(330 秒,即 5 分 30 秒)之间。只能以 30 秒为单位进行递增。

  • MAINTENANCE_POLICY:实例的维护行为。值可以是 TERMINATEMIGRATE

  • LOCAL_SSD_RECOVERY_TIMEOUT:从已挂接的本地 SSD 磁盘恢复数据所花费的小时数。该值必须介于 0(0 小时)和 168(168 小时或 7 天)之间。将此字段设置为 0 表示 Compute Engine 不会恢复本地 SSD 数据。

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

REST

如需更改现有实例的主机维护政策,请向 instances.setScheduling 方法发出 POST 请求。在请求正文中,添加以下一项或多项字段:

  • 如需更改主机维护行为,请添加 onHostMaintenance 字段。

  • 如需更改自动重启行为,请执行以下操作之一:

    • 如需自动重启实例,请添加 automaticRestart 字段。

    • 如需防止实例自动重启,请添加 automaticRestart 字段。

  • 如果您的实例挂接了本地 SSD 磁盘,如需更改本地 SSD 数据恢复超时设置,请添加 localSsdRecoveryTimeout 字段。

  • 如需更改主机错误超时设置,请添加 hostErrorTimeoutSeconds 字段。

例如,如需更改主机维护行为、在主机出错或按计划停止后自动重启实例、更改本地 SSD 数据恢复超时,以及更改主机错误超时,请按如下方式发出请求:

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

{
  "automaticRestart": AUTOMATIC_RESTART,
  "hostErrorTimeoutSeconds": ERROR_DETECTION_TIMEOUT,
  "localSsdRecoveryTimeout": LOCAL_SSD_RECOVERY_TIMEOUT,
  "onHostMaintenance": "MAINTENANCE_POLICY"
}

替换以下内容:

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

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

  • INSTANCE_NAME:实例的名称。

  • AUTOMATIC_RESTART:实例崩溃或 Compute Engine 因计划性停止而停止实例时的自动重启行为。请指定以下某个值:

    • 如需让 Compute Engine 自动重启实例,请执行以下操作:true

    • 如需防止自动重启,请执行以下操作:false

  • ERROR_DETECTION_TIMEOUT:重启无响应实例之前等待的秒数。该值必须介于 90(90 秒)到 330(330 秒,即 5 分 30 秒)之间。只能以 30 秒为单位进行递增。

  • LOCAL_SSD_RECOVERY_TIMEOUT:从已挂接的本地 SSD 磁盘恢复数据所花费的小时数。该值必须介于 0(0 小时)和 168(168 小时或 7 天)之间。将此字段设置为 0 表示 Compute Engine 不会恢复本地 SSD 数据。

  • MAINTENANCE_POLICY:实例的维护行为。值可以是 TERMINATEMIGRATE

在创建实例时设置政策

您可以在创建计算实例时设置其主机维护政策。

如需在创建已挂接本地 SSD 磁盘的实例时设置本地 SSD 数据恢复超时,请使用 gcloud CLI 或 REST API。否则,请选择以下任一选项:

控制台

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

    转到“创建实例”

  2. 名称字段中,输入实例的名称。

  3. 区域可用区字段中,指定要在哪个区域和可用区创建实例。

  4. 指定实例的机器类型。

  5. 在导航菜单中,点击高级

  6. 预配模型部分中,展开虚拟机预配模型高级设置,然后执行以下一项或多项操作:

    • 如需设置维护事件期间的行为,请在主机维护时列表中,选择以下选项之一:

      • 如需在主机维护事件期间迁移实例,请选择迁移虚拟机实例(推荐)

      • 如需在主机维护事件期间停止实例,请选择终止虚拟机实例

    • 如需设置在重启无响应实例之前的超时期限,请在主机错误超时列表中,选择以下选项之一:

      • 如需不指定主机错误超时,请选择未指定(默认)

      • 如需指定主机错误超时,请选择一个可用选项(最长为 5 分 30 秒)。

    • 如需设置实例在崩溃或停止时是否重启,请在自动重启列表中,选择以下选项之一:

      • 如需在主机出错或按计划停止后自动重启实例,请选择启用(推荐)

      • 如需防止实例在主机出错或按计划停止后自动重启,请选择关闭

  7. 点击创建

gcloud

如需在创建实例时设置其主机维护政策,请将 gcloud compute instances create 命令与以下一个或多个标志结合使用:

  • 如需设置主机维护行为,请添加 --maintenance-policy 标志。

  • 如需设置自动重启行为,请执行以下操作之一:

    • 如需自动重启实例,请添加 --restart-on-failure 标志。

    • 如需防止实例自动重启,请添加 --no-restart-on-failure 标志。

  • 如果您的实例挂接了本地 SSD 磁盘,如需设置本地 SSD 数据恢复超时,请添加 --local-ssd-recovery-timeout 标志。

  • 如需设置主机错误超时,请添加 --host-error-timeout-seconds 标志。

例如,如需设置主机维护行为、在发生主机错误或按计划停止后自动重启实例、设置本地 SSD 数据恢复超时,以及设置主机错误超时,请运行以下命令:

gcloud compute instances create INSTANCE_NAME \
    --host-error-timeout-seconds=ERROR_DETECTION_TIMEOUT \
    --local-ssd-recovery-timeout=LOCAL_SSD_RECOVERY_TIMEOUT \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=MAINTENANCE_POLICY \
    --restart-on-failure \
    --zone=ZONE

替换以下内容:

  • INSTANCE_NAME:实例的名称。

  • ERROR_DETECTION_TIMEOUT:重启无响应实例之前等待的秒数。该值必须介于 90(90 秒)到 330(330 秒,即 5 分 30 秒)之间。只能以 30 秒为单位进行递增。

  • LOCAL_SSD_RECOVERY_TIMEOUT:从已挂接的本地 SSD 磁盘恢复数据所花费的小时数。该值必须介于 0(0 小时)和 168(168 小时或 7 天)之间。将此字段设置为 0 表示 Compute Engine 不会恢复本地 SSD 数据。

  • MACHINE_TYPE:要使用的机器类型。

  • MAINTENANCE_POLICY:实例的维护行为。值可以是 TERMINATEMIGRATE。如果您要创建 Spot 虚拟机、抢占式虚拟机或不支持实时迁移的实例,则只能使用 TERMINATE

  • ZONE:要在其中创建实例的区域。

REST

如需在创建实例时设置其主机维护政策,请向 instances.insert 方法发出 POST 请求。在请求正文中,在 scheduling 字段中添加以下一个或多个字段:

  • 如需设置主机维护行为,请添加 onHostMaintenance 字段。

  • 如需设置自动重启行为,请执行以下操作之一:

    • 如需自动重启实例,请添加 automaticRestart 字段。

    • 如需防止实例自动重启,请添加 automaticRestart 字段。

  • 如果您的实例挂接了本地 SSD 磁盘,如需设置本地 SSD 数据恢复超时,请添加 localSsdRecoveryTimeout 字段。

  • 如需设置主机错误超时,请添加 hostErrorTimeoutSeconds 字段。

例如,如需设置主机维护行为、在主机出错或按计划停止后自动重启实例、设置本地 SSD 数据恢复超时,以及设置主机错误超时,请发出如下请求:

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": {
    "automaticRestart": AUTOMATIC_RESTART,
    "hostErrorTimeoutSeconds": ERROR_DETECTION_TIMEOUT,
    "localSsdRecoveryTimeout": LOCAL_SSD_RECOVERY_TIMEOUT,
    "onHostMaintenance": "MAINTENANCE_POLICY"
  }
}

替换以下内容:

  • PROJECT_ID:要在其中创建实例的项目的 ID。

  • ZONE:要在其中创建实例的区域。

  • INSTANCE_NAME:实例的名称。

  • MACHINE_TYPE:要使用的机器类型。

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

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

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

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

  • AUTOMATIC_RESTART:实例崩溃或 Compute Engine 因计划性停止而停止实例时的自动重启行为。请指定以下某个值:

    • 如需让 Compute Engine 自动重启实例,请执行以下操作:true

    • 如需防止自动重启,请执行以下操作:false

  • ERROR_DETECTION_TIMEOUT:重启无响应实例之前等待的秒数。该值必须介于 90(90 秒)到 330(330 秒,即 5 分 30 秒)之间。只能以 30 秒为单位进行递增。

  • LOCAL_SSD_RECOVERY_TIMEOUT:从已挂接的本地 SSD 磁盘恢复数据所花费的小时数。此值必须介于 0(0 小时)到 168(168 小时或 7 天)之间。将此字段设置为 0 表示 Compute Engine 不会恢复本地 SSD 数据。

  • MAINTENANCE_POLICY:实例的维护行为。值可以是 TERMINATEMIGRATE。如果您要创建的 Spot 虚拟机或实例不支持实时迁移,则只能使用 TERMINATE

如需详细了解如何创建实例,请参阅创建和启动 Compute Engine 实例

在批量创建实例时设置政策

如需在批量创建实例时设置主机维护政策,请选择以下选项之一:

gcloud

如需在批量创建实例时设置主机维护政策,请将 gcloud compute instances bulk create 命令与以下一个或多个标志结合使用:

  • 如需设置主机维护行为,请添加 --maintenance-policy 标志。

  • 如需设置自动重启行为,请执行以下操作之一:

    • 如需自动重启实例,请添加 --restart-on-failure 标志。

    • 如需防止实例自动重启,请添加 --no-restart-on-failure 标志。

  • 如果您的实例挂接了本地 SSD 磁盘,如需设置本地 SSD 数据恢复超时,请添加 --local-ssd-recovery-timeout 标志。

  • 如需设置主机错误超时,请添加 --host-error-timeout-seconds 标志。

例如,如需设置主机维护行为、在发生主机错误或按计划停止后自动重启实例、设置本地 SSD 数据恢复超时,以及设置主机错误超时,请运行以下命令。以下示例也会在单个可用区中创建实例,并为实例指定名称模式:

gcloud compute instances bulk create \
    --count=COUNT \
    --host-error-timeout-seconds=ERROR_DETECTION_TIMEOUT \
    --local-ssd-recovery-timeout=LOCAL_SSD_RECOVERY_TIMEOUT \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=MAINTENANCE_POLICY \
    --name-pattern=NAME_PATTERN \
    --restart-on-failure \
    --zone=ZONE

替换以下内容:

  • COUNT:要创建的实例数量。

  • ERROR_DETECTION_TIMEOUT:重启无响应实例之前等待的秒数。该值必须介于 90(90 秒)到 330(330 秒,即 5 分 30 秒)之间。只能以 30 秒为单位进行递增。

  • LOCAL_SSD_RECOVERY_TIMEOUT:从已挂接的本地 SSD 磁盘恢复数据所花费的小时数。该值必须介于 0(0 小时)和 168(168 小时或 7 天)之间。将此字段设置为 0 表示 Compute Engine 不会恢复本地 SSD 数据。

  • MACHINE_TYPE:要使用的机器类型。

  • MAINTENANCE_POLICY:实例的维护行为。值可以是 TERMINATEMIGRATE。如果您要创建 Spot 虚拟机、抢占式虚拟机或不支持实时迁移的实例,则只能使用 TERMINATE

  • NAME_PATTERN:实例的名称模式。如需替换实例名称中的数字序列,请使用哈希值 (#) 字符序列。例如,使用 instance-# 作为名称模式将生成名称以 instance-1instance-2 开头的实例,一直到由 COUNT 指定的实例数量。

  • ZONE:要在其中创建实例的区域。

REST

如需在批量创建实例时设置主机维护政策,请向 instances.bulkInsert 方法发出 POST 请求。在请求正文中,在 scheduling 字段中添加以下一个或多个字段:

  • 如需设置主机维护行为,请添加 onHostMaintenance 字段。

  • 如需设置自动重启行为,请执行以下操作之一:

    • 如需自动重启实例,请添加 automaticRestart 字段。

    • 如需防止实例自动重启,请添加 automaticRestart 字段。

  • 如果您的实例挂接了本地 SSD 磁盘,如需设置本地 SSD 数据恢复超时,请添加 localSsdRecoveryTimeout 字段。

  • 如需设置主机错误超时,请添加 hostErrorTimeoutSeconds 字段。

例如,如需设置主机维护行为、在发生主机错误或按计划停止后自动重启实例、设置本地 SSD 数据恢复超时,以及设置主机错误超时,请发出如下请求。以下示例也会在单个可用区中创建实例,并为实例指定名称模式:

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": {
      "automaticRestart": AUTOMATIC_RESTART,
      "hostErrorTimeoutSeconds": ERROR_DETECTION_TIMEOUT,
      "localSsdRecoveryTimeout": LOCAL_SSD_RECOVERY_TIMEOUT,
      "onHostMaintenance": "MAINTENANCE_POLICY"
    }
  }
}

替换以下内容:

  • PROJECT_ID:要在其中创建实例的项目的 ID。

  • ZONE:要在其中创建实例的区域。

  • COUNT:要创建的实例数量。

  • NAME_PATTERN:实例的名称模式。如需替换实例名称中的数字序列,请使用哈希值 (#) 字符序列。例如,使用 instance-# 作为名称模式将生成名称以 instance-1instance-2 开头的实例,一直到由 COUNT 指定的实例数量。

  • MACHINE_TYPE:要使用的机器类型。

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

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

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

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

  • AUTOMATIC_RESTART:实例崩溃或 Compute Engine 因计划性停止而停止实例时的自动重启行为。请指定以下某个值:

    • 如需让 Compute Engine 自动重启实例,请执行以下操作:true

    • 如需防止自动重启,请执行以下操作:false

  • ERROR_DETECTION_TIMEOUT:重启无响应实例之前等待的秒数。该值必须介于 90(90 秒)到 330(330 秒,即 5 分 30 秒)之间。只能以 30 秒为单位进行递增。

  • LOCAL_SSD_RECOVERY_TIMEOUT:从已挂接的本地 SSD 磁盘恢复数据所花费的小时数。此值必须介于 0(0 小时)到 168(168 小时或 7 天)之间。将此字段设置为 0 表示 Compute Engine 不会恢复本地 SSD 数据。

  • MAINTENANCE_POLICY:实例的维护行为。值可以是 TERMINATEMIGRATE。如果您要创建 Spot 虚拟机、抢占式虚拟机或不支持实时迁移的实例,则只能使用 TERMINATE

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

在创建实例模板时设置政策

您可以在创建实例模板时设置主机维护政策。您使用该模板创建的所有计算实例都会继承模板中指定的主机维护政策。

如需在创建指定本地 SSD 磁盘的实例模板时设置本地 SSD 数据恢复超时,请使用 gcloud CLI 或 REST API。否则,请选择以下任一选项:

控制台

  1. 在 Google Cloud 控制台中,前往实例模板页面。

    转到“实例模板”

  2. 点击创建实例模板。系统随即会显示创建实例模板页面。

  3. 名称字段中,输入实例模板的名称。

  4. 位置部分,选择以下选项之一:

    • 如需创建区域级实例模板,请选择区域级(推荐),然后选择要在其中创建模板的区域。

    • 如需创建全球实例模板,请选择全球

  5. 机器配置部分中,为实例模板指定机器类型。

  6. 预配模型部分中,展开虚拟机预配模型高级设置,然后执行以下一项或多项操作:

    • 如需更改维护事件期间的行为,请在主机维护时列表中,选择以下选项之一:

      • 如需在主机维护事件期间迁移实例,请选择迁移虚拟机实例(推荐)

      • 如需在主机维护事件期间停止实例,请选择终止虚拟机实例

    • 如需更改在重新启动无响应的实例之前的超时期限,请在主机错误超时列表中,选择以下选项之一:

      • 如需不指定主机错误超时,请选择未指定(默认)

      • 如需指定主机错误超时,请选择一个可用选项(最长为 5 分 30 秒)。

    • 如需更改实例崩溃或停止时是否重启,请在自动重启列表中,选择以下选项之一:

      • 如需在主机出错或按计划停止后自动重启实例,请选择启用(推荐)

      • 如需防止实例在主机出错或按计划停止后自动重启,请选择关闭

  7. 点击创建

gcloud

如需在创建实例模板时设置主机维护政策,请将 gcloud compute instance-templates create 命令与以下一个或多个标志结合使用:

  • 如需设置主机维护行为,请添加 onHostMaintenance 字段。

  • 如需设置自动重启行为,请执行以下操作之一:

    • 如需自动重启实例,请添加 automaticRestart 字段。

    • 如需防止实例自动重启,请添加 automaticRestart 字段。

  • 如果您的实例挂接了本地 SSD 磁盘,如需设置本地 SSD 数据恢复超时,请添加 localSsdRecoveryTimeout 字段。

  • 如需设置主机错误超时,请添加 hostErrorTimeoutSeconds 字段。

例如,如需设置主机维护行为、在发生主机错误或按计划停止后自动重启实例、设置本地 SSD 数据恢复超时,以及设置主机错误超时,请运行以下命令。以下示例也会创建一个区域实例模板。如需创建全球实例模板,请使用不带 --instance-template-region 标志的相同命令。

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --host-error-timeout-seconds=ERROR_DETECTION_TIMEOUT \
    --instance-template-region=REGION \
    --local-ssd-recovery-timeout=LOCAL_SSD_RECOVERY_TIMEOUT \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=MAINTENANCE_POLICY \
    --restart-on-failure

替换以下内容:

  • INSTANCE_TEMPLATE_NAME:实例模板的名称。

  • ERROR_DETECTION_TIMEOUT:重启无响应实例之前等待的秒数。该值必须介于 90(90 秒)到 330(330 秒,即 5 分 30 秒)之间。只能以 30 秒为单位进行递增。

  • REGION:要在其中创建实例模板的区域。

  • LOCAL_SSD_RECOVERY_TIMEOUT:从已挂接的本地 SSD 磁盘恢复数据所花费的小时数。该值必须介于 0(0 小时)和 168(168 小时或 7 天)之间。将此字段设置为 0 表示 Compute Engine 不会恢复本地 SSD 数据。

  • MACHINE_TYPE:要使用的机器类型。

  • MAINTENANCE_POLICY:实例的维护行为。值可以是 TERMINATEMIGRATE。如果您在实例模板中指定了 Spot 虚拟机、抢占式虚拟机或不支持实时迁移的实例类型,则只能使用 TERMINATE

REST

如需在创建实例模板时设置主机维护政策,请向以下方法之一发出 POST 请求:

在请求正文中,在 scheduling 字段中添加以下一个或多个字段:

  • 如需设置主机维护行为,请添加 onHostMaintenance 字段。

  • 如需设置自动重启行为,请执行以下操作之一:

    • 如需自动重启实例,请添加 automaticRestart 字段。

    • 如需防止实例自动重启,请添加 automaticRestart 字段。

  • 如果您的实例挂接了本地 SSD 磁盘,如需设置本地 SSD 数据恢复超时,请添加 localSsdRecoveryTimeout 字段。

  • 如需设置主机错误超时,请添加 hostErrorTimeoutSeconds 字段。

例如,如需设置主机维护行为、在发生主机错误或按计划停止后自动重启实例、设置本地 SSD 数据恢复超时,以及设置主机错误超时,请发出如下请求。以下示例也会创建一个区域实例模板。

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": {
      "automaticRestart": AUTOMATIC_RESTART,
      "hostErrorTimeoutSeconds": ERROR_DETECTION_TIMEOUT,
      "localSsdRecoveryTimeout": LOCAL_SSD_RECOVERY_TIMEOUT,
      "onHostMaintenance": "MAINTENANCE_POLICY"
    }
  }
}

替换以下内容:

  • 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:要使用的机器类型。

  • AUTOMATIC_RESTART:实例崩溃或 Compute Engine 因计划性停止而停止实例时的自动重启行为。请指定以下某个值:

    • 如需让 Compute Engine 自动重启实例,请执行以下操作:true

    • 如需防止自动重启,请执行以下操作:false

  • ERROR_DETECTION_TIMEOUT:重启无响应实例之前等待的秒数。该值必须介于 90(90 秒)到 330(330 秒,即 5 分 30 秒)之间。只能以 30 秒为单位进行递增。

  • LOCAL_SSD_RECOVERY_TIMEOUT:从已挂接的本地 SSD 磁盘恢复数据所花费的小时数。该值必须介于 0(0 小时)和 168(168 小时或 7 天)之间。将此字段设置为 0 表示 Compute Engine 不会恢复本地 SSD 数据。

  • MAINTENANCE_POLICY:实例的维护行为。值可以是 TERMINATEMIGRATE。如果您在实例模板中指定了 Spot 虚拟机、抢占式虚拟机或不支持实时迁移的实例类型,则只能使用 TERMINATE

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

查看实例的主机维护政策

您可以通过查看实例的详细信息来查看实例的主机维护政策。

使用 gcloud CLI 或 REST API 查看实例详情时,只有在创建或更新实例时指定了 localSsdRecoveryTimeouthostErrorTimeoutSeconds 字段,您才能查看这些字段。

如需查看已挂接本地 SSD 磁盘的实例中的本地 SSD 数据恢复超时设置,请使用 gcloud CLI 或 REST API。否则,请选择以下任一选项:

控制台

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

    进入“虚拟机实例”

  2. 名称列中,点击要查看的实例。系统会显示一个页面,其中包含实例的详细信息。

  3. 详细信息标签页的管理部分的可用性政策部分,您可以查看以下内容:

    • On host maintenance 字段中,您可以查看实例的主机维护行为事件。

    • 主机错误超时字段中,您可以查看实例在检测到无响应后等待重启或停止之前等待的时间。如果未设置此值(-),则默认等待时间为 5 分 30 秒。

    • 自动重启重启字段中,您可以查看实例在崩溃后是否会自动重启,还是 Compute Engine 会根据预定的停止时间停止实例。

gcloud

如需查看实例的主机维护政策,请使用 gcloud compute instances describe 命令,并将 --flatten 标志设置为 scheduling

 gcloud compute instances describe INSTANCE_NAME \
    --flatten=scheduling \
    --zone=ZONE

替换以下内容:

  • INSTANCE_NAME:实例的名称。

  • ZONE:实例所在的区域。

输出类似于以下内容:

---
scheduling:
  automaticRestart: true
  hostErrorTimeoutSeconds: 120
  localSsdRecoveryTimeout:
    nanos: 0
    seconds: '10800'
  onHostMaintenance: MIGRATE
  preemptible: false
  provisioningModel: STANDARD

REST

如需查看实例的主机维护政策,请向 instances.get 方法发出 GET 请求。在请求网址中添加 fields 查询参数并将其设置为 scheduling

  GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME?fields=scheduling

替换以下内容:

  • PROJECT_ID:实例所在的项目。

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

  • INSTANCE_NAME:实例的名称。

输出类似于以下内容:

{
  "scheduling": {
    "onHostMaintenance": "MIGRATE",
    "automaticRestart": true,
    "preemptible": false,
    "provisioningModel": "STANDARD",
    "localSsdRecoveryTimeout": {
      "seconds": "10800",
      "nanos": 0
    }
  }
}

后续步骤