为实例设置主机维护政策


本文档介绍了如何为虚拟机 (VM) 或裸机实例设置主机维护政策,以控制实例在发生主机事件时的行为。

准备工作

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

限制

  • 您无法更改抢占式虚拟机的维护行为。发生维护事件时,抢占式虚拟机停止且不会迁移。您必须手动重启抢占的虚拟机。
  • 使用 E2 机器类型创建虚拟机后,您无法将虚拟机的维护行为从 MIGRATE 更改为 TERMINATE,反之亦然。
  • 您无法更改裸机实例(例如 c3-standard-192-metalx4-megamem-1920-metal)的维护行为,这些实例会设置为 TERMINATE 并自动重启。

可用的主机维护属性

您可以配置计算实例的维护行为、重启行为和主机错误等待行为。除非您另行指定,否则 Compute Engine 会使用默认值配置每个实例。

在主机事件期间,根据配置的主机维护政策,不支持实时迁移的实例会被终止并自动重启。

  • onHostMaintenance:确定可能造成实例重启的维护事件发生时的行为。

    • MIGRATE:在发生维护事件时,Compute Engine 会实时迁移实例。这是大多数虚拟机的默认值。
    • TERMINATE:停止实例,而不是使用实时迁移。这是 Z3、裸机实例以及具有 GPU 和 TPU 等加速器的实例的默认选项。对于这些实例类型,您无法更改 onHostMaintenance 的设置。
  • automaticRestart:确定实例发生崩溃或被系统停止时的行为。

    • true默认值):如果实例崩溃或停止,则 Compute Engine 会重启实例。
    • false:如果实例崩溃或停止,Compute Engine 不会重启实例。
  • localSsdRecoveryTimeout:设置本地 SSD 恢复超时。这是 Compute Engine 在主机错误后等待恢复本地 SSD 数据的最长时间(以小时为单位)。此设置仅适用于挂接了本地 SSD 磁盘的虚拟机。如果您为未附加本地 SSD 磁盘的实例配置此设置,系统会忽略此设置。

    • 未设置默认值):Compute Engine 最长会等待 1 小时来恢复本地 SSD 数据。对于 Z3 虚拟机,默认等待时间为 6 小时。
    • 介于 0 到 168 之间的整数:指定 Compute Engine 等待恢复本地 SSD 数据的时长(以小时为单位)。最大值等于 7 天。值为 0 表示 Compute Engine 不会等待恢复本地 SSD 数据,而是立即重启实例。
  • hostErrorTimeoutSeconds预览版):设置 Compute Engine 在检测到计算实例无响应后等待重启或终止计算实例的最长时间(以秒为单位)。

    • 未设置默认值):Compute Engine 最长会等待 5.5 分钟(330 秒),然后再重启无响应的实例。
    • 介于 90 到 330 之间的整数:指定 Compute Engine 在重启无响应的计算实例之前等待的秒数(以 30 为增量)。

设置实例的主机维护政策

当您首次创建实例时或创建实例后,可以更改实例的主机维护政策。

在实例创建期间设置主机维护政策

本部分中的信息重点介绍了如何在创建实例时设置主机维护政策。如需查看更多实例创建示例,请参阅创建和启动 Compute Engine 实例

您可以使用 Google Cloud 控制台、gcloud CLI 或 REST 在创建计算实例时设置主机维护政策。

控制台

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

    转到“创建实例”

  2. 为该实例指定名称

  3. 为实例选择区域可用区

  4. 机器配置部分中,执行以下操作:

    1. 指定实例的机器类型的详细信息。
    2. 展开虚拟机预配模型高级设置菜单。
    3. 主机维护时菜单中,选择以下步骤之一:
      1. 如需在维护事件期间迁移虚拟机,请选择迁移虚拟机实例
      2. 如需在维护事件期间停止实例,请选择终止虚拟机实例
  5. 如需创建实例,请点击创建

gcloud

如需设置新实例的主机维护政策,请使用 gcloud compute instances create 命令

如需设置 --host-error-timeout-seconds 属性(预览),您必须使用 gcloud beta compute instances create 命令

您可以使用以下命令设置新实例的主机维护政策。如果您省略任何标志,系统会使用该标志的默认值。

  gcloud compute instances create INSTANCE_NAME \
      --zone=ZONE \
      --maintenance-policy=MAINTENANCE_BEHAVIOR \
      --RESTART_ON_FAILURE_BEHAVIOR \
      --local-ssd-recovery-timeout=SSD_RECOVERY_TIMEOUT \
      --host-error-timeout-seconds=ERROR_DETECTION_TIMEOUT

替换以下内容:

  • INSTANCE_NAME:实例名称。
  • ZONE:实例所在的可用区,
  • MAINTENANCE_BEHAVIOR:实例的维护事件行为,即 TERMINATEMIGRATE。对于大多数机器类型,如果您省略此属性,系统会默认迁移虚拟机。Z3 实例和裸金属实例会终止。
  • RESTART_ON_FAILURE_BEHAVIOR:终止或无响应的实例的重启行为,设置为 restart-on-failure(默认)或 no-restart-on-failure
  • SSD_RECOVERY_TIMEOUT:恢复挂接到已终止或无响应实例的本地 SSD 磁盘所花费的小时数。有效值介于 0 到 168 之间,以 1 小时为增量。
  • ERROR_DETECTION_TIMEOUT:Compute Engine 在重启无响应实例之前等待的秒数,介于 90 到 330 秒(5.5 分钟)之间,以 30 秒为增量。

REST

如需使用 REST 设置新实例的主机维护政策,请使用 instances.insert 方法

您可以使用以下命令设置新实例的主机维护政策。如果您省略任何字段,系统会使用该字段的默认值。

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

      {
        "name": "INSTANCE_NAME",

        "scheduling": {
          "onHostMaintenance": "MAINTENANCE_BEHAVIOR",
          "automaticRestart": "RESTART_POLICY,
          "localSsdRecoveryTimeout": SSD_RECOVERY_TIMEOUT
        }
      }

替换以下内容:

  • PROJECT_ID:实例的项目。
  • ZONE:您要在其中创建实例的可用区。
  • INSTANCE_NAME:实例名称。
  • MAINTENANCE_BEHAVIOR:实例的维护事件行为,即 TERMINATEMIGRATE。对于大多数机器类型,如果您省略此字段,系统会默认迁移虚拟机。Z3 实例和裸金属实例会终止。
  • RESTART_POLICY:实例是否在发生维护事件或主机发生错误后自动重启,值为 true(默认)或 false
  • SSD_RECOVERY_TIMEOUT:Compute Engine 用于恢复挂接到无响应或已终止实例的任何本地 SSD 磁盘的小时数。有效值介于 0 到 168 之间,以 1 小时为增量。Z3 的默认值为 6 小时,所有其他虚拟机的默认值为 1 小时。

设置主机错误检测超时

如需设置 Compute Engine 等待重启或终止无响应实例的最长时间,请使用 Beta 版 instances.insert 方法,因为此选项在预览版中可用。

hostErrorTimeoutSeconds 属性添加到请求正文的 scheduling 对象,其中 HOST_ERROR_TIMEOUT 是 Compute Engine 在重启或终止无响应实例之前等待的秒数。有效值介于 90 到 330(5.5 分钟)之间,以 30 秒为增量。


   POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances

   {
      "name": "INSTANCE_NAME",

      "scheduling": {
        "onHostMaintenance": "MAINTENANCE_BEHAVIOR",
        "automaticRestart": "RESTART_POLICY,
        "localSsdRecoveryTimeout": SSD_RECOVERY_TIMEOUT
        "hostErrorTimeoutSeconds": HOST_ERROR_TIMEOUT,
      }
    }

更新现有实例的主机维护政策

控制台

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

    转到虚拟机实例

  2. 点击您要更改设置的实例的名称。此时将显示实例详细信息页面。

  3. 选择详细信息标签页,然后完成以下步骤:

    1. 点击页面顶部的修改按钮。
    2. 找到管理部分。 在可用性政策部分中,您可以更改主机维护选项。
    3. 点击保存

gcloud

使用 gcloud compute instances set-scheduling 命令更新现有实例的主机维护政策。使用与上一部分中实例创建命令相同的参数。

如需更新 Compute Engine 等待重启或终止无响应实例的最长时间(预览版),请使用 gcloud beta compute instances set-scheduling 命令并添加 --host-error-timeout-seconds=NUMBER_OF_SECONDS

    gcloud compute instances set-scheduling INSTANCE_NAME \
      --maintenance-policy=MAINTENANCE_BEHAVIOR \
      --RESTART_ON_FAILURE_BEHAVIOR \
      --local-ssd-recovery-timeout=SSD_RECOVERY_TIMEOUT

替换以下内容:

  • NUMBER_OF_SECONDS:Compute Engine 在重启或终止无响应虚拟机之前等待的秒数,从 90 到 330(5.5 分钟),以 30 秒为增量。
    • INSTANCE_NAME:实例名称。
    • MAINTENANCE_BEHAVIOR:实例的维护事件行为,即 TERMINATEMIGRATE。对于大多数机器类型,如果您省略此属性,系统会默认迁移虚拟机。Z3 实例和裸金属实例会终止。
    • RESTART_ON_FAILURE_BEHAVIOR:终止或无响应的实例的重启行为,设置为 restart-on-failure(默认)或 no-restart-on-failure
    • SSD_RECOVERY_TIMEOUT:恢复挂接到已终止或无响应实例的本地 SSD 磁盘所花费的小时数。有效值介于 0 到 168 之间,以 1 小时为增量。
    • NUMBER_OF_SECONDS:Compute Engine 在重启无响应实例之前等待的秒数,介于 90 到 330 秒(5.5 分钟)之间,以 30 秒为增量。

REST

instances.setScheduling 方法发出的 POST 请求,以更新现有实例的主机维护政策。

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

    {
      "onHostMaintenance": "MAINTENANCE_BEHAVIOR",
      "automaticRestart": RESTART_POLICY,
      "localSsdRecoveryTimeout": SSD_RECOVERY_TIMEOUT
    }

替换以下内容:

  • PROJECT_ID:实例的项目。
  • ZONE:实例所在的区域。
  • INSTANCE_NAME:实例名称。
  • MAINTENANCE_BEHAVIOR:此实例的维护事件行为,即 TERMINATEMIGRATE
  • RESTART_POLICY:实例是否自动重启,值为 truefalse
    • SSD_RECOVERY_TIMEOUT:恢复挂接到实例的本地 SSD 磁盘所花费的小时数。有效值介于 0 到 168 之间,以 1 小时为增量。

更新主机错误检测超时

如需更新 Compute Engine 等待重启或终止无响应虚拟机的最长时间,您必须使用 Beta 版 instances.setScheduling 方法,因为此功能处于预览版阶段。

hostErrorTimeoutSeconds 属性添加到请求正文中,其中 HOST_ERROR_TIMEOUT 是 Compute Engine 在重启或终止无响应实例之前等待的秒数。有效值介于 90 到 330(5.5 分钟)之间,以 30 秒为增量。

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

  {
    ...
    "hostErrorTimeoutSeconds": NUMBER_OF_SECONDS
  }

查看实例的主机维护政策设置

控制台

  1. 转到虚拟机实例页面。

    转到虚拟机实例

  2. 点击要查看其设置的实例的名称。实例详情页面会打开。

  3. 前往管理部分。可用性政策子部分会显示以下各项的当前设置:

    • 主机维护时
    • 自动重启
    • 主机错误超时

gcloud

使用 gcloud compute instances describe 命令查看实例的主机维护选项设置。

如需查看 hostErrorTimeoutSeconds 设置的当前值(预览版),请使用 gcloud beta compute instances describe 命令

 gcloud compute instances describe INSTANCE_NAME \
 --zone ZONE --format="yaml(scheduling)"

替换以下内容:

  • INSTANCE_NAME:实例的名称
  • ZONE:实例所在的区域

输出包括主机维护政策的当前设置,例如:

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

REST

如需查看实例的主机维护设置,请使用 instances.get 方法

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

替换以下内容:

  • PROJECT_ID:实例所在的项目。
  • ZONE:实例所在的区域。
  • INSTANCE_NAME:实例名称。

在输出中,scheduling 对象包含实例的主机维护政策的设置,例如:

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

查看主机错误超时设置

使用 Beta 版 instances.get 方法构建 GET 请求,以查看当前 hostErrorTimeoutSeconds 设置。

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

替换以下内容:

  • PROJECT_ID:实例的项目。
  • ZONE:实例所在的区域。
  • INSTANCE_NAME:实例名称。

在输出中,scheduling 对象包含实例的主机错误检测超时,例如:

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

后续步骤