通过 Glance 属性覆盖 PXE 选项¶
https://bugs.launchpad.net/ironic/+bug/1526409
该提案介绍了允许使用特定内核命令行启动镜像所需的工作。
问题描述¶
某些镜像需要特定的内核命令行才能正确启动。目前,Ironic 尝试通过获取镜像文件系统的 UUID 并将其设置为 root= 参数来确定诸如镜像位于哪个根文件系统之类的因素。但这对于所有镜像来说都不正确,因为有些镜像可能需要从不同的根文件系统启动,例如:
其 LVM 卷的设备路径 [root=/dev/mapper/vg-lv_root]
来自一个 squashfs 文件系统 [root=live:<path>]
一个 btrfs 子卷 [root=/dev/disk/by-uuid/<UUID of btrfs-root>]
作为一个实际例子,Fedora Atomic 使用 lvm 和 ostree。它需要如下示例的内核命令行才能正确启动
nofb nomodeset vga=normal console=tty1 no_timer_check
rd.lvm.lv=atomicos/root root=/dev/mapper/atomicos-root
ostree=/ostree/boot.0/fedora-atomic/a002a2c2e44240db614e09e82c/0
提议的变更¶
以同样的方式,Ironic 会查看 Glance 镜像属性以找到镜像的内核和 ramdisk 的 Glance UUID (kernel_id 和 ramdisk_id),并将节点的 instance_info 字段填充 kernel 和 ramdisk 键。
该规范建议添加一个新的镜像属性字段,名为 kernel_cmdline,Ironic 将会查看该字段,如果存在,则会将节点的 instance_info 字段填充一个 kernel_cmdline 键。
如果 instance_info.kernel_cmdline 被填充,Ironic 将会跳过获取根分区文件系统的 UUID,并使用来自 instance_info 字段的命令行,而不是模板中的默认命令行。重要的是要注意,pxe_append_params 配置选项中存在的值仍然会被 Ironic 附加到镜像的自定义内核命令行末尾。
在 instance_info 字段中设置键很重要,因为它也允许 Ironic 在不使用 Glance 的独立模式下运行。
备选方案¶
部署需要特定内核命令行的镜像时,始终使用整个磁盘镜像
数据模型影响¶
无
状态机影响¶
无
REST API 影响¶
无
客户端 (CLI) 影响¶
无
RPC API 影响¶
无
驱动程序 API 影响¶
无
Nova 驱动程序影响¶
无
Ramdisk 影响¶
N/A
安全影响¶
无
其他最终用户影响¶
无
可扩展性影响¶
无
性能影响¶
无
其他部署者影响¶
想要部署具有特定内核命令行的镜像的部署者应在尝试启动镜像之前了解并在 Glance 镜像属性中设置它。
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
lucasagomes <lucasagomes@gmail.com>
- 其他贡献者
无
工作项¶
让 Ironic 查看 Glance 镜像中的
kernel_cmdline属性,如果存在,则将其设置为节点的instance_info字段在准备启动用户镜像时,让 Ironic 检查节点的
instance_info字段是否包含名为kernel_cmdline的键(以及kernel_id和ramdisk_id),如果是,则使用该内核命令行启动镜像。
依赖项¶
无
测试¶
单元测试
升级和向后兼容性¶
无
文档影响¶
Ironic 部署文档将会更新以反映该规范所做的更改。