iPXE 动态配置

https://bugs.launchpad.net/ironic/+bug/1526275

此功能增加了在节点启动时动态生成 iPXE 配置文件支持。

问题描述

当前的 iPXE 支持依赖于将配置文件缓存到磁盘上。这在给定的 ironic-conductor 和给定的节点之间创建了依赖关系(即使节点上没有 conductor 锁),因为只有该 ironic-conductor 才能启动该节点。这也会使接管变得更加复杂,因为新的 ironic-conductor 需要为它现在管理的新的节点重新生成 iPXE 配置文件,并相应地更新 DHCP 服务器。

提议的变更

提议的实现包括创建一个新的 Driver Vendor Passthru 方法,名为 ipxe_config,该方法将根据节点的配置状态动态生成给定节点 UUID 或 mac 地址的 iPXE 配置文件。

当使用 Neutron 且启用 iPXE 时,它将配置 DHCP 服务器,以便在启动节点时使用节点的 UUID 向 Driver Vendor Passthru 端点发出请求,例如:

http://<Ironic API Address>:6385/v1/drivers/<driver_name>/vendor_passthru/ipxe_config?node_uuid=<node UUID>

Ironic 将检查节点的 provision_state 并为该状态生成 iPXE 配置文件。例如,如果节点的 provision_state 为 DEPLOYING,则我们将返回一个 iPXE 配置以启动部署 ramdisk 和内核。如果节点的 provision_state 为 ACTIVE,则我们将返回一个 iPXE 配置以从镜像 ramdisk 和内核启动(如果未指定本地启动和/或完整磁盘镜像)。对于未知的 provision_state,我们只返回一个 iPXE 配置文件,该文件在节点的控制台日志中打印出一个错误消息,并在 Ironic 日志中打印出一个警告消息。

如果操作员希望拥有一个外部 DHCP 服务器(独立版本),但仍然受益于动态生成的 iPXE 脚本文件(而不是使用静态文件),则可以通过使相同的 Driver Vendor Passthru 端点支持将节点端口的 MAC 地址作为参数传递来实现,例如:

http://<Ironic API Address>:6385/v1/drivers/<driver_name>/vendor_passthru/ipxe_config?port_address=<port address>

当脚本编写 iPXE 时,允许 扩展变量,以便操作员可以创建一个指向 Ironic API 的单个 iPXE 脚本(并在配置其外部 DHCP 服务器时扩展 ${mac} 变量),从而使他们即使未使用 Neutron,也能为他们的环境拥有动态生成的 iPXE 配置。

当镜像设置为从 http [1] 启动时,这项工作会变得更加强大,因为那时 iPXE 驱动器不需要在磁盘上保存任何状态。作为未来的工作,也可以添加支持在启动由 Glance 提供且具有 Swift 存储后端的镜像时创建 Swift Temporary URL

备选方案

继续执行我们正在做的事情,生成配置文件并将其保存到磁盘。

数据模型影响

状态机影响

REST API 影响

一个新的 Driver Vendor Passthru 方法,名为 ipxe_config,支持 GET HTTP。

客户端 (CLI) 影响

RPC API 影响

目前,vendor_passthrudriver_vendor_passthru 的 RPC 方法返回一个元组,其中包含返回值和一个布尔值,指示该方法是否是异步的。我们需要另一个标志来指示该值是否应作为由 Ironic API 提供的文件附加到响应对象,而不是响应体消息。

驱动程序 API 影响

Nova 驱动程序影响

Ramdisk 影响

N/A

安全影响

新的 Vendor Passthru 方法端点需要是公共 API 的一部分,以便 iPXE 可以在没有身份验证的情况下从其获取配置文件。这与代理驱动程序的 heartbeatlookup 方法相同 [2]

其他最终用户影响

可扩展性影响

无状态驱动程序可以更好地扩展,因为它不会依赖于任何需要保存在本地 conductor 上的信息。

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

lucasagomes <lucasagomes@gmail.com>

其他贡献者

工作项

  • 为 PXEVendorPassthru 接口创建新的 ipxe_config 方法。

  • 将传递给 DHCP 服务器的 PXE 配置选项更改为指向 Ironic API 中的 v1/drivers/<driver name>/vendor_passthru/ipxe_config?node_uuid=<node UUID> 端点,而不是指向下载 boot.ipxe 脚本的 URL(不再需要该脚本,并将删除)。

  • 扩展 vendor_passthrudriver_vendor_passthru RPC 方法,以返回一个标志,指示返回值是否应作为文件附加到响应对象,或作为响应消息返回。

  • 更新 prepare_ramdiskclean_up_ramdisk 方法,来自 IPXEBoot 接口,以不尝试创建或删除 iPXE 配置文件。

依赖项

  • 新的启动接口:此规范正在将启动逻辑从当前的 Ironic deploy 驱动程序重构到新的启动接口。

测试

将添加单元测试。

升级和向后兼容性

文档影响

iPXE 文档将更新以反映此规范所做的更改。

参考资料