内置硬件管理器¶
GenericHardwareManager¶
这是 ironic-python-agent 的默认硬件管理器。它提供对 硬件清单 以及默认部署、清理和维护步骤的支持。
部署步骤¶
deploy.write_image(node, ports, image_info, configdrive=None)一个支持 直接部署接口 的
write_image部署步骤。不应显式使用,但可以覆盖以提供自定义的镜像写入方式。deploy.erase_devices_metadata(node, ports)擦除所有已识别磁盘设备的分区表。可用于软件 RAID,因为它需要空的持卡磁盘。
raid.apply_configuration(node, ports, raid_config, delete_existing=True)应用软件 RAID 配置。它属于
raid接口,必须通过 ironic RAID 功能 使用。
注入文件¶
deploy.inject_files(node, ports, files, verify_ca=True)
此可选部署步骤(在 Wallaby 版本系列中引入)允许将任意文件注入到节点中。文件列表是从节点的可选 inject_files 属性与显式 files 参数连接而成的。列表中的每个项目都是一个包含以下字段的字典
path(必需)目标分区上的文件的绝对路径。所有缺失的目录都将被创建。
partition以以下 3 种方式指定目标分区
数字被视为根设备上的分区索引(从 1 开始)。
路径被视为块设备路径(例如
/dev/sda1或/dev/disk/by-partlabel/<something>)。如果缺失,则代理将尝试找到包含根设备上
path的第一个组件的分区。例如,对于/etc/sysctl.d/my.conf,查找包含/etc的分区。
deleted如果为
True,则删除该文件,而不是创建它。与content不兼容。content要写入的数据。与
deleted不兼容。可以采用两种形式内容的 URL。可以使用 Python 样式的格式化来构建特定于节点的 URL,例如
http://server/{node[uuid]}/{ports[0][address]}。Base64 编码的二进制内容。
mode、owner、group文件的数字模式、所有者 ID 和组 ID。
dirmode如果需要创建叶目录,则目录的数字模式。
此部署步骤默认禁用,可以通过部署模板或通过 ipa-inject-files-priority 内核参数启用。
已知限制
对于
owner和group,不支持名称。不支持 LVM。
清理步骤¶
deploy.burnin_cpu通过 stress-ng 对节点的 CPU 进行压力测试,持续时间可配置。默认禁用。
deploy.burnin_disk通过 fio 对节点的磁盘进行压力测试。默认禁用。
deploy.burnin_memory通过 stress-ng 对节点的内存进行压力测试,持续时间可配置。默认禁用。
deploy.burnin_network通过 fio 对一对节点的网络进行压力测试,持续时间可配置。默认禁用。
deploy.erase_devices安全擦除所有已识别磁盘设备上的所有信息。如果可用安全 ATA 擦除,则速度相对较快,否则可能需要数小时,尤其是在虚拟环境中。默认启用。
deploy.erase_devices_metadata擦除所有已识别磁盘设备的 Partition 表。可以用作比耗时的
erase_devices步骤的替代方案。deploy.erase_pstore擦除 pstore 中的条目,即内核的 oops/panic 日志记录器。默认禁用。可以通过优先级覆盖启用。
raid.create_configuration创建 RAID 配置。此步骤属于
raid接口,必须通过 ironic RAID 功能 使用。raid.delete_configuration删除 RAID 配置。此步骤属于
raid接口,必须通过 ironic RAID 功能 使用。
维护步骤¶
维护步骤可以由裸机节点的运营商调用,以修改或执行正常部署的裸机实例之外的某些中间操作。这种交互形式类似于清理,并且最终一些清理和部署步骤可以用于使用。
deploy.burnin_cpu通过 stress-ng 对节点的 CPU 进行压力测试,持续时间可配置。
deploy.burnin_memory通过 stress-ng 对节点的内存进行压力测试,持续时间可配置。
deploy.burnin_network通过 fio 对一对节点的网络进行压力测试,持续时间可配置。
raid.create_configuration创建 RAID 配置。此步骤属于
raid接口,必须通过 ironic RAID 功能 使用。raid.apply_configuration(node, ports, raid_config, delete_existing=True)应用软件 RAID 配置。它属于
raid接口,必须通过 ironic RAID 功能 使用。raid.delete_configuration删除 RAID 配置。此步骤属于
raid接口,必须通过 ironic RAID 功能 使用。deploy.write_image(node, ports, image_info, configdrive=None)一个支持 直接部署接口 的
write_image部署步骤。不应显式使用,但可以覆盖以提供自定义的镜像写入方式。deploy.inject_files(node, ports, files, verify_ca=True)一个将文件注入系统的步骤。具体而言,此步骤在本文档前面有记录。
注意
Ironic 开发人员选择限制维护步骤中可用的项目,以尽量减少数据破坏的风险。也就是说,通过本地硬件管理器重新配置 RAID 设备或将基本操作系统镜像作为服务操作的一部分写入可能是合理的。因此,应谨慎操作,如果您需要额外的删除步骤,则可能需要考虑将节点通过清理以删除工作负载。否则,如果您有使用案例,请随时联系 Ironic 开发人员,以便我们了解并启用您的使用案例。
清理保障¶
默认硬件管理器包含许多保障措施,以防止发生不安全的情况。
设备跳过列表¶
可以在节点的属性字段下的 skip_block_devices 中指定 Ironic 在清理和部署过程中不接触的设备列表。这应该是一个包含识别驱动程序提示的字典列表。例如
'skip_block_devices': [{'name': '/dev/vda', 'vendor': '0x1af4'}]
要防止删除软件 RAID 设备,请将它们的卷名称(在 target_raid_config 中定义)放入列表中。
如果 skip_block_devices 属性中存在卷名称,则 target_raid_config 中的所有逻辑磁盘都需要定义卷名称。
注意:每个逻辑磁盘一个值的一个字典。例如
'skip_block_devices': [{'volume_name': 'large'}, {'volume_name': 'temp'}]
另一种选择是在站点特定的硬件管理器中实现 filter_device 调用,以完全从列表中删除该设备。这不仅影响部署和清理,还影响检查以及依赖于内置设备列表的任何内容。
自定义硬件管理器¶
MellanoxDeviceHardwareManager¶
这是 ironic-python-agent 的自定义硬件管理器。它提供对 Nvidia/Mellanox NIC 的支持。
您可以从这里获取所有 Nvidia/Mellanox NIC 的 binraies 固件 Nvidia 固件下载
您可以从这里获取设备 ID Nvidia/Mellanox NIC 列表
您还可以查看这里 MFT 文档 以获取一些支持的参数
清理步骤¶
update_nvidia_nic_firmware_image(node, ports, images)
一个用于从所需的参数 images 列表中更新 Nvidia/Mellanox NIC 固件镜像的清理步骤。默认禁用。列表中的每个镜像都是一个包含以下字段的字典
url(必需)checksum(必需)提供的镜像的校验和。
checksumType(必需)校验和类型,可以是 (md5/sha512/sha256)。
componentFlavor(必需)NIC 的 PSID。
version(必需)固件镜像的版本,必须与镜像文件中的版本相同。
update_nvidia_nic_firmware_settings(node, ports, settings)
一个用于从所需的参数 settings 列表中更新 Nvidia/Mellanox NIC 固件设置的清理步骤。默认禁用。列表中的每个设置都是一个包含以下字段的字典
deviceID(必需)NIC 的 ID
globalConfigNIC 的全局配置
function0ConfigNIC 的第一个端口的每功能配置
function1ConfigNIC 的第二个端口的每功能配置
维护步骤¶
MellanoxDeviceHardwareManager 支持的清理步骤也可以作为维护步骤使用,如果基础设施运营商希望为正在运行的机器应用新的固件。