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。
参考资料¶
无