电源故障恢复¶
https://storyboard.openstack.org/#!/story/1596107
本规范建议添加一个新的节点字段来反映系统检测到的任何故障。对于因电源同步失败而进入维护模式的节点,本规范提出了一种尝试从故障中恢复节点的机制。
问题描述¶
目前,ironic 的 API 和数据模型并未区分 ironic 设置节点维护(例如,当清理失败时,或者当电源状态循环无法联系 BMC 时)和操作员设置节点维护(显式的 API 操作)。
这种情况使得应用任何电源故障恢复机制变得困难。
提议的变更¶
将添加一个名为 fault 的字符串字段到 ironic 的 Node 数据模型中。它将用于记录检测到的任何故障。
该字段将根据情况设置为以下值之一(当 ironic 因以下原因之一将节点置于维护模式时)
power failure:当节点因超过最大重试次数的电源同步失败而进入维护模式时。clean failure:当节点因清理操作失败而进入维护模式时。rescue abort failure:当节点因救援中止期间清理失败而进入维护模式时。None:未检测到节点的故障;这是默认值。由于该字段在 ironic 因故障将节点置于维护模式时设置为故障,因此在节点退出维护模式(由 ironic 或用户)时,该字段将设置为 None。
对于在升级到此版本之前处于维护模式的节点,该字段也将为 None,因为我们无法确定是否(或是什么)存在故障。即使存在故障,我们也不知道操作员是否也希望将节点保持在维护模式下,出于其他原因。
将向 conductor 添加一个周期性任务。它将对 node.fault == power failure 的节点进行操作。如果成功,节点将退出维护模式。
将添加一个名为 [conductor]power_failure_recovery_interval 的整数配置选项。这是周期性任务每次运行之间的时间间隔(秒数)。默认值为 300 秒(5 分钟)。将其设置为 0 将禁用电源故障恢复。
备选方案¶
已经提出了并拒绝了使用维护设置和给定的 maintenance_reason 或 last_error 组合来进行自愈的方案,因为存在不一致性。
提出了特定的故障支持 [1],但规模太大,并且迄今为止,尚未就此达成共识。
此规范的早期版本提出使用 maintenance_type 字段代替 fault 字段。我们更喜欢 fault 字段,因为它更好地反映了它是关于故障的。 maintenance_type 导致该字段与现有的 maintenance 和 maintenance_reason 字段相关联。使用 fault 使其与 maintenance 区分开来;这将使我们更容易在未来前进,如果我们决定提供更多与故障相关的增强功能,或者将故障的概念和处理与维护分离(有些人认为维护应该仅由操作员发起)。
数据模型影响¶
将向 ironic 的节点表添加一个名为 fault 的字符串字段。
该字段将添加到 Node 对象中;对象版本将递增。
状态机影响¶
无
REST API 影响¶
该字段 fault 将添加到 Node API 对象中,ironic API 版本将更新。
节点相关的 API 端点将受到影响
POST /v1/nodes
GET /v1/nodes
GET /v1/nodes/detail
GET /v1/nodes/{node_ident}
PATCH /v1/nodes/{node_ident}
对于使用旧版 microversion 的请求,node.fault 将从响应中隐藏。这将在 hide_fields_in_newer_versions() 中完成。
字段 fault 从 API 仅可读,只能在内部修改。任何将 fault 设置为 POST/PATCH 请求的 Node 都会收到 400(错误请求)。
对 API 行为没有其他影响。
客户端 (CLI) 影响¶
“ironic” CLI¶
无
“openstack baremetal” CLI¶
CLI 将更新以支持字段 fault,受 ironic API microversion 保护。
RPC API 影响¶
无
驱动程序 API 影响¶
无
Nova 驱动程序影响¶
无,尽管我们应该更新 ironic-virt 驱动程序代码,以查看此新的 node.fault 字段,而不仅仅是 node.maintenance 字段。
Ramdisk 影响¶
无
安全影响¶
无
其他最终用户影响¶
无
可扩展性影响¶
无
性能影响¶
如果启用了用于恢复的周期性任务,它将消耗 conductor 节点上的某些资源。
在包含一些因电源故障而处于维护模式的节点的环境中,将消耗更多资源。
其他部署者影响¶
引入了一个新的选项 [conductor]power_failure_recovery_interval 以支持电源故障恢复。默认值为 300(5 分钟),如果不需要此功能,则必须设置为 0。
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
kaifeng
- 其他贡献者
dtantsur
工作项¶
更新 db 层以包含
fault字段。更改节点进入/退出维护状态的地方,以相应地设置
fault。将
[conductor]power_failure_recovery_interval选项添加到 ironic 配置,添加周期性任务以处理电源恢复。API 变更。
依赖项¶
无
测试¶
该功能将由单元测试覆盖,API 变更将由 tempest 测试覆盖。
升级和向后兼容性¶
ironic API 变更受 microversion 保护。
升级时,任何处于维护模式的节点都将 node.fault 设置为 None。这是因为没有简单/保证的方法来确定节点是否(先前)因我们的内部故障之一而进入维护模式。此外,即使我们能够确定是否是由于故障,我们也不知道操作员是否希望将节点保持在维护模式下,出于故障以外的其他原因。
如果操作员希望利用电源故障恢复机制,他们可以使节点退出维护模式。如果仍然存在问题,ironic 将执行其操作——检测故障并尝试恢复。
文档影响¶
更新 api-reference。
新选项将由配置生成器生成。