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 处理添加额外的内核模块和文件的方式的不同之处。

参考资料