使用分区镜像的本地启动支持¶
https://blueprints.launchpad.net/ironic/+spec/local-boot-support-with-partition-images
该蓝图建议接受 Nova flavor 指定的启动选项,并使裸机从本地硬盘驱动器启动,而不是通过 pxe 或 vmedia 启动,具体取决于用户选择的启动选项。
问题描述¶
目前,部署分区镜像的 Ironic 驱动程序需要 Ironic-conductor 进行节点的后续重启。节点的后续重启将通过 pxe 或使用虚拟媒体进行。此外,Nova 用户无法指定启动选项(本地/网络启动)以使用分区镜像进行部署。
提议的变更¶
Nova Ironic 驱动程序应读取 flavor 键中指定的启动选项
capabilities:boot_option,该选项应通过 Nova Ironic 驱动程序通过node.instance_info字段传递。Ironic 将通过 PXE 模板中的内核 cmdline 将此信息传递给部署 ramdisk,将启动设备永久设置为 HDD,并在部署完成后清理 PXE 配置文件。
部署 ramdisk 检查内核 cmdline 中的参数并处理引导加载程序的安装。
注意
为了设置本地启动,正在部署的镜像应安装 grub2。
此规范不支持 Windows 镜像。
创建 EFI 启动分区,包括 EFI 模块并通过 efibootmgr 管理引导加载程序变量,此规范不支持。
备选方案¶
使用磁盘镜像构建器中的“localboot”元素
在使用 disk-image-builder 生成分区镜像时,我们可以使用 tripleo-image-elements 项目中提供的“localboot”元素。使用它的缺点是本地启动将在节点部署后的第一次启动期间启用。因此,需要服务器两次重启才能启用 localboot。此外,Ironic-conductor 不会意识到此更改,并继续为从 conductor 执行的重启操作提供 pxe 或 vmedia 启动。
使用整个磁盘镜像实现本地启动
实现本地启动的另一种方法是使用整个磁盘镜像进行部署。目前,这只能通过 agent 驱动程序实现。
数据模型影响¶
无。
REST API 影响¶
无。
RPC API 影响¶
无。
驱动程序 API 影响¶
无。
Nova 驱动程序影响¶
Nova Ironic 驱动程序需要将 Nova flavor 中的 capabilities:boot_option 传递到 Ironic 的 node.instance_info 字段。
安全影响¶
本地启动是一个双刃剑。一方面,如果发生断电,配置为本地启动的客户机节点可能会在控制平面之前启动。另一方面,如果断电导致控制平面无法启动,这也是一个问题。因此,此规范使本地启动和网络启动可配置为每个实例,部署者应在部署云时注意这一点。
其他最终用户影响¶
部署者可以将启动选项请求指定为 Nova flavor 的 capability。
capabilities:boot_option=local或capabilities:boot_option=netboot(默认)。将
boot_option:local或netboot设置为 node.properties 中的 capability。
可扩展性影响¶
这可以通过减少网络流量来提高可扩展性,而无需通过网络传输内核和 ramdisk 来启动节点。
性能影响¶
无。
其他部署者影响¶
正在部署的镜像应安装 grub2。
开发人员影响¶
无。
实现¶
负责人¶
- 主要负责人
lucasagomes
- 其他贡献者
faizan-barmawer
工作项¶
在 Ironic 中实现代码,该代码将检查
node.instance_info字段中的boot_option参数。如果设置为“local”,我们必须通过 PXE 配置文件的内核 cmdline 将信息传递给部署 ramdisk。
在部署完成后删除该节点的 PXE 配置文件。
在最终重启之前,将启动设备永久设置为 HDD。
在部署 ramdisk 中实现代码,该代码将查看通过内核 cmdline 传递的参数,并将引导加载程序安装到磁盘上作为部署的一部分。
依赖项¶
需要此 Nova virt Ironic 驱动程序修复,才能将 Nova flavor 中的 capabilities 传递到 Ironic 节点实例信息字段。请参阅 https://review.openstack.org/141012
测试¶
单元测试。
升级和向后兼容性¶
无。
文档影响¶
修改 Ironic 安装指南。
参考资料¶
PoC 补丁