抢占式虚拟机实例

本页面介绍抢占式虚拟机 (VM) 实例。要了解如何创建抢占式实例,请参阅创建抢占式实例。要详细了解一般意义上的实例,请参阅虚拟机实例文档。

什么是抢占式实例?

抢占式虚拟机是一种您能以比常规实例更低的价格创建和运行的实例。但是,如果 Compute Engine 需要访问这些资源以处理其他任务,可能会终止(抢占)这些实例。抢占式实例是过剩的 Compute Engine 容量,因此它们的可用性因使用情况而异。

如果您的应用属于容错型且可以承受可能的实例抢占,那么抢占式实例可以显著降低您的 Compute Engine 费用。例如,批处理作业可以在抢占式实例上运行。如果其中某些实例在处理期间终止,作业会减慢但不会完全停止。抢占式实例可完成您的批处理任务,而不会在现有实例上增加额外的工作负载,您也不再需要为额外的普通实例支付全价。

抢占式实例限制

抢占式实例的功能与普通实例类似,但具有以下限制:

  • 由于系统事件,Compute Engine 可能随时终止抢占式实例。Compute Engine 因系统事件终止抢占式实例的概率通常很低,但每天和每个地区都可能会有所不同,具体取决于当前条件。
  • Compute Engine 一定会在抢占式实例运行 24 小时后终止它们。某些操作会重置此 24 小时计数器。
  • 抢占式实例是有限的 Compute Engine 资源,因此它们可能不一定始终可用。
  • 抢占式实例无法实时迁移到常规虚拟机实例,也无法设置为在发生维护事件时自动重启。
  • 由于上述限制,任何服务等级协议均不涵盖抢占式实例(并且为明确起见,抢占式实例已从 Compute Engine SLA 中排除)。
  • Compute Engine 的 Google Cloud 免费层级赠金并不适用于抢占式实例。

抢占过程

Compute Engine 执行以下步骤来抢占实例:

  1. Compute Engine 以 ACPI G2 软关闭信号的形式向实例发送抢占通知。您可以使用关闭脚本来处理抢占通知,并在实例停止前完成清理操作。
  2. 如果实例在 30 秒后没有停止,Compute Engine 会向操作系统发送 ACPI G3 机械关闭信号。
  3. Compute Engine 将实例转换为 TERMINATED 状态。

您可以通过停止实例来模拟实例抢占。

已抢占的实例仍会出现在您的项目中,但是在它保持处于 TERMINATED 状态时,您不需要为实例时间付费。您可以从挂接到实例的任何永久性磁盘访问和恢复数据,但这些磁盘在您删除它们之前仍会产生存储费用。与普通实例一样,当您删除抢占式实例时,还将删除标记为自动删除的永久性磁盘。

如果 Compute Engine 在抢占式实例创建后不到 1 分钟就终止它,则该虚拟机实例的使用不会产生费用。这可以确保除非抢占式实例有时间完成一定数量的工作,否则您不用为它们付费。但是,付费操作系统的费用仍然按正常计算。

抢占选择

通常,Compute Engine 会避免单个客户抢占过多实例,并会尽可能优先抢占新实例(而非旧实例)。这一开始可能有点令人失望,但从长远来看,此策略有助于最大限度地减少在集群中丢失工作的情况。如果实例在开始运行后的第一分钟被抢占,则 Compute Engine 不会针对这些实例向您收费。Google 不会使用虚拟机的 CPU 利用率来确定它是否被抢占。

作为参考,我们从历史数据中观察到,每个项目每天的抢占率在 5% 至 15% 之间不等(取 7 天的平均值),根据时间和地区,偶尔会出现更高的情况。请记住,这只是一个观察结果:抢占式实例没有关于抢占率或抢占分配的保证或服务等级协议 (SLA)。

某些操作会将抢占式实例的 24 小时计数器清零。具体而言,如果停止启动实例,Compute Engine 会将该计数器清零,因为实例将转换为 TERMINATED 状态。但是,执行其他操作(例如重置实例或从虚拟机内运行 sudo reboot)时实例仍保持 RUNNING 状态,因此计数器不会清零。

托管实例组中的抢占式实例

您可以在托管实例组中创建抢占式实例。在创建或更新组之前,在实例模板中指定抢占选项。

仅当其他 Compute Engine 资源可用时,托管实例组才可创建或添加新的抢占式实例。如果这些资源有限,则托管实例组将无法调整大小或自动增减组中抢占式实例的数量。

托管实例组始终尽力保持其目标大小或由该组的自动扩缩程序指定的大小。如果 Compute Engine 终止托管实例组中的抢占式实例,该组将反复尝试使用指定的实例模板重新创建该实例。如果必要的资源变得再次可用,则该组将重新创建实例并保持目标组大小。

抢占式实例上的付费操作系统

抢占式实例不会降低付费操作系统的费用,也不会改变您支付此类操作系统使用费的方式。如果 Compute Engine 终止运行付费操作系统的抢占式实例,那么系统会向您收取该操作系统的使用费,就像是您自己终止了该实例一样。最低使用费仍然适用,并且付费操作系统的帐单仍然通过向上舍入到最接近的使用量增量来计算。

运行付费操作系统的抢占式实例上的机器类型始终按秒计费,并遵循机器类型价格页面上列出的价格。

抢占式实例上的本地 SSD

您可以启动使用本地 SSD 的抢占式虚拟机实例,Compute Engine 将按抢占式价格向您收取本地 SSD 的使用费。挂接到抢占式实例的本地 SSD 的工作方式类似于普通的本地 SSD;此类 SSD 会保留相同的数据持久性特性,并在实例生命周期内保持挂接状态。在创建抢占式本地 SSD 时,您可以为抢占式本地 SSD 请求单独的配额,但也可以选择使用常规本地 SSD 配额。

如果本地 SSD 的实例在开始运行后的第一分钟被抢占,则 Compute Engine 不会针对这些本地 SSD 向您收取费用。

如需详细了解本地 SSD,请参阅添加本地 SSD

抢占式实例上的 GPU

您可以将 GPU 添加到抢占式虚拟机实例;GPU 的抢占式价格更低。挂接到抢占式实例的 GPU 在工作方式上类似于普通 GPU,但只会在实例的生命周期内保留。搭载 GPU 的抢占式实例遵循与所有抢占式实例相同的抢占过程

将 GPU 添加到抢占时实例时,占用的是常规 GPU 配额。如果您需要对抢占式 GPU 使用单独的配额,可以申请单独的抢占式 GPU 配额

在维护事件发生时,挂接了 GPU 的抢占式实例会默认被抢占,并且无法自动重启。如果您要在实例被抢占后重新创建这些实例,请使用托管实例组。如果 vCPU、内存和 GPU 资源可用,则托管实例组将重新创建您的实例。

如果您希望在实例被抢占前收到警告,或者想要将实例配置为在维护事件发生后自动重启,请使用具有 GPU 的非抢占式实例。对于具有 GPU 的非抢占式实例,Google 会在抢占前提前一小时发出通知

如果 GPU 所属的实例在开始运行后的第一分钟被抢占,则 Compute Engine 不会针对这些 GPU 向您收费。

如需了解自动重启非抢占式实例的步骤,请参阅更新实例的选项

要了解如何创建挂接 GPU 的抢占式实例,请参阅创建具有 GPU 的实例

测试抢占设置

您可以在实例上运行模拟维护事件来强制进行抢占。使用此功能可以测试应用如何处理抢占式实例。请参阅测试可用性政策,了解如何在实例上测试维护事件。

您还可以通过关停实例来模拟实例抢占,这样做不但可以省去模拟维护事件的操作,还可避免配额限制。

后续步骤