全磁盘镜像支持

https://blueprints.launchpad.net/ironic/+spec/whole-disk-image-support

本规范建议在 Ironic 中添加部署全磁盘镜像的功能。

问题描述

目前,Ironic PXE 部署驱动程序和 iLO 部署驱动程序仅部署分区镜像,这使得镜像内核/ramdisk 成为强制要求。当前的方法使得无法部署无法提供相应内核/ramdisk 的镜像。一个非常重要的用例是在裸机系统上部署 Windows 镜像。

提议的变更

Ironic 的部署驱动程序将通过查询 Glance 的属性来推断是否需要部署全磁盘镜像或分区镜像,从而根据是否存在内核/ramdisk 来确定。

为了有效利用调度器,Ironic 部署全磁盘镜像将仅接受仅包含根分区的 flavor,以有效地利用整个磁盘。任何其他 flavor 类型都将在 Ironic 的验证阶段被拒绝。为了帮助调度器快速失败,将向调度器添加一个新的过滤器,该过滤器会将镜像结构与 flavor 属性进行比较,以检查是否可以继续进行调度。

对于 PXE 部署驱动程序,一旦推断出镜像结构是全磁盘镜像,该镜像将被转储到 disk-lun 上,节点将使用 pxe 配置文件重启,该配置文件指示服务器从本地磁盘启动 (PXE-localboot)。

代理驱动程序目前仅支持部署全磁盘镜像,但是,代理驱动程序将采用上述推断模式来部署全磁盘镜像。

iLO 虚拟媒体 iscsi 部署驱动程序需要进行验证,以部署全磁盘镜像,它将使用与 pxe 驱动程序写入全磁盘镜像相同的机制。

备选方案

为 Glance 镜像提供一个可选的 is_whole_disk_image 属性,并使用该值来确定部署驱动程序是否应该部署全磁盘镜像或分区镜像。

有人建议可以根据镜像格式来假设镜像类型(即分区或磁盘)。例如,AMI 用于分区镜像,QCOW2、RAW 等用于磁盘镜像。这似乎不合适,因为其他镜像格式也可以用作带有特定内核/ramdisk 的分区镜像。

数据模型影响

REST API 影响

RPC API 影响

驱动程序 API 影响

Nova 驱动程序影响

将添加一个单独的 Ironic-only Nova 过滤器,该过滤器将验证 flavor 属性与镜像结构是否匹配。

安全影响

其他最终用户影响

可扩展性影响

性能影响

其他部署者影响

对于使用 disk-image-builder 构建镜像的用户,目前 vm 元素应该有助于构建全磁盘镜像。

开发人员影响

其他部署驱动程序需要记住当前用于推断全磁盘镜像部署的模式,并在编写自己的相同功能逻辑时加以考虑。

实现

负责人

主要负责人

sirushtim

工作项

修改 PXE 部署驱动程序以支持部署全磁盘镜像。

修改 Agent 部署驱动程序以使用全磁盘镜像推断模式,因为它默认已经支持部署全磁盘镜像。

修改 iLO 虚拟媒体部署驱动程序以支持部署全磁盘镜像。

添加一个 Nova 过滤器来验证镜像结构与 flavor 属性是否匹配。

依赖项

测试

需要添加 Tempest 测试来验证磁盘镜像的部署。

Cirros 全磁盘镜像将被用于测试 Ironic 中全磁盘镜像的部署。

升级和向后兼容性

文档影响

添加用户界面文档来解释如何通过 Ironic 部署全磁盘镜像。

参考资料

https://etherpad.openstack.org/p/icehouse-ironic-windows-support