自动伸缩组滚动更新钩子

钩子包含在 Kilo 版本中,但并未解决钩子的有用用例。目前,存在预创建和预更新钩子,但可以为 OS::Heat::AutoScalingGroup 添加一个特殊钩子,以便在每次滚动更新的批次之前设置钩子。

问题描述

在使用 TripleO 时,通常希望暂停以检查更新是否按预期进行(这就是钩子存在的原因),并且滚动更新策略提供的“pause_time”可以用于类似目的。

问题在于,您可能无法在设置的 pause_time 内充分测试滚动更新批次的结果,但您没有办法向 heat 发出信号以增加更多时间。或者 pause_time 可能过长,导致更新时间过慢。

能够在批次之间设置断点是一个更好的解决方案,因此操作员可以花费任意长(最长为堆栈超时)或短的时间来确认升级是否按计划进行。

提议的变更

为了使调试和验证滚动更新更容易,我建议在 rolling_updates 中添加一个名为 ‘batch_hook’ 的参数,如下所示。

my_asg:
  type: "OS::Heat::AutoScalingGroup"
  properties:
    desired_capacity: 4
    ...
    rolling_updates:
      batch_hook: true
      min_in_service: 1
      ...

batch_hook 选项和 pause_time 将是互斥的,因为同时拥有设置的暂停时间和批次之间的钩子没有太大意义。

这将仅限于 AutoScalingGroup,不会破坏任何现有的模板,也不会影响其他分组资源。

备选方案

  1. “batch_hook” 这个名称对我来说似乎足够具有描述性,但参数名称的另一个选项可以是“pre_batch_hook”,以表示钩子在每个批次之前设置(而不是之后)。

  2. 另一种选择是在环境中设置钩子类型,而不是在滚动更新策略中设置。我认为将此本地化到 AutoScalingGroup 伸缩策略是更好的选择,并使用堆栈更新来为每个组切换钩子。

实现

负责人

主要负责人

sb~p (Ryan Brown)

里程碑

liberty-1

工作项

依赖项