设置实例可用性政策

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

准备工作

维护事件

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

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

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

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

选择可用性政策

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

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

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

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

实时迁移

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

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

compute.instances.migrateOnHostMaintenance

终止和(可选)重启

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

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

compute.instances.terminateOnHostMaintenance

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

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

自动重启

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

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

compute.instances.automaticRestart

查看 Compute Engine 操作

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

Console

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

  1. 转到“操作”页面

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

gcloud

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

要查看指定地区的操作列表,请添加 --filter 标志。

gcloud compute operations list --filter="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://www.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 方法来更改实例的可用性政策。

在创建实例期间设置选项

Console

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

    转到“虚拟机实例”页面

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

gcloud

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

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

API

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

https://www.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" # specifies that Google Compute Engine should automatically restart your instance
  }
}

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

更新实例对应的选项

Console

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

    转到“虚拟机实例”页面

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

gcloud

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

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

API

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

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

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

{
  "onHostMaintenance": "migrate"
  "automaticRestart": "true" # specifies that Google Compute Engine should automatically restart your instance
}

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

测试您的可用性政策

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

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

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

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

gcloud

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

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

其中:

  • [INSTANCE_NAME] 是您要在其中模拟维护事件的实例的名称。您可以指定多个实例名称,以模拟同一地区中多个实例上的维护事件。
  • [ZONE] 是实例所在的地区。

API

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

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

其中:

  • [INSTANCE_NAME] 是您要在其中模拟维护事件的实例的名称。
  • [ZONE] 是实例所在的地区。

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

计划维护期

Compute Engine 可让您选择 Google 每天对虚拟机实例进行维护的时间段。通过为维护事件指定时间段,您可以保护对性能要求较高的工作负载,避免它们在一天中的关键时段受到维护事件的任何干扰。例如,您可以执行以下操作:

  • 在高峰时段以外安排维护期。如果在某个固定的时间范围内,用户会频繁使用您的虚拟机,那么您可以在该时间范围以外安排维护期。

  • 在特殊事件前后安排维护期。如果有某个事件即将发生,而您的虚拟机在该事件期间必须保持运行状态,那么您可以在该事件前后安排维护期。

此功能仅限受邀者使用。请注册以获邀使用此功能。

如果您已获邀请,请阅读安排维护期以了解如何使用此功能。

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档