自动扩缩实例组

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

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

规范

  • 自动扩缩仅适用于区域和地区托管实例组 (MIG)。 不支持非托管实例组。
  • 如果停用主动式实例重新分配,则自动扩缩不适用于地区 MIG
  • 自动扩缩不适用于有状态 MIG
  • 启用自动扩缩功能时,您无法创建具有特定名称的实例。不过,您可以在创建具有特定名称的虚拟机实例后启用自动扩缩程序。
  • 如果您的 MIG 采用有状态配置,则您无法使用自动扩缩功能。
  • 不要将 Compute Engine 自动扩缩功能用于 Google Kubernetes Engine 拥有的 MIG。对于 Google Kubernetes Engine 实例组,请改用集群自动扩缩

    如果您不确定自己的实例组是否属于 GKE 集群,请在 MIG 名称中查找 gke 前缀。 例如,gke-test-1-3-default-pool-eadji9ah

  • 一个自动扩缩程序可以根据多个指标做出扩缩决策,但只能为每种类型的指标处理一项政策(Cloud Monitoring 指标属于例外情况);对于 Monitoring 指标,一个自动扩缩程序最多可以处理五项政策。自动扩缩程序会计算每项政策的建议虚拟机数量,然后根据在实例组中提供的虚拟机数量最多的政策来扩缩实例组。

  • 自动扩缩与自动修复是彼此独立工作的。 如果您为实例组配置了自动修复,并且某一实例未通过运行状况检查,则自动修复程序会尝试重新创建该实例。重新创建实例可能会导致实例组中的实例数低于您指定的自动扩缩阈值 (minNumReplicas)。

  • 如果您自动扩缩地区 MIG,则可以添加一个实例,然后立即从其中一个区域中删除该实例。如果区域中的利用率触发横向扩容,但地区 MIG 中的总体利用率不需要额外实例或其他区域需要其他实例,则会发生这种情况。

基础知识

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

托管实例组

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

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

自动扩缩政策和目标利用率

要创建自动扩缩程序,请指定自动扩缩政策和目标利用率水平,以供自动扩缩程序用于确定何时需要扩缩实例组。您可以选择使用以下政策进行扩缩:

  • 平均 CPU 利用率。
  • HTTP 负载平衡服务容量,可能基于利用率或每秒请求次数
  • Cloud Monitoring 指标。

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

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

如需了解每项政策的简要总结,请参阅政策。如需查看每项政策的详细讨论,请参阅以下内容:

冷却期

实例在初始化时,其使用量信息可能无法反映正常情况,因此使用量信息可能对于自动扩缩程序决策而言并不可靠,您可能需要忽略这些数据。请指定一个冷却期,以便让您的实例在自动扩缩程序开始从其收集使用量信息之前完成初始化。默认情况下,冷却期为 60 秒。

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

如果您设置的冷却期值明显长于实例初始化所花费的时间,那么您的自动扩缩程序可能会忽略合理的利用率数据,并且可能会低估您的实例组所需的规模,从而导致纵向扩容时出现延迟

稳定期

为了缩减实例组,自动扩缩程序会根据最近 10 分钟内的峰值负载来计算该实例组的建议目标大小。这些最近 10 分钟时段称为稳定期

借助稳定期,自动扩缩程序可确保托管实例组的建议大小始终足以处理在过去 10 分钟内观察到的峰值负载。

这一为时 10 分钟的稳定期可能表现为在缩减规模时出现的延迟,但实际上这是自动扩缩功能的一项内置特性。此延时可确保规模较小的实例组足以支持最近 10 分钟内的峰值负载。

自动扩缩模式

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

缩减控制机制

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

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

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

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

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

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

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

后续步骤

  1. 如果您没有现成的 MIG,请查看如何创建托管实例组
  2. 创建可根据以下指标进行扩缩的自动扩缩程序:

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