使用代理ramdisk的机内RAID配置¶
https://bugs.launchpad.net/ironic/+bug/1526398
本文档提出使用 Ironic Python Agent (IPA) 实现 RAID 配置接口。驱动程序 agent_ipmitool, agent_pyghmi, agent_ssh, agent_vbox 和 agent_ilo 将使用这种新的 RAIDInterface 实现。
问题描述¶
目前 Ironic 中没有通过带内机制配置服务器 RAID 的方法。
提议的变更¶
本文档提出使用 IPA 实现带内 RAID 配置。它建议实现父规范 [1] 中提到的 RAIDInterface。该实现将被命名为 AgentRAID。该实现的主要任务是在 agent ramdisk 上调用相应的 RAID 操作方法。感兴趣的厂商将在 Ironic Python Agent 中使用硬件管理器来实现这些方法。
以下是需要进行的更改
以下方法将作为
AgentRAID的一部分实现create_configuration- 这将在裸机节点上创建 RAID 配置。以下是步骤在 Ironic Python Agent ramdisk 中使用
clean.execute_clean_step命令来调用raid接口的create_configuration步骤。
delete_configuration- 这将在裸机节点上删除 RAID 配置。以下是步骤在 Ironic Python Agent ramdisk 中使用
clean.execute_clean_step命令来调用raid接口的delete_configuration步骤。
RAID 配置最初将仅限于擦除,通过将其清理步骤优先级硬编码为 0 来实现。我们稍后会考虑与清理机制的交互。这允许我们将
target_raid_config对新的清理步骤强制要求。当 agent ramdisk 正在运行带内清理步骤时,conductor 会在每个心跳周期获取上次带内清理步骤的状态。当带内清理步骤完成时,conductor 会恢复清理并继续到下一个清理步骤(如果有)。将添加一种新机制 -
agent_base_vendor.post_clean_step_hook装饰器。这允许驱动程序实现者指定一个函数,在带内清理步骤成功完成后(并在开始下一个清理步骤之前)调用该函数。被装饰的函数将接受两个参数:任务和 agent ramdisk 返回的清理步骤命令状态。例如
@agent_base_vendor.post_clean_step_hook( interface='raid', step='create_configuration') def _create_configuration_final(task, command):
将添加一个方法
agent._create_configuration_final作为raid.create_configuration的清理后步骤钩子。此方法将使用从 agent ramdisk 返回的实际 RAID 配置调用update_raid_info。将添加一个方法
agent._delete_configuration_final作为raid.delete_configuration的清理后步骤钩子。这将把node.raid_config设置为None。请注意,target_raid_config将保持不变,并将被未来的擦除调用重用。有可能存在使用软件 RAID 配置的硬件管理器,但这超出了本文档的范围,因为它需要将 RAID 配置作为磁盘擦除后的清理步骤运行。
备选方案¶
有些裸机服务器不支持带外 RAID 配置。它们仅支持带内 raid 配置。我认为除了使用 ramdisk 之外,没有其他替代方案。
我们可以提供一个选项,将 RAID 作为清理的一部分启用。但是,这将使 target_raid_config 对由给定 conductor 管理的所有节点强制要求。我们稍后需要重新考虑它。
数据模型影响¶
无。
状态机影响¶
无。
REST API 影响¶
无。
客户端 (CLI) 影响¶
无。
RPC API 影响¶
无。
驱动程序 API 影响¶
无。
Nova 驱动程序影响¶
无。
Ramdisk 影响¶
N/A
安全影响¶
无。
其他最终用户影响¶
无。
可扩展性影响¶
无。
性能影响¶
无。
其他部署者影响¶
无。
开发人员影响¶
其他为 OpenStack 开发驱动程序的硬件厂商可以使用 Ironic Python Agent 进行带内 RAID 配置。他们可以添加自己的硬件管理器来实现该方法并完成 RAID 配置。
实现¶
负责人¶
rameshg87
工作项¶
实现清理后步骤钩子的机制。
实现
AgentRAID
依赖项¶
实现擦除状态 - https://review.opendev.org/140826
测试¶
将添加单元测试。
升级和向后兼容性¶
无。
文档影响¶
无。Ironic 中大部分 RAID 配置细节都包含在父规范中。如果需要额外的内容,使用 AgentRAID 的相应厂商需要记录它。