UEFI 支持 Ironic 部署驱动

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

本规范建议为裸机节点添加基于 UEFI 的部署支持。

问题描述

大多数新硬件都配备 UEFI 启动模式,与传统的 BIOS 系统相比,它具有多项技术优势。新的服务器还具有兼容性支持模块 (CSM),提供 BIOS 兼容性。

目前 Ironic 中没有机制允许用户选择并部署能够以 UEFI 启动模式启动的裸机节点。

提议的变更

准备环境

  1. 操作员将裸机节点设置为以所需的模式启动 - bios 或 uefi。

  2. 操作员可以使用节点 capabilities 属性将启动模式告知 ironic。操作员可以在节点的 properties 中添加新的 capability boot_mode=uefiboot_mode=bios

准备风味以进行启动模式选择

nova 风味中的 extra_specs 字段可用于选择具有所需启动模式的机器。操作员可以创建一个具有 boot_mode=biosboot_mode=uefi 的风味,以选择设置为完全相同的 boot_mode 的裸机节点。

如果 nova 风味的 extra_specs 中不存在 boot_mode,则 nova 调度器可能会提供配置为任何启动模式的裸机节点。

Pxe 部署驱动程序更改

为了执行 UEFI 启动模式部署,Pxe 部署驱动程序需要进行的更改

  • 添加新的 pxe 配置选项

    • uefi_pxe_bootfile_name:指定要使用的 efi 引导加载程序。

    • uefi_pxe_config_template:指定相应的 efi 引导加载程序配置模板。

  • 通过读取 uefi_pxe_bootfile_name 及其对应的 uefi_pxe_config_template,为 UEFI 准备 pxe 配置。

    • 目前我将使用 elilo.efi 引导加载程序。

    • elilo.efi 引导加载程序要求配置文件的命名方式与 DHCP 服务器分配的 IP 地址相同。它不识别以 MAC 地址命名的配置文件。

  • 使用正确的 UEFI 引导文件更新 neutron 端口 DHCP 额外选项

    • bootfile-name:该值应从 uefi_pxe_bootfile_name 中获取

其他部署驱动程序更改

其他部署驱动程序可以在其部署驱动程序代码中处理 uefi 引导选项,以支持 UEFI 启动模式。

一些部署驱动程序(例如 iLO 驱动程序,它使用 proliantutils 库)能够自行更改启动模式,而不是依赖管理员更改启动模式。此类部署驱动程序可以添加功能以在收到请求时动态更改启动模式。管理员只需要记录机器应该使用的 boot_mode(管理员无需执行“准备环境”部分中的 #1)。

整体流程

  1. Ironic virt 驱动程序从 Ironic 节点的 capabilities 字段中获取 boot_mode(如果可用),并将其注册为 hypervisor 的功能。(注意:此功能已包含在建议的 nova-ironic virt 驱动程序中)。

  2. 用户可以选择在其 extra_specs 字段中指定 boot_mode 的风味。

  3. nova 调度器的 ComputeCapabilities 过滤器将 boot_mode(如果可用)与节点的 boot_mode 进行匹配。

  4. 部署驱动程序从节点的 capabilities 属性中读取 boot_mode,然后进行适当的更改以部署过程,以所需的 boot_mode 部署和启动裸机节点。

备选方案

  • Pxe 驱动程序可以支持不同的 efiboot 加载程序:syslinux.efi、grub 等。

    • 不同的引导加载程序将有不同的方式来准备其配置文件。

    • 虽然 pxelinux 和 syslinx.efi 具有相同的配置更改,但 syslinux.efi 尚未在 ubuntu 12/13/14 上可用。syslinux.efi 计划在 ubuntu utopic 版本中发布。

    • 目前我们只支持 elilo.efi。以后可以添加对其他 efi 引导加载程序的支持。

  • 可能存在其他特定于供应商的启动模式,或 BIOS/UEFI 启动模式中的其他启动选项。我们可以逐步支持它们,建立在这些标准启动模式之上。

  • UEFI 与本地 HDD 启动

    • 目前 pxe 驱动程序不支持使用本地 HDD 启动。

    • 当部署驱动程序添加对 BIOS 模式下的本地 HDD 启动的支持时,如果驱动程序支持 UEFI 启动模式,则他们必须考虑添加对 UEFI 的支持。

  • 选择分区与整个磁盘镜像进行部署

    • 可以使用 BIOS 和 UEFI 启动模式安装分区镜像,而整个磁盘镜像可能需要特定的 boot_mode 进行部署。

    • 使用分区镜像,我们无需指定所需的 boot_mode。

    • 目前 pxe 驱动程序仅支持分区镜像,当我们添加对使用整个磁盘镜像进行部署的支持时,我们需要指定该镜像所需的启动模式并将其传递给部署驱动程序。

  • 使用 IronicBootModeFilter 调度 uefi 和 bios 启动模式请求

    • 使用“ComputeCapabilities”过滤器,我们可以将预定义的 boot_mode 调度到能够同时支持 uefi 和 bios 启动模式的节点上。例如,如果我们在能够同时支持 uefi 和 bios 启动模式的节点上将 boot_mode:uefi 设置在“capabilities”节点属性中,那么如果用户在 nova 风味中指定了“bios”,则调度器将不会选择此节点。

    • 使用 IronicBootMode 过滤器,我们可以在同一节点上调度 uefi 和 bios 启动模式请求,该节点能够支持这两种启动模式。

数据模型影响

无。

REST API 影响

无。

驱动程序 API 影响

无。

Nova 驱动程序影响

无。

安全影响

此功能将支持后续的 uefi 安全启动增强功能。

其他最终用户影响

  • 用户可以通过选择在其 extra_specs 字段中具有 boot_mode 的风味来触发 UEFI 启动模式部署。

  • Ironic 节点应具有额外的属性以支持基于 UEFI 的部署。

可扩展性影响

无。

性能影响

无。

其他部署者影响

  • 操作员可以手动将裸机节点的启动模式设置为所需模式。

  • 操作员可以在 ironic 节点的 properties 中的 capabilities 中设置新的 capability boot_mode。例如,用户可以添加 capabilities:boot_mode=uefi 用于配置为 uefi 启动模式的裸机节点。

  • 将 UEFI 引导加载程序 (elilo.efi) 复制到 tftp 根目录。

  • 设置 pxe 配置参数:uefi_pxe_bootfile_nameuefi_pxe_config_template

开发人员影响

其他部署驱动程序可以在其部署驱动程序代码中处理 uefi 引导选项,以支持 UEFI 启动模式。

实现

负责人

Faizan Barmawer。

工作项

  1. 实现支持 pxe 驱动程序中 uefi 启动模式的代码更改。

  2. 其他驱动程序可以实现支持 UEFI 机制所需的更改。

依赖项

无。

测试

将为代码添加单元测试。

文档影响

应修改文档,以指导管理员将 efi 引导加载程序放置在 tftp 根目录以及 ironic 节点属性更新中。

参考资料

http://sourceforge.net/projects/elilo/ http://webapp5.rrz.uni-hamburg.de/SuSe-Dokumentation/packages/elilo/netbooting.txt