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


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

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

  • 尽量减少停机时间。

  • 防止数据丢失。

限制

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

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

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

    • 不支持实时迁移的实例,例如拥有 88 个或更多 vCPU 的 Z3 实例、裸金属实例或挂接了 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. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.
    3. REST

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

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      如需了解详情,请参阅 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 虚拟机或抢占式虚拟机的默认设置,也是拥有 88 个或更多 vCPU 的 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. 详细信息标签页的管理部分和可用性政策部分,您可以查看以下内容:

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

    • 主机错误超时时长字段中,您可以查看实例在检测到无响应后,重启或停止实例之前的等待时间。如果该值未设置 (),则默认等待时间为 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
    }
  }
}

后续步骤