自动伸缩组滚动更新钩子¶
钩子包含在 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,不会破坏任何现有的模板,也不会影响其他分组资源。
备选方案¶
“batch_hook” 这个名称对我来说似乎足够具有描述性,但参数名称的另一个选项可以是“pre_batch_hook”,以表示钩子在每个批次之前设置(而不是之后)。
另一种选择是在环境中设置钩子类型,而不是在滚动更新策略中设置。我认为将此本地化到 AutoScalingGroup 伸缩策略是更好的选择,并使用堆栈更新来为每个组切换钩子。
实现¶
负责人¶
- 主要负责人
sb~p (Ryan Brown)
里程碑¶
liberty-1
工作项¶
依赖项¶
无