使用代理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。该实现的主要任务是在代理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对新的清理步骤强制要求。当代理ramdisk正在运行机内清理步骤时,Conductor会在每个心跳中获取上次机内清理步骤的状态。当机内清理步骤完成时,Conductor会恢复清理,如果还有其他清理步骤,则继续执行下一个清理步骤。将添加一种新机制 -
agent_base_vendor.post_clean_step_hook装饰器。这允许驱动程序实现者指定一个函数,在机内清理步骤成功完成后(并在开始下一个清理步骤之前)调用该函数。装饰的函数将接受两个参数:任务和代理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的清理后步骤钩子。此方法将使用从代理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 的相应厂商需要记录它。