添加锁定和解锁堆栈操作¶
https://blueprints.launchpad.net/heat/+spec/lock-stack
应用程序供应商使用 Heat 堆栈部署其应用程序时,目前可以使用诸如 Ceilometer 警报、自动伸缩组等自动化流程,以及堆栈更新等手动流程。在某些情况下,例如应用程序的手动维护,对堆栈执行的操作可能会中断并延长维护期。对堆栈进行锁定以禁用和阻止这些类型的流程应该可以解决此问题。
问题描述¶
用例
1. 应用程序供应商对其应用程序的“维护模式”感兴趣。在维护期间,不允许进行任何拓扑更改。例如,对于需要手动重启其中一个服务器的集群数据库应用程序,需要维护模式——当服务器重启时,所有其他服务器会重新分配数据,这会导致 CPU 使用率飙升,进而可能导致不必要的横向扩展(这会引起另一个 CPU 峰值,依此类推…)。
2. 一些云管理员有一个配置堆栈,用于初始化云(创建网络、类型、镜像等),并且这些资源在云存在期间应该始终存在。锁定这些配置堆栈将防止有人意外删除/修改堆栈或其资源。
一旦融合阶段 2 投入使用,并且 Heat 执行许多其他自动化操作,此功能的重要性可能会进一步提高。能够在不中断的情况下手动执行堆栈上的管理操作非常重要。
提议的变更¶
提案是为堆栈添加“锁定”操作。类似于:nova server “lock” 或 glance-image “–is-protected” 标志。一旦堆栈被锁定,允许在堆栈上执行的唯一操作是“解锁”或“锁定”,以便更改锁定级别——Heat 引擎应该拒绝任何堆栈操作并忽略修改堆栈(例如伸缩)的信号,并且可选地忽略其底层资源。
这些 API 调用将作为对堆栈操作 API 的补充,包括“锁定”和“解锁”。
锁定操作应具有一个“level”标志,其可能的值为 {all, stacks} (default = all)。当 level = stacks 时:执行 Heat 锁定 — 这将锁定堆栈和所有嵌套堆栈(对“物理”资源的操作仍然允许)。这意味着对堆栈或其嵌套堆栈的任何操作都将被阻止。但其他堆栈资源将不会被锁定。当 level = all 时:执行 Heat 锁定并为每个支持它的堆栈资源(Nova 服务器、Glance 镜像等)启用锁定/保护。
锁定操作只能在堆栈处于最终状态(不是“IN_PROGRESS”、“INIT_COMPLETE”和“DELETE_COMPLETE”的状态)时调用。当 API 调用成功时,它将返回响应代码 200。当在堆栈处于无效状态时调用 API 时,它将返回响应代码 409。
解锁操作只能在已锁定或锁定/解锁失败的堆栈上调用。在锁定或解锁失败时调用解锁 API 的能力非常重要,以解决使堆栈处于“脏”状态的临时问题,我们希望将其恢复到先前的健康状态。
备选方案¶
将来,我们可能希望启用中断或回滚正在运行的进程(例如堆栈创建重试或伸缩)并锁定堆栈,而不是等待正在运行的进程完成。
实现¶
负责人¶
- 主要负责人
noa-koffman melisha avi-vachnis
里程碑¶
- 完成目标里程碑
liberty-1
工作项¶
API 变更: - 支持现有 stack-action API 中的“lock”和“unlock”操作。 - 锁定堆栈将通过 stack actions api 调用:HTTP POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions,请求体如下:{ “lock”:{“level”: stacks } } - 解锁堆栈将类似地调用,请求体如下:{ “unlock”: null }
引擎变更:在 Heat 中开发一个锁定堆栈逻辑,以防止堆栈操作(挂起/恢复)、更新堆栈、自动伸缩等发生。将来我们可能会添加额外的锁定模式,以允许锁定堆栈的操作,但允许自动伸缩和挂起/恢复操作。
堆栈的 ACTIONS 现在将包含两个新操作(“LOCK”和“UNLOCK”)
- 将创建用于锁定和解锁堆栈的新方法,这将
类似于挂起和恢复方法。
- 与现有的(挂起和恢复)堆栈操作类似,新方法
将触发对堆栈资源中的“handle_lock”和“handle_unlock”方法的调用。对于不实现锁定的资源,此方法将没有任何实际影响。
- 应添加适当的堆栈和堆栈资源状态(LOCK_IN_PROGRESS,
LOCK_COMPLETE, LOCK_FAILED, UNLOCK_IN_PROGRESS, UNLOCK_COMPLETE, UNLOCK_FAILED)。每种状态允许的操作如下:LOCK_IN_PROGRESS: 无 LOCK_COMPLETE: 解锁、锁定(以便启用更改锁定级别) LOCK_FAILED: 解锁、删除、锁定 UNLOCK_COMPLETED: 除解锁外的所有操作。 UNLOCK_FAILED: 删除、解锁 UNLOCK_IN_PROGRESS: 无
- 引擎对堆栈的任何操作,除了解锁堆栈,将
仅在验证堆栈未被锁定后才开始。
- 引擎应在开始锁定过程之前验证堆栈状态是否处于适当状态。
在开始锁定过程之前。
客户端变更
将添加 action-lock 命令,这将包括“锁定资源”
- action-lock 命令将允许使用“–level”标志(将添加)传递“level”参数,类似于 stack-create 命令。用法:heat action-lock <堆栈名称或 ID> –level=stacks
“–level”标志(将添加),类似于堆栈创建命令。用法:heat action-lock <堆栈名称或 ID> –level=stacks
- 将添加 action-unlock 命令,用法与 action-suspend 和
action-resume 相同,不带参数标志。用法:heat action-unlock <堆栈名称或 ID>
文档变更
- 更新 developer.openstack.org/api-ref-orchestration-v1.html,其中包含
堆栈操作 API 的新增内容
将锁定堆栈设计添加到 wiki.openstack.org
- 将锁定和解锁操作添加到开发者 API 文档
在 …/heat/sourcecode/heat/heat.api.openstack.v1.actions.html 中
依赖项¶
无