自动扩缩实例组


托管实例组 (MIG) 提供自动扩缩功能,可让您根据负载的增减自动在 MIG 中添加或删除虚拟机 (VM) 实例。自动扩缩可帮助您的应用顺利应对流量增加的情况,并在资源需求量减少时降低费用。您只需定义自动扩缩政策,自动扩缩器即可根据测量到的负载和配置的选项执行自动扩缩。

自动扩缩的工作原理是,当有更多负载时,该功能会向您的 MIG 中添加更多虚拟机(扩容),而在虚拟机需求量减少时,该功能会删除虚拟机(缩容)。

前提条件

自动扩缩器使用 Compute Engine 服务代理在组中添加和移除实例。启用 Compute Engine API 时,Google Cloud 会自动创建此服务账号及其绑定到 Compute Engine Service Agent 角色的 IAM 政策。

如果您的项目缺少此账号(例如,如果您已移除此账号),可以手动添加:

控制台

  1. 在 Google Cloud 控制台中,前往 IAM 页面。

    转到 IAM

  2. 点击授予访问权限

  3. 新的主账号字段中,输入 service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com

  4. 选择 Compute Engine Service Agent 角色。

  5. 点击保存

gcloud

gcloud projects add-iam-policy-binding PROJECT_ID \
   --member serviceAccount:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
   --role roles/compute.serviceAgent

基础知识

自动扩缩功能使用以下基础概念和服务。

代管实例组

自动扩缩是托管实例组 (MIG) 的一项功能。 代管式实例组是根据公共实例模板创建的虚拟机 (VM) 实例的集合。自动扩缩器会根据代管式实例组的自动扩缩政策添加或删除代管式实例。虽然 Compute Engine 同时提供了代管式实例组和非代管式实例组,但只有代管式实例组可以使用自动调节程序进行扩缩。

如需了解代管式实例组和非代管式实例组之间的区别,请参阅实例组

如需了解如何创建代管式实例组,请参阅创建 MIG

自动扩缩政策

为实例组定义自动扩缩政策时,您可以指定一个或多个用于自动扩缩实例组的信号。如果您在政策中设置多个信号,自动扩缩器会计算每个信号的建议虚拟机数量,并将实例组的建议大小设置为最大值。

自动扩缩政策必须始终至少有一个扩缩信号。当您在 MIG 中启用自动扩缩时,默认情况下,自动扩缩器会添加 CPU 利用率信号。您可以修改此默认信号,也可以在政策中移除和添加其他信号。

以下部分简要介绍了基于目标利用率指标的信号和基于时间表的信号。

目标利用率指标

您可以根据以下一个或多个指标进行自动扩缩,以反映实例组的负载:

  • 平均 CPU 利用率
  • HTTP 负载均衡服务容量
  • Cloud Monitoring 指标

自动扩缩器会根据所选的利用率指标持续收集用量信息,将实际利用率与您所需的目标利用率进行比较,并使用此信息来确定该实例组是需要移除实例(缩减)还是添加实例(扩充)。

目标利用率水平是指您希望将虚拟机实例数量维持在哪个水平。例如,如果要根据 CPU 利用率进行扩缩,则可以将目标利用率水平设置为 75%,这样自动扩缩器会将所指定实例组的 CPU 利用率维持在 75% 或接近 75% 的水平。根据自动扩缩政策,每个指标的利用率水平的解释方式各不相同。

如需详细了解如何根据目标利用率指标进行扩缩,请参阅以下页面:

时间表

您可以使用基于时间表的自动扩缩功能来为预期负载分配容量。每个实例组最多可以有 128 个扩缩时间表。对于每个扩缩时间表,请指定以下各项:

  • 容量:要求的虚拟机实例数量下限
  • 时间表:开始时间、时长和重复周期(例如,一次、每天、每周或每月)

每个扩缩时间表的有效状态会从其开始时间持续到配置的时长。在此期间,自动扩缩器会扩缩实例组,使其至少具有扩缩时间表定义的实例数量。

如需了解详情,请参阅根据时间表进行扩缩

初始化期

初始化期(以前称为冷却期)是指应用在虚拟机实例上初始化所需的时长。 在应用初始化实例时,实例的用量数据可能无法反映正常情况。因此,自动扩缩器使用初始化期来通过以下方式做出扩缩决策:

  • 对于缩容决策,自动扩缩器会考虑所有实例的使用情况数据,即使实例仍处在初始化期内。 如果所有实例的平均利用率低于目标利用率,则自动扩缩器会建议移除实例。
  • 对于扩容决策,自动扩缩器会忽略仍在初始化期内的实例的使用情况数据。
  • 如果启用了预测性模式,则初始化期会指示预测性自动扩缩器在预期的负载之前进一步扩容,以便应用在负载到达时进行初始化。例如,如果您将初始化期设置为 300 秒,则预测性自动扩缩器会在预测的负载前 5 分钟创建虚拟机。

默认情况下,初始化期为 60 秒。实际的初始化时间因许多因素而异。我们建议您测试应用的初始化用时。为此,请创建一个实例,并测定从实例变为 RUNNING 状态到应用准备就绪的启动过程用时。

如果您设置的初始化期值明显长于实例初始化所花费的时间,则自动扩缩器可能会忽略合理的利用率数据,并且可能会低估所需的实例组大小,从而导致扩容时出现延迟

稳定期

CPU 利用率等自动扩缩信号非常不稳定,可能会快速变化。随着负载的增加和减少,自动扩缩器需要稳定信号,以避免持续的虚拟机删除和创建。自动扩缩器通过保持足够的虚拟机容量来稳定信号,以处理在稳定期内观察到的峰值负载。

稳定期等于 10 分钟或您设置的初始化期,以较长者为准。稳定期仅用于在自动扩缩器必须删除虚拟机时做出缩容决策。

当负载下降时,自动扩缩器不会立即删除虚拟机。自动扩缩器会在稳定期内保留所需的监控容量,并且仅在有足够的容量来满足峰值负载时删除虚拟机。这可能表现为在缩减过程中出现的延迟,但它是自动扩缩的内置功能。

如果您的应用在新虚拟机上初始化需要 10 分钟以上,则自动扩缩器会使用初始化期(而不是默认的 10 分钟稳定期),直到该虚拟机可以删除。这确保了自动缩放器删除虚拟机的决策考虑了恢复服务容量所需的时间。

当负载增加时,自动扩缩器不使用稳定期,而是会立即创建所需数量的虚拟机以满足需求。

自动扩缩模式

如果您需要调查或配置实例组而不受自动扩缩器操作的干扰,可以暂时关闭或限制自动扩缩活动。停用或限制自动扩缩器时,其配置保持不变;再次启用自动扩缩器或解除限制时,所有自动扩缩活动都会恢复。

预测性自动扩缩

如果您启用预测性自动扩缩功能以优化 MIG 来提高可用性,则自动扩缩器会根据历史数据预测未来的负载,并在预测的负载到达之前横向扩容 MIG,以使新实例能够在负载到达时提供服务。

如果您的工作负载符合以下条件,则预测性自动扩缩效果最佳:

  • 您的应用需要很长时间才能完成初始化,例如,您配置了超过 2 分钟的初始化期
  • 您的工作负载每日或每周预计会发生变化。

如需了解详情,请参阅根据预测进行扩缩

缩容控制机制

如果您的工作负载需要很长时间来初始化(例如,由于安装任务时间过长),您可以配置缩减控制机制,以降低由于突发的缩减事件导致响应延迟的风险。 具体而言,如果您希望在负载下降后不久出现负载峰值,则可以限制缩减速率,以防止自动扩缩功能将 MIG 的大小缩减到超过工作负载所能容忍的虚拟机实例数量。

如果应用的初始化速度足够快,可以在横向扩容时提取负载峰值,则无需配置缩减控制机制。

如需配置缩减控制机制,请在自动扩缩政策中设置以下属性。

  • 允许的缩减量上限。 这是指在指定的跟踪时间窗口内,您的工作负载可以接受虚拟机实例数比其实例数峰值低多少。借助此参数,您可以限制实例组的缩减幅度,这样,在更多实例开始处理负载之前,您仍然可以处理可能的负载峰值。您设置的允许的缩减量上限越小,您的实例组进行缩减所需的时间就越长。

  • 跟踪时间窗口。 这是指自动扩缩器在其中监控工作负载所需实例数峰值的历史记录。自动扩缩器不会将实例组大小调整为低于在跟踪时段内观察到的峰值与允许的缩减量上限之差。您可以使用此参数来定义自动扩缩器在移除实例之前应等待的时长(由允许的缩减量上限定义)。如果跟踪时间窗口较长,自动扩缩器会考虑更多历史峰值,这会使缩减更加保守和稳定。

如需了解详情,请参阅配置缩减控制机制了解自动扩缩器决策

建议的实例组大小是自动扩缩器根据在最近 10 分钟内观察到的峰值负载建议托管实例组保留的虚拟机数量。这些最近 10 分钟时段称为稳定期。建议的大小会不断重新计算。如果您设置了具有缩减控制机制的自动扩缩政策,则建议的大小将受缩减控制机制的约束。

限制

在自动修复期间会发生什么

自动扩缩与自动修复是彼此独立工作的。如果您为实例组配置了自动修复,并且某一实例未通过健康检查,则 MIG 会尝试重新创建该实例。在 MIG 重新创建实例时,实例组中正在运行的实例数可能低于为实例组指定的实例数下限 (autoscalingPolicy.minNumReplicas)。

价格

配置自动扩缩政策无需额外费用。自动扩缩器会动态地添加或删除虚拟机实例,因此您只需为 MIG 使用的资源付费。您可以通过在自动扩缩政策中配置最小和最大实例数来控制资源费用。如需了解 Compute Engine 价格信息,请参阅价格

后续步骤

  1. 了解自动扩缩功能在区域级 MIG 中的工作方式
  2. 如果您没有现成的 MIG,请查看如何创建托管实例组
  3. 创建可根据以下指标进行扩缩的自动扩缩器:

  4. 管理您的自动扩缩器,以获取其相关信息、配置缩减控制机制或施以临时性限制等。