使用代理ramdisk的机内RAID配置

https://bugs.launchpad.net/ironic/+bug/1526398

本规范建议使用Ironic Python Agent (IPA) 实现RAID配置接口。驱动程序 agent_ipmitool, agent_pyghmi, agent_ssh, agent_vboxagent_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

依赖项

测试

将添加单元测试。

升级和向后兼容性

无。

文档影响

无。Ironic中大部分RAID配置细节都包含在父规范中。如果需要额外的内容,使用 AgentRAID 的相应厂商需要记录它。

参考资料

[1] https://specs.openstack.org/openstack/ironic-specs/specs/approved/ironic-generic-raid-interface.html