Redfish 驱动¶
概述¶
该 redfish 驱动程序支持管理符合 Redfish 协议的服务器。支持的功能包括
先决条件¶
应该在 ironic conductor 节点上安装 Sushy 库。
例如,可以使用
pip进行安装sudo pip install sushy
启用 Redfish 驱动¶
将
redfish添加到enabled_hardware_types、enabled_power_interfaces、enabled_management_interfaces和enabled_inspect_interfaces列表,以及将redfish-virtual-media和redfish-https添加到enabled_boot_interfaces中,在/etc/ironic/ironic.conf中。例如[DEFAULT] ... enabled_hardware_types = ipmi,redfish enabled_boot_interfaces = ipxe,redfish-virtual-media,redfish-https enabled_power_interfaces = ipmitool,redfish enabled_management_interfaces = ipmitool,redfish enabled_inspect_interfaces = agent,redfish
重启 ironic conductor 服务
sudo service ironic-conductor restart # Or, for RDO: sudo systemctl restart openstack-ironic-conductor
使用 Redfish 驱动注册节点¶
配置为使用该驱动程序的节点应将 driver 属性设置为 redfish。
以下属性在节点的 driver_info 字段中指定
redfish_addressRedfish 控制器的 URL 地址。它必须包含 URL 的权限部分,并且可以选择包含方案。如果缺少方案,则假定为 https。例如:
https://mgmt.vendor.com。这是必需的。redfish_system_id与驱动程序交互的 ComputerSystem 资源的规范路径。它应包含根服务、版本以及指向 ComputerSystem 的唯一资源路径。如果目标 BMC 管理多个 ComputerSystem,则此属性是必需的。否则,ironic 将自动选择唯一可用的 ComputerSystem。例如:
/redfish/v1/Systems/1。redfish_username具有 admin/server-profile 访问权限的用户帐户。虽然不是必需的,但强烈建议使用。
redfish_password用户帐户密码。虽然不是必需的,但强烈建议使用。
redfish_verify_ca如果
redfish_address具有https://方案,则驱动程序将使用安全 (TLS) 连接与 Redfish 控制器通信。默认情况下(如果未设置或设置为True),驱动程序将尝试验证主机证书。可以将其设置为包含受信任证书的文件或目录,驱动程序将使用它进行验证。要禁用验证 TLS,请将其设置为False。这是可选的。redfish_auth_typeRedfish HTTP 客户端身份验证方法。可以是
basic、session或auto。auto模式首先尝试session,如果 Redfish BMC 不支持会话身份验证,则回退到basic。默认值在 ironic 配置中设置为redfish.auth_type。大多数操作员不需要使用此设置。基于会话的身份验证通常应在大多数情况下使用,因为它可防止每次后台任务与 BMC 检查时都进行重新身份验证。
注意
如果更改了 redfish_address、redfish_username、redfish_password 和 redfish_verify_ca 字段,将触发与 BMC 建立并缓存的新会话。redfish_auth_type 字段仅用于创建新的缓存会话,或者如果 BMC 拒绝会话,则使用它。
可以使用 baremetal node create 命令使用 redfish 驱动程序注册节点。例如
baremetal node create --driver redfish --driver-info \
redfish_address=https://example.com --driver-info \
redfish_system_id=/redfish/v1/Systems/CX34R87 --driver-info \
redfish_username=admin --driver-info redfish_password=password \
--name node-0
有关注册节点,请参阅安装指南中的 使用 Ironic 注册硬件。
启动模式支持¶
基于 redfish 的硬件类型可以读取裸机节点上的当前启动模式,也可以将其设置为传统 BIOS 或 UEFI。
注意
启动模式管理是 Redfish 规范的可选部分。并非所有符合 Redfish 规范的 BMC 都会实现它。在这种情况下,配置适当的启动模式到裸机节点仍然是操作员的责任。
UEFI 安全启动¶
可以在 UEFI 启动模式下部署期间自动设置和取消设置安全启动模式,请参阅 UEFI 安全启动模式,了解如何使用它。
提供了两个干净且部署步骤用于密钥管理
management.reset_secure_boot_keys_to_default将安全启动密钥重置为出厂默认值。
management.clear_secure_boot_keys从节点中删除所有安全启动密钥。
启动模式更改时重新启动¶
虽然某些硬件能够立即更改启动模式或 UEFI 安全启动 状态,但其他型号可能需要重新启动才能应用此类更改。此外,某些硬件型号无法同时更改启动模式和安全启动状态,需要多次重新启动。
Bare Metal 服务在对 System 资源发出 PATCH 请求后刷新 System 资源。如果未观察到预期的更改,则节点将重新启动,并且 Bare Metal 服务将等待直到应用更改。最终,将恢复以前的电源状态。
这种逻辑使更改启动配置更加可靠,但代价是在最坏的情况下需要多次重新启动。
虚拟介质启动¶
虚拟介质启动背后的想法是 BMC 以某种方式获取启动镜像(例如通过 HTTP GET,标准中定义了其他方法),然后将它“插入”到节点的虚拟驱动器中,就像它被刻录在物理 CD/DVD 上一样。然后,节点可以从该虚拟驱动器启动到驻留在镜像中的操作系统。
虚拟介质启动功能的的主要优点是,潜在不可靠的 TFTP 镜像传输阶段完全被消除了 PXE 协议套件。
基于 redfish 的硬件类型完全支持通过虚拟介质启动部署/救援和用户镜像。Ironic 在节点部署时从与 ironic 节点关联的内核和 ramdisk 镜像构建可启动的 ISO 镜像。
要使用 BIOS 启动模式通过虚拟介质启动由 redfish 硬件类型管理的节点,只需将 ironic 启动接口设置为 redfish-virtual-media,而不是 ipmitool 即可。
baremetal node set --boot-interface redfish-virtual-media node-0
注意
iDRAC 固件版本低于 4.40.10.00(在 Intel 系统上)和 6.00.00.00(在 AMD 系统上)需要非标准的 Redfish 调用才能从虚拟介质启动。请考虑升级到 6.00.00.00,否则您**必须**使用 idrac 硬件类型和 idrac-redfish-virtual-media 启动接口,而不能使用旧的 iDRAC 固件。为了简单起见,Ironic 限制了固件版本低于 6.00.00.00 的 AMD 和 Intel 系统。有关更多详细信息,请参阅 iDRAC 驱动程序。
如果希望 UEFI 启动模式,用户还应提供 EFI 系统分区镜像(ESP),请参阅 配置 ESP 镜像 以了解详细信息。
如果节点的 [driver_info]/config_via_floppy 布尔属性设置为 true,ironic 将创建一个包含运行时配置参数的文件,将其放置在 FAT 镜像中,然后将镜像插入到节点的虚拟软盘驱动器中。
在通过 PXE 或虚拟介质启动时,如果用户实例需要特定的内核配置,则可以使用节点的 instance_info[kernel_append_params] 或 driver_info[kernel_append_params] 属性来传递用户指定的内核命令行参数。
baremetal node set node-0 \
--driver-info kernel_append_params="nofb vga=normal"
注意
从 Xena 版本开始支持 driver_info 字段。
从 Zed 周期开始,可以使用特殊的 %default% 语法来组合配置和节点中的参数
baremetal node set node-0 \
--driver-info kernel_append_params="%default% console=ttyS0,115200n8"
对于 ramdisk 启动,instance_info[ramdisk_kernel_arguments] 属性具有相同的用途(由于配置中没有默认值,因此不支持 %default%)。
预构建的 ISO 镜像¶
默认情况下,ISO 镜像将使用配置或节点 driver_info 中提供的部署内核和 initramfs 为每个节点构建。从 Wallaby 版本开始,可以提供预构建的 ISO 镜像
baremetal node set node-0 \
--driver_info deploy_iso=http://url/of/deploy.iso \
--driver_info rescue_iso=http://url/of/rescue.iso
注意
OpenStack 镜像服务 (glance) 镜像 ID 和 file:// 链接也被接受。
注意
在 Xena 版本之前,这些参数分别称为 redfish_deploy_iso 和 redfish_rescue_iso。为了向后兼容,仍然支持旧名称。
目前对镜像没有进行任何自定义,因此例如 第 3 层或无 DHCP 的 ramdisk 启动 将不起作用。 配置 ESP 镜像 也不必要。
虚拟介质 Ramdisk¶
可以将 ramdisk 部署接口与 redfish-virtual-media 启动接口结合使用,以便使用预先提供的虚拟介质启动远程节点。请参阅 启动 Ramdisk 或 ISO,了解如何启用和配置它。
与其提供一个 [instance_info]/image_source 参数,不如提供一个 [instance_info]/boot_iso 参数。镜像将由调度器下载,实例将使用提供的 ISO 镜像启动。根据 ramdisk 部署接口的行为,启动后机器将具有 provision_state 的 ACTIVE 状态。
baremetal node set <node name or UUID> \
--boot-interface redfish-virtual-media \
--deploy-interface ramdisk \
--instance_info boot_iso=http://url/to.iso
此初始接口不支持启动加载程序配置参数注入,因此 [instance_info]/kernel_append_params 设置将被忽略。
从 Wallaby 版本开始,支持配置驱动器,适用于具有空闲虚拟 USB 插槽的节点
baremetal node deploy <node name or UUID> \
--config-drive '{"meta_data": {...}, "user_data": "..."}'
或者通过指向原始镜像的链接
baremetal node deploy <node name or UUID> \
--config-drive http://example.com/config.img
Redfish HTTP(s) 启动¶
redfish-https 启动接口与 redfish-virtual-media 启动接口非常相似。在这个驱动程序中,我们组合一个 ISO 镜像,并请求 BMC 通知 UEFI 固件启动 Ironic ramdisk,或者其他 ramdisk 镜像。这种方法旨在允许一种参与模式,在这种模式下,我们对通过自动配置(如 DHCP)解决和发现 Ironic 部署的依赖性最小,并且在某种程度上模仿了供应商通过 HTTP URL 启动的示例。
此接口有一些基本的限制。
没有配置驱动器功能,而虚拟媒体确实有助于提供此功能。
此接口依赖于 BMC、EFI 固件和启动加载程序,这意味着我们可能无法看到 ISO 镜像中额外的嵌入文件和内容。这与使用网络启动时
ramdisk部署接口的基本限制相同。这是一个仅支持 UEFI 的启动接口。此接口不支持传统启动。
对于此接口,一个好的起点是将其视为更高安全性的网络启动,因为我们明确地告诉 BMC 节点应该从哪里启动。
与 redfish-virtual-media 启动接口一样,您需要创建一个 EFI 系统分区镜像(ESP),请参阅 配置 ESP 镜像 以获取有关如何执行此操作的详细信息。
此外,如果您想使用 ramdisk 部署接口,则 虚拟媒体 Ramdisk 中涵盖的相同基本说明适用,只需将 redfish-https 作为 boot_interface,并请记住,redfish-https 启动接口不存在配置驱动器。
限制与问题¶
Ironic 包含两种向远程 BMC 提供 HTTP(S) URL 的不同方式。第一种是 Swift,当 redfish.use_swift 设置为 true 时启用。Ironic 将文件上传到 Swift,然后以临时 Swift URL 的形式共享。虽然具有高度可扩展性,但此方法确实存在一些问题,即某些供应商的 BMC 拒绝带有 & 或 ? 字符的 URL。在这种状态下,没有可用的解决方法来利用 Swift。
当 redfish.use_swift 设置为 false 时,Ironic 将在 deploy.http_root 文件夹结构中本地存储文件,然后生成一个 URL,指向 BMC 连接到通过 deploy.http_url 配置的 HTTP 服务。
带外检查¶
redfish 硬件类型可以通过查询兼容 Redfish 的 BMC 来检查裸机节点。与 inspector 硬件类型的工作方式(即启动到内省 ramdisk)相比,此过程快速且可靠。
注意
redfish 检查接口依赖于 Redfish 规范的可选部分。并非所有符合 Redfish 规范的 BMC 都会提供所需的信息,在这种情况下,裸机节点检查将失败。
注意
local_gb 属性并非总是可以发现的,例如,当节点没有本地存储或 Redfish 实现不支持所需的模式时。在这种情况下,该属性将被设置为 0。
检索 BIOS 设置¶
当 bios 接口 设置为 redfish 时,Ironic 将检索节点 BIOS 设置,如 BIOS 配置 中所述。此外,通过 Sushy,Ironic 将从节点获取 BIOS 属性注册表(BIOS 注册表),该注册表是一个模式,提供有关设置的详细信息。以下字段将返回在 BIOS API(/v1/nodes/{node_ident}/bios)中,以及设置名称和值
Field |
描述 |
|---|---|
|
设置类型 - |
|
当 attribute_type 为 |
|
当 attribute_type 为 |
|
当 attribute_type 为 |
|
当 attribute_type 为 |
|
当 attribute_type 为 |
|
该设置是只读的,无法修改 |
|
该设置特定于此节点 |
|
更改此设置后需要节点重启 |