Redfish 驱动

概述

redfish 驱动程序支持管理符合 Redfish 协议的服务器。支持的功能包括

先决条件

  • 应该在 ironic conductor 节点上安装 Sushy 库。

    例如,可以使用 pip 进行安装

    sudo pip install sushy
    

启用 Redfish 驱动

  1. redfish 添加到 enabled_hardware_typesenabled_power_interfacesenabled_management_interfacesenabled_inspect_interfaces 列表,以及将 redfish-virtual-mediaredfish-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
    
  2. 重启 ironic conductor 服务

    sudo service ironic-conductor restart
    
    # Or, for RDO:
    sudo systemctl restart openstack-ironic-conductor
    

使用 Redfish 驱动注册节点

配置为使用该驱动程序的节点应将 driver 属性设置为 redfish

以下属性在节点的 driver_info 字段中指定

redfish_address

Redfish 控制器的 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_type

Redfish HTTP 客户端身份验证方法。可以是 basicsessionautoauto 模式首先尝试 session,如果 Redfish BMC 不支持会话身份验证,则回退到 basic。默认值在 ironic 配置中设置为 redfish.auth_type。大多数操作员不需要使用此设置。基于会话的身份验证通常应在大多数情况下使用,因为它可防止每次后台任务与 BMC 检查时都进行重新身份验证。

注意

如果更改了 redfish_addressredfish_usernameredfish_passwordredfish_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_isoredfish_rescue_iso。为了向后兼容,仍然支持旧名称。

目前对镜像没有进行任何自定义,因此例如 第 3 层或无 DHCP 的 ramdisk 启动 将不起作用。 配置 ESP 镜像 也不必要。

虚拟介质 Ramdisk

可以将 ramdisk 部署接口与 redfish-virtual-media 启动接口结合使用,以便使用预先提供的虚拟介质启动远程节点。请参阅 启动 Ramdisk 或 ISO,了解如何启用和配置它。

与其提供一个 [instance_info]/image_source 参数,不如提供一个 [instance_info]/boot_iso 参数。镜像将由调度器下载,实例将使用提供的 ISO 镜像启动。根据 ramdisk 部署接口的行为,启动后机器将具有 provision_stateACTIVE 状态。

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

设置类型 - EnumerationIntegerStringBooleanPassword

allowable_values

当 attribute_type 为 Enumeration 时,允许值的列表

lower_bound

当 attribute_type 为 Integer 时,允许的最低值

upper_bound

当 attribute_type 为 Integer 时,允许的最高值

min_length

当 attribute_type 为 String 时,值可以拥有的最短字符串长度

max_length

当 attribute_type 为 String 时,值可以拥有的最长字符串长度

read_only

该设置是只读的,无法修改

unique

该设置特定于此节点

reset_required

更改此设置后需要节点重启

进一步的主题