iPXE 启动

https://blueprints.launchpad.net/ironic/+spec/ipxe-boot

此蓝图提出了在 Ironic 中添加 iPXE 支持所需的工作。

问题描述

由于我们的部署 ramdisk 的大小将持续增加(Ironic Python Agent),我们需要一种更可靠的方式通过网络传输这些数据,而无需依赖 TFTP。TFTP 的问题在于它不可靠,任何传输错误都会导致启动问题(TFTP 中的第一个 T 代表 trivial,意为“微不足道的”)。

提议的变更

通过添加对 iPXE 的支持,我们将能够通过 HTTP 传输数据,而 HTTP 是一种可靠的协议。

  • 新的配置选项
    • ipxe_enabled:是否启用 iPXE。

    • ipxe_boot_script:主 iPXE 脚本文件的路径。

    • http_server:HTTP 服务器的 IP 地址。

    • http_root:HTTP 根路径。

  • 在生成 PXE 配置文件时,内核和 initrd 参数应包含指向文件的 HTTP URL,而不是 TFTP 路径。

  • 所有配置文件、ramdisk 和内核现在都将放在 HTTP 目录中,而不是 TFTP 目录中。

  • pxe_bootfile_name 配置选项应指向 iPXE 镜像 (undionly.kpxe)。

  • iPXE 的配置模板。

  • pxe_config_template 配置选项应指向 iPXE 配置模板。

  • 一个 iPXE 脚本文件(ipxe_boot_script 配置选项),该文件在客户端加载 iPXE 镜像后被获取,然后脚本将加载该请求的特定 MAC 的 iPXE 配置文件。

  • 在将 DHCP 启动选项传递给 Neutron 时,我们还必须传递指向 iPXE 脚本文件的 HTTP 链接。

重要的是要注意,Ironic 不负责管理 HTTP 服务器,就像 TFTP 服务器一样,它应该在部署 ironic-conductor 的节点上配置并运行。

另一个重要的说明是,用于链式加载的 iPXE 镜像 (undionly.kpxe) 通过 TFTP 发送到客户端,因此我们仍然需要一个正在运行的 TFTP 服务器,这是整个过程中唯一的 TFTP 事务,一旦客户端加载了 iPXE,所有操作都通过 HTTP 进行。

备选方案

继续使用标准的 PXE 并依赖 TFTP 协议来传输数据。

数据模型影响

REST API 影响

驱动程序 API 影响

Nova 驱动程序影响

安全影响

虽然本规范中提出的工作不包括这一点,但 iPXE 支持使用 HTTPS 协议,这允许加密与 HTTP 服务器的所有通信,可以将此补丁视为未来实施该功能的管道工作。

其他最终用户影响

要启用 iPXE,用户需要设置 http_root、http_server 和 ipxe_enabled 配置选项,以及 tftp_root 和 tftp_server 选项。

可扩展性影响

作为未来的工作,我们可以添加支持,以便能够直接从 Glance 或 Swift 获取镜像和配置文件,因为它们已经是可扩展的。

性能影响

TFTP 可能会非常慢,因此通过 HTTP 传输数据可以提高从 conductor 到正在启动的节点传输镜像的速度。

其他部署者影响

新的配置选项
  • ipxe_enabled:是否启用 iPXE。

  • ipxe_boot_script:主 iPXE 脚本文件的路径。

  • http_server:HTTP 服务器的 IP 地址。

  • http_root:HTTP 根路径。

默认情况下,iPXE 将被禁用,因此不应更改 Ironic 的当前部署/配置流程。未来,由于我们正朝着将 Ironic Python Agent 作为标准的配置方法发展,我们可能希望作为该工作的一部分默认启用 iPXE。

开发人员影响

实现

负责人

主要负责人

lucasagomes

其他贡献者

工作项

请参阅“Proposed change”(提议的更改)部分。

依赖项

一个正在运行的 HTTP 服务器。

测试

  • 单元测试。

  • 添加支持,以便能够在 DevStack 中配置 Ironic 以使用 iPXE。

文档影响

应修改文档,以指导操作员如何启用和配置 Ironic 以使用 iPXE。

参考资料