nova 支持 pxe 启动吗?

nova 支持 pxe 启动吗?

我正在开发一个基于 OpenStack 的项目。现在我们需要一个虚拟机来从 PXE 启动。我找不到任何相关文档。nova 支持 PXE 启动吗?如果是,我该如何创建一个相当于从 PXE 启动的裸机的 KVM 映像?

答案1

您可以安装启动到磁盘上并使用 syslinux(或其他引导程序)加载它;这将使您获得与通过 PXE BIOS 启动的系统完全相同的行为。iPXE 发行版包含用于构建可启动 ISO 映像的工具,您可以使用该工具在 OpenStack 中启动系统,或者您可以使用非常相似的设置构建硬盘映像。

  1. 创建磁盘映像:

    $ dd if=/dev/zero of=/tmp/boot.img bs=1M count=4
    
  2. 对图像进行分区:

    $ fdisk /tmp/boot.img
    
  3. 你需要设置气缸数

  4. 创建类型的单个分区b并使其可启动(n创建、a切换启动标志)。

  5. 将图像连接到环回设备。

    # losetup -fP /tmp/boot.img
    
  6. 创建一个 msdos 文件系统。

    # mkdosfs -I /dev/loop0p1
    
  7. 挂载文件系统。

    # mount /dev/loop0p1 /mnt
    
  8. 安装 syslinux。

    # syslinux --install /dev/loop0p1
    
  9. 复制ipxe.krn到设备上(从某处...您自己构建它或者从 ipxe ISO 复制它)。

  10. 创建适当的 syslinux 配置,例如:

    DEFAULT ipxe
    LABEL ipxe
      KERNEL ipxe.krn
    

通过在本地 KVM 实例上启动它来测试它。将其上传到 openstack 并使用它启动。请注意,在此示例中,我们创建了一个非常小的(4M)磁盘映像,但您也可以创建一个大磁盘映像,然后在其上放置一个小分区。这完全取决于您要完成的任务。

答案2

经过进一步的研究,我发现事情并没有那么困难。我们只需要修改 nova 代码,添加一行

<boot dev=network>

在 vm 配置 xml 文件中。因为 nova 使用 libvirt,而 libvirt 已经支持 PXE 启动。无论如何,感谢大家的帮助。

答案3

云的周边框架需要支持传递这些选项。如果您使用实例私有网络功能,这将限制您,因为当前设置不允许将额外选项传递给提供 DHCP 支持的 dnsmasq 守护程序。您必须修改产品的源代码以提供用于输入 PXE 选项的接口以及将这些选项传递给底层 dnsmasq 进程的适当机制。

但是,如果您使用的是“扁平”网络并提供自己的 DHCP 服务,那么可以——可以使用支持 PXE 的适当启动映像,并且您将进行 PXE 启动。

我工作的公司,灵光,使用 KVM 和 DNSmasq 的方式与 NOVA 相同。至少在内部,我们使用酶联免疫吸附试验启动实例。磁盘映像在启动时具有 gPXE 加载程序,其余部分是用于所需卷大小的稀疏空间。

至于对启动 PXE 的统一支持,我可能会在下一个小版本发布周期将其纳入我们的产品中,并且有可能在之后的某个时间移植到 NOVA。

答案4

为了<boot dev=network>在 IceHouse v.2014.1.5 中向 XML 添加标签,我必须添加以下行:

    os.append(etree.Element("boot", dev='network'))

代码之前(for循环之外):

    for boot_dev in self.os_boot_dev:
        os.append(etree.Element("boot", dev=boot_dev))

1195 号线附近/usr/lib/python2.7/dist-packages/nova/virt/libvirt/config.py(我还必须删除同一目录中的 config.pyc 并重新启动 nova 服务)

相关内容