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_passthru 和 driver_vendor_passthru 的 RPC 方法返回一个元组,其中包含返回值和一个布尔值,指示该方法是否是异步的。我们需要另一个标志来指示该值是否应作为由 Ironic API 提供的文件附加到响应对象,而不是响应体消息。
驱动程序 API 影响¶
无
Nova 驱动程序影响¶
无
Ramdisk 影响¶
N/A
安全影响¶
新的 Vendor Passthru 方法端点需要是公共 API 的一部分,以便 iPXE 可以在没有身份验证的情况下从其获取配置文件。这与代理驱动程序的 heartbeat 或 lookup 方法相同 [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_passthru和driver_vendor_passthruRPC 方法,以返回一个标志,指示返回值是否应作为文件附加到响应对象,或作为响应消息返回。更新
prepare_ramdisk和clean_up_ramdisk方法,来自 IPXEBoot 接口,以不尝试创建或删除 iPXE 配置文件。
依赖项¶
新的启动接口:此规范正在将启动逻辑从当前的 Ironic
deploy驱动程序重构到新的启动接口。
测试¶
将添加单元测试。
升级和向后兼容性¶
无
文档影响¶
iPXE 文档将更新以反映此规范所做的更改。