Dracut 部署 Ramdisk¶
包含您的 Launchpad 蓝图的 URL
https://blueprints.launchpad.net/tripleo/+spec/tripleo-juno-dracut-ramdisks
我们当前的部署 ramdisk 包含的功能与 Dracut 等现有工具重复,并且不包含这些工具所具备的一些功能。将我们的部署 ramdisk 重实现为使用 Dracut 可以减少我们对该代码的维护负担,并使我们能够利用这些附加功能。
问题描述¶
目前,我们的部署 ramdisk 是作为在部署过程中作为 init 运行的 bash 脚本实现的。这意味着我们负责正确配置诸如 udev 和网络等内容,而这些内容通常由发行版工具处理。虽然这目前不是一个直接的问题,因为实现已经完成,但对于未来需要添加或更改此类底层功能而言,这是一种不必要的重复和额外的维护负担。
此外,由于我们的 ramdisk 是定制的,用户将无法利用他们可能已经知道的任何 ramdisk 故障排除方法。当有工具可以构建标准化且被使用我们软件的人们所理解的 ramdisk 时,这是一种不必要的负担。
提议的变更¶
通过使用标准工具(如 Dracut)来构建我们的部署 ramdisk,可以解决上述问题。这将实际上减少我们需要维护的代码量,并且应该与我们当前的所有 ramdisk 兼容,因为我们可以继续使用相同的方法来构建 init 脚本——它将作为用户脚本运行,而不是进程 0,从而允许 Dracut 为我们执行底层配置。
最初,这将与现有的 ramdisk 元素一起实现,以便在初始版本的 Dracut ramdisk 无法覆盖任何用例时提供回退选项。
替代方案¶
为了与 Red Hat/Fedora 的其余 ramdisk 保持一致,我更希望使用 Dracut 来实现此功能,但如果希望同时使用另一种构建 ramdisk 的方法,也可以将其与 Dracut 一起实现。当前的纯脚本实现甚至可以与 Dracut 版本并行保留。但是,我相信 Dracut 可用于我们所有受支持的平台,因此我不需要立即考虑替代方案。
此外,可以选择用 Dracut 模块替换我们动态构建的 init 脚本,为每个部署元素提供模块。这可能是不必要的,因为完全可以使用当前方法与 Dracut 一起使用,并且使用模块会将我们的部署 ramdisk 与 Dracut 紧密耦合,从而使将来使用任何替代方案变得困难。
安全影响¶
适用于当前部署 ramdisk 的相同安全注意事项将继续适用于 Dracut 构建的 ramdisk。
其他最终用户影响¶
此更改将使最终用户能够利用他们可能已经拥有的任何 Dracut 知识,包括动态启用部署所用命令的跟踪的能力(基本上在 bash 中设置 -x)。
性能影响¶
由于 Dracut 支持更多的硬件和软件配置,因此在引导过程中可能会有一些额外的开销。但是,我预计这与将镜像复制到目标系统所需的时间相比,可以忽略不计,因此我认为这是一个合理的权衡。
其他部署者影响¶
如前所述,Dracut 支持各种硬件配置,因此当前无法与我们的基于脚本的 ramdisk 配合使用的部署方法将变得可用。例如,Dracut 支持将网络磁盘用作根分区,因此应该可以使用单独的存储来运行无盘节点。
开发人员影响¶
开发人员向 ramdisk 镜像添加新依赖项的方式将发生一些小的变化。与其手动将可执行文件及其所需的库复制到 ramdisk,不如可以将可执行文件简单地添加到 Dracut 将包含在 ramdisk 中的列表中。
开发人员还将获得上述最终用户影响中提到的动态跟踪能力。
实现¶
负责人¶
- 主要负责人
bnemec
工作项¶
将 ramdisk 元素转换为使用 Dracut(请参阅 References 中的 WIP 更改)。
验证使用 DHCP 引导 ramdisk 是否仍然有效。
验证 nova-baremetal ramdisk 是否可以使用 Dracut 成功构建。
验证 Ironic ramdisk 是否可以使用 Dracut 成功构建。
验证 Dracut 是否可以构建 Ironic-IPA ramdisk。
验证 Dracut 调试 shell 是否提供与现有 shell 相同的功能。
为其他元素提供将其他文件安装到 ramdisk 的能力。
为其他元素提供包含其他驱动程序的能力。
找到一种方法来解决潜在的 32 位二进制文件被下载并在 ramdisk 中运行用于固件部署的问题。
依赖项¶
这将增加对 Dracut 的依赖,用于构建 ramdisk。
测试¶
由于构建部署 ramdisk 已经包含在 CI 中,因此应该自动覆盖此项。如果它与另一种方法并行实现,则需要配置 CI 作业以执行可用的不同方法。
文档影响¶
我们需要记录 Dracut 中提供的其他功能。否则,它应该以与当前 ramdisk 基本相同的方式工作,因此任何现有的文档仍然有效。
可能需要进行一些小的开发人员文档更改,以解决 Dracut 处理添加额外的内核模块和文件的方式的不同之处。
参考资料¶
使用 Dracut 构建 ramdisk 的 PoC:https://review.openstack.org/#/c/105275/
openstack-dev 讨论:http://lists.openstack.org/pipermail/openstack-dev/2014-July/039356.html