软件RAID支持¶
https://storyboard.openstack.org/#!/story/2004581
本规范建议添加对配置软件RAID的支持。
类似于目前硬件RAID的设置方式,RAID设置应作为清理过程的一部分进行(“清理时软件RAID”)。管理员用户定义目标RAID配置,该配置将在节点清理时应用,即在节点可用于实例创建之前。
为了允许最终用户提供有关如何配置软件RAID的详细信息,RAID设置最终应成为部署步骤的一部分。但是,将此集成到部署步骤框架中超出了本规范的范围。
问题描述¶
由于软件RAID具有硬件无关性、灵活性、可靠性和易用性,因此它已成为一种流行的选择,以防止磁盘设备故障——即使在生产环境中也是如此。像Oath或CERN这样的大型部署依赖于软件RAID来实现各种服务。
Ironic目前缺乏对这种设置的支持,这要求部署者和管理员退而求其次,以便为他们的最终用户提供基于软件RAID配置的物理实例。这些变通方法可能需要维护额外的安装基础设施,然后将其集成到安装过程中,或者要求最终用户在Ironic已经配置好机器后第二次重新安装机器,最终获得所需的磁盘设备配置。这增加了部署者和管理员的复杂性,并且也可能导致最终用户对整体配置和安装过程的不满。
提议的变更¶
该建议是通过以下方式扩展Ironic以支持软件RAID
使用节点的
target_raid_config来指定所需的软件RAID布局(有一些限制,见下文);在
ironic-python-agent中添加支持,以理解节点target_raid_config中指定的软件RAID配置,并能够创建和删除这些配置;允许
ironic-python-agent考虑软件RAID设备进行部署,例如通过根设备提示(考虑到它们本身已经通过[1]解决);在Ironic和
ironic-python-agent中添加支持,以采取必要的步骤从软件RAID启动,例如将引导加载程序安装到正确的设备上。
最初,管理员设置的 target_raid_config 将仅支持以下配置
一个跨可用设备的RAID-1,作为部署目标设备;或者
一个用作部署目标设备的RAID-1,加上一个RAID-N,其中RAID级别N可以由管理员配置。N可以是0、1、5、6或10。
支持的配置被限制为这两个选项,以避免在从RAID设备启动时出现问题。拥有一个(小)RAID-1设备来启动是一种在设置更高级RAID配置时常用的方法:RAID-1持有设备看起来像一个独立的磁盘,并且不需要引导加载程序具有理解更复杂的RAID配置的知识或能力。
为了表明确实需要软件RAID配置(并防止在通过 target_raid_config 传递的配置原本用于硬件RAID设置的情况下,意外设置软件RAID),所有逻辑磁盘的 controller 属性都需要设置为 software。如果没有此设置,IPA的GenericHardwareManager中的软件RAID代码将忽略给定的 target_raid_config。如果它仅在一个逻辑驱动器上设置,则验证代码将引发错误。
将 controller 属性设置为 software 也会被conductor用于识别软件RAID并触发所需的引导加载程序安装。虽然预计整个磁盘镜像会带有作为镜像一部分的引导加载程序配置,但对于当前的软件RAID设计,镜像将不会位于实际磁盘的开头,而是在软件RAID-1之上的第一个分区内。因此,必须显式地将引导加载程序安装到基础持有磁盘上,并且此属性将指示何时执行此操作。
有效的软件RAID配置示例如下
{
"logical_disks": [
{
"size_gb": 100,
"raid_level": "1",
"controller": "software"
},
{
"size_gb": "MAX",
"raid_level": "0",
"controller": "software"
}
]
}
对多个RAID-N的支持、选择用作持有设备的一组驱动器的支持、同时支持软件和硬件RAID设备以及支持对创建的RAID-N设备进行分区,都留待后续增强,并且超出了本规范的范围。
此外,目前不支持分区镜像,仅支持整个磁盘镜像。
一个非常接近该提案的原型可在[2][3][4]获得。
备选方案¶
如上所述,另一种选择是在物理节点上使用其他方法创建软件RAID设置,并将这些带外方法集成到各个部署的配置工作流程中。这增加了部署者/管理员方面的复杂性,并且可能对创建需要具有软件RAID设置的物理实例的用户体验产生负面影响。
数据模型影响¶
无。
状态机影响¶
无。
REST API 影响¶
无。
客户端 (CLI) 影响¶
无。
“ironic” CLI¶
无。
“openstack baremetal” CLI¶
无。
RPC API 影响¶
无。
驱动程序 API 影响¶
建议的功能可以整合到一个新的RAID接口中。
Nova 驱动程序影响¶
无。
Ramdisk 影响¶
ironic-python-agent 需要能够:* 设置和清理软件RAID设备 * 考虑软件RAID设备进行部署 * 配置RAID-1设备的持有设备,使其可引导
此功能可以整合到额外的RAID接口中。
安全影响¶
无。
其他最终用户影响¶
虽然预定义的RAID-1确保系统应该能够启动,但最终用户需要知道启动的镜像的内核需要能够理解软件RAID设备。
可扩展性影响¶
无。
性能影响¶
无。
其他部署者影响¶
部署者需要知道RAID-N设备的配置和清理仅在清理期间完成,因此任何更改都需要节点进行清理。此外,配置不适用于最终用户,仅限于管理员(作为target_raid_config是节点属性)。然而,所有这些对于硬件RAID配置都是成立的。
开发人员影响¶
无。
实现¶
最初的概念验证可在[2][3][4]获得。
负责人¶
- 主要负责人
无。
- 其他贡献者
Arne.Wiebalck@cern.ch (arne_wiebalck)
工作项¶
一旦总体想法被接受并就设计达成一致,这将定义。
依赖项¶
无。
测试¶
待定
升级和向后兼容性¶
无。
文档影响¶
需要记录如何配置软件RAID以及‘部署者影响’中概述的限制。
参考资料¶
[1] https://review.opendev.org/#/c/592639 [2] CERN Hardware Manager: https://github.com/cernops/cern-ironic-hardware-manager/commit/7f6d892ec4848a09000ed1f28f3137bf8ba917f0 [3] Patched Ironic Python Agent: https://github.com/cernops/ironic-python-agent/commit/bddac76c4d100af0103a6bc08b81dd71681a9c02 [4] Patched Ironic: https://github.com/cernops/ironic/commit/581e65f1d8986ac3e859678cb9aadd5a5b06ba60