设置实例可用性政策

Compute Engine 会对其基础架构执行定期维护。本页面介绍了这些维护事件的类型和大概频率,以及您可以如何设置实例可用性选项以配置虚拟机实例在这些维护事件发生时的行为。本页面还介绍如何将实例设置为在维护事件发生时进行实时迁移

准备工作

维护事件

Compute Engine 维护事件包含硬件更新和软件更新。一些维护事件需要 Google 将虚拟机迁离接受维护的主机,Compute Engine 会自动管理这些实例的调度行为。如果您将虚拟机实例的可用性政策配置为使用实时迁移,Compute Engine 会实时迁移这些实例。这会防止应用在发生这些事件时遇到中断情况。除了实时迁移以外,您还可以选择在发生这些事件时停止实例。

下表将 Compute Engine 维护事件大致分为两类,举例说明各个类别,并指出哪个维护事件需要将虚拟机实时迁移到其他主机。

维护事件类型 示例 大概频率 * 需要实时迁移到新主机
主机维护 主机内核升级、硬件修复或升级 每两周一次
轻量级 管理程序级别的升级、网络堆栈升级 每周 1-2 次

* 请注意,这些频率是大概频率,不保证一定准确。Compute Engine 执行维护的频率有时可能比此处指出的频率更加频繁。

选择可用性政策

在进行维护时,如果 Google 必须将虚拟机实例移动到另一台主机上,则虚拟机实例的可用性政策可以确定它在这种情况下的行为方式。 您可以将虚拟机实例配置为在 Compute Engine 将它们实时迁移到另一台主机上时继续运行,也可以改为选择停止实例。您可以随时更新实例的可用性政策,以控制虚拟机实例的行为方式。

您可以配置以下两个设置来更改实例的可用性政策:

  • 虚拟机实例的维护行为,用于确定维护事件发生时实时迁移实例还是停止实例。
  • 实例的重启行为,用于确定实例崩溃或停止时是否自动重启。

实例的默认维护行为是实时迁移,但您可以将默认维护行为更改为在维护事件发生时停止实例。

实时迁移

默认情况下,标准实例会设置为实时迁移。在这种情况下,Compute Engine 会自动迁移实例以使其不受基础架构维护事件影响,并且实例在迁移过程中仍会保持运行状态。 虽然实例可能会遭遇短暂的性能下降情况,但大多数实例通常不会体现出任何差别。这非常适合那些需要维持正常运行时间并且能够承受短暂性能下降的实例。

Compute Engine 迁移实例时,会报告一个系统事件,而该事件会发布到地区操作列表。您可以通过查看特定地区的 Compute Engine 操作来检查此事件。实时迁移事件的操作类型如下:

compute.instances.migrateOnHostMaintenance

停止和(可选)重启

如果您不希望实时迁移实例,可以选择停止并选择性地重启实例。使用这个选项,Compute Engine 会向实例发出信号以指示其关闭,等待一小段时间直至实例完全关闭,停止实例,然后重启实例以使其不受维护事件影响。如果您的实例需要维持最高性能,并且您的整个应用可用来处理实例故障或重启,则此选项非常适用。

Compute Engine 停止并重启实例时,会报告一个系统事件,而该事件会发布到地区操作列表。您可以通过查看特定地区的 Compute Engine 操作来检查此事件。已停止事件的操作类型如下:

compute.instances.terminateOnHostMaintenance

您的实例重启时,会使用同一块永久性启动磁盘,并且会重新挂接您配置的辅助永久性磁盘。这些磁盘中的数据在实例迁移和重启过程中会继续保留。

本地 SSD 数据在实例停止过程中不会保留。实例重启时,会创建一个您必须格式化和装载的新本地 SSD。

自动重启

如果您的实例设置为在发生维护事件时停止,或者由于底层硬件问题导致实例崩溃,则可以将 Compute Engine 设置为自动重启实例,将 automaticRestart 字段设置为 true 即可。如果实例在用户操作(如调用 sudo shutdown)过程中或在地区服务中断期间离线,则此设置不适用。

Compute Engine 自动重启实例时,会报告一个系统事件,而该事件会发布到区域操作列表。您可以通过查看特定区域的 Compute Engine 操作来检查此事件。自动重启事件的操作类型如下:

compute.instances.automaticRestart

查看 Compute Engine 操作

您可以通过 Google Cloud Consolegcloud 命令行工具Compute Engine API 查看已完成操作的列表。

控制台

要查看您项目的操作列表,请转到“操作”页面。

  1. 转到“操作”页面

  2. 如需详细了解某个操作,请点击操作摘要。例如,如需查看 my-instance 实例的迁移详细信息,请点击自动迁移实例操作。显示实时迁移的操作页面。 实时迁移详情。

gcloud

要使用 gcloud compute 查看您项目的操作列表,请使用 operations list 子命令。

如需查看指定区域的操作列表,请添加 --filter 标志。

gcloud compute operations list --filter="zone:(ZONE)"

ZONE 替换为您要查看操作列表的区域。例如,如需查看 us-cental1-c 的操作列表,请运行以下命令:

gcloud compute operations list --filter="zone:(us-central1-c)"

NAME                            TYPE                                        TARGET                                HTTP_STATUS  STATUS  TIMESTAMP
systemevent-1543845145000...    compute.instances.migrateOnHostMaintenance  us-central1-c/instances/my-instance   200          DONE    2018-12-03T05:52:25.000-08:00

API

操作的 API 请求必须在全球区域地区级别指定。实时迁移、实例停止和自动重启都是地区级别的操作。

对于区域操作,请向 zoneOperations.list 方法发出 GET 请求。

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

替换以下内容:

  • PROJECT_ID:此请求的项目 ID
  • ZONE:此请求对应的区域

将请求正文留空。

下面是地区操作请求的示例输出。该输出显示了主机迁移的详情。

{
 "kind": "compute#operation",
 "id": "3216798767364213712",
 "name": "systemevent-1543845145000-57c1e7574b840-a195b637-5ff74d9b",
 "zone": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-c",
 "operationType": "compute.instances.migrateOnHostMaintenance",
 "targetLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-c/instances/my-instance",
 "targetId": "3070988523247098025",
 "status": "DONE",
 "statusMessage": "Instance migrated during Compute Engine maintenance.",
 "user": "system",
 "progress": 100,
 "insertTime": "2018-12-03T05:52:25.000-08:00",
 "startTime": "2018-12-03T05:52:25.000-08:00",
 "endTime": "2018-12-03T05:52:25.000-08:00",
 "selfLink": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-c/operations/systemevent-1543845145000-57c1e7574b840-a195b637-5ff74d9b"
}

设置可用性政策

可使用 onHostMaintenanceautomaticRestart 属性来配置实例的维护行为和自动重启设置。除非您另行明确指定,否则所有实例都会配置为默认值。

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

    • 如果设置为 MIGRATE [默认值],则存在维护事件时,Compute Engine 会实时迁移实例。
    • 如果设置为 TERMINATE,则系统会停止实例,而非迁移实例。
  • automaticRestart:确定实例发生崩溃或被系统停止时的行为。

    • 如果设置为 true [默认值],则 Compute Engine 会在实例崩溃或停止时重启实例。
    • 如果设置为 false,则 Compute Engine 不会在实例崩溃或停止时重启实例。

当您首次创建实例时,或者在创建实例后,可以使用 setScheduling 方法来更改实例的可用性政策。

在创建实例期间设置选项

控制台

  1. 在 Cloud Console 中,转到虚拟机实例页面。

    转到“虚拟机实例”页面

  2. 点击创建实例
  3. 创建新实例页面上,填写实例的属性。
  4. 展开管理、安全、磁盘、网络、单独租用选项。
  5. 可用性政策下,设置自动重启主机维护期间选项。
  6. 点击创建以创建实例。

gcloud

如需在 gcloud compute 中指定新实例的可用性政策,请使用 --maintenance-policy 标志来指定实例是迁移还是停止。默认情况下,除非您提供了 --no-restart-on-failure 标志,否则实例会自动设置为重启。

gcloud compute instances create INSTANCE_NAME \
    --maintenance-policy MAINTENANCE_POLICY \
    [--no-restart-on-failure]

替换以下内容:

  • INSTANCE_NAME:实例名称
  • MAINTENANCE_POLICY:此实例的政策,为 TERMINATEMIGRATE

API

在 API 中,向以下网址发出 POST 请求,并将项目和地区替换为您的项目 ID 和实例所在的地区:

https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances

onHostMaintenanceautomaticRestart 参数添加到请求正文中:

{
  "name": "example-instance",
  "description": "Front-end for real-time ingest; don't migrate.",
  ...
  // User options for influencing this Instance’s life cycle.
  "scheduling": {
    "onHostMaintenance": "MIGRATE",
    "automaticRestart": true
  }
}

如需了解详情,请参阅实例参考文档。

更新实例对应的选项

控制台

  1. 在 Google Cloud Console 中,转到“虚拟机实例”页面。

    转到“虚拟机实例”页面

  2. 点击您要更改设置的实例。此时将显示实例详细信息页面。
  3. 在实例详细信息页面中,完成以下步骤:
    1. 点击页面顶部的修改按钮。
    2. 可用性政策下,根据需要更新政策。在可用性政策部分中,您可以设置主机维护时自动重启选项。
    3. 点击保存

gcloud

如需更新实例的可用性政策,请使用 instances set-scheduling 命令以及上述实例创建命令中所使用的相同参数和标志:

gcloud compute instances set-scheduling INSTANCE_NAME \
    --maintenance-policy MAINTENANCE_POLICY \
    [--no-restart-on-failure | --restart-on-failure]

替换以下内容:

  • INSTANCE_NAME:实例名称
  • MAINTENANCE_POLICY:此实例的政策,为 TERMINATEMIGRATE

API

在 API 中,您可以向以下网址发出请求,并将项目 ID、区域和实例名称替换为您自己的项目 ID、区域和实例名称:

https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-central1-f/instances/example-instance/setScheduling

请求正文必须包含可用性政策的新值:

{
  "onHostMaintenance": "MIGRATE",
  "automaticRestart": true
}

如需了解详情,请参阅 instances().setScheduling 参考文档。

测试您的可用性政策

设置可用性政策后,您可以模拟维护事件来测试这些可用性政策对应用的影响。例如,出现以下某个情况时,您可以模拟实例上的维护事件:

  • 您的实例被配置为在维护期间进行实时迁移,并且您需要测试实时迁移对应用的影响。
  • 您要在抢占式虚拟机实例上运行批处理作业,并且您需要测试应用如何处理一个或多个实例的抢占和关停。
  • 您的实例被配置为在维护期间停止并重启(而非实时迁移),并且您需要测试应用如何处理此关停和重启过程。

模拟维护事件受特定 API 速率限制的约束。

您可以使用 gcloud 命令行工具或 API 请求模拟实例上的维护事件。

gcloud

运行 instances simulate-maintenance-event 命令强制实例激活为其配置的维护政策操作:

gcloud compute instances simulate-maintenance-event INSTANCE_NAME \
    --zone ZONE

替换以下内容:

  • INSTANCE_NAME:您要在其中模拟维护事件的实例的名称。您可以指定由单一空格分隔的多个实例名称,以模拟同一区域中多个实例上的维护事件。例如 instance-1 instance-2 instance-3
  • ZONE:实例所在的区域。

API

在 API 中,向 Compute Engine API 中的 compute.instances.simulateMaintenanceEvent 方法发出请求:

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

替换以下内容:

  • PROJECT_ID:此请求的项目 ID
  • INSTANCE_NAME:您要在其中模拟维护事件的实例的名称
  • ZONE:实例所在的区域

如需详细了解此方法,请参阅 instances().simulateMaintenanceEvent 参考文档。

后续步骤