故障排除

防火墙

由于防火墙设置和自定义的性质,bifrost 不会更改节点上的任何本地防火墙。用户必须确保运行 bifrost 的节点的防火墙允许被引导的节点连接到以下端口

67/UDP for DHCP requests to be serviced
69/UDP for TFTP file transfers (Initial iPXE binary)
6385/TCP for the ironic API
8080/TCP for HTTP File Downloads (iPXE, Ironic-Python-Agent)

如果您遇到任何其他问题,强烈建议在尝试部署单个节点时使用 tcpdump 来捕获和检查两个节点之间的流量交换。

节点锁定错误

这是由于 ironic 中的节点状态检查线程,它是一个锁定操作,因为它利用 IPMI。最佳操作是重试该操作。如果这种情况经常发生,可能需要进行调整。

示例错误

NodeLocked: Node 00000000-0000-0000-0000-046ebb96ec21 is locked by
host $HOSTNAME, please retry after the current operation is completed.

构建 IPA 镜像

排查涉及 IPA 的问题可能非常耗时。IPA 开发人员强烈建议用户构建自己的自定义 IPA 镜像,以便注入诸如 SSH 密钥之类的内容,并启用代理调试,这必须在自定义镜像中完成,因为目前没有机制可以通过内核命令行启用调试。

可以使用多种方式构建自定义 IPA 镜像,最常用的机制是使用 diskimage-builder,因为这些发行版通常比 Tiny Core Linux 具有更好的硬件支持。

DIB 镜像

https://docs.openstack.org/ironic-python-agent-builder/2025.2/admin/dib.html

TinyIPA

https://docs.openstack.org/ironic-python-agent-builder/2025.2/admin/tinyipa.html

有关 diskimage-builder 的文档,请参阅:

https://docs.openstack.org/diskimage-builder/2025.2/.

应该注意的是,diskimage-builder 的安装和使用步骤,以创建 Bifrost 的 IPA 镜像与 ironic 相同。请参阅:https://docs.openstack.org/ironic/2025.2/install/deploy-ramdisk.html

完成构建后,您需要将镜像文件复制到 /var/lib/ironic/httpboot 文件夹中。

IPA 代理出现意外/未知错误

许多由于 IPA 代理导致的问题可以通过构建自定义 IPA 镜像来解决。请参阅 构建 IPA 镜像,了解有关构建您自己的 IPA 镜像的信息。

通过控制台获取 IPA 日志

  1. 默认情况下,bifrost 将代理日志设置为记录到系统控制台。由于硬件差异,您可能需要调整传递到部署 ramdisk 的参数。这可以完成,如下所示在 ironic.conf 中所示

    kernel_append_params=nofb nomodeset vga=normal console=ttyS0 systemd.journald.forward_to_console=yes
    

    参数会因您的硬件类型和配置而异,但是 systemd.journald.forward_to_console=yes 设置是默认设置,并且仅适用于基于 systemd 的 IPA 镜像。

    上面的示例有效地禁用了内核尝试设置视频模式的所有尝试,将控制台定义为 ttyS0 或第一个串行端口,并指示 systemd 将日志定向到控制台。

  2. 设置后,重新启动 ironic 服务,例如 systemctl restart ironic 并尝试重新部署节点。您将需要查看正在发生的系统控制台。如果可能,您可以使用 ipmitool 并将输出写入日志文件。

获取对运行自定义镜像 IPA 的节点的 SSH 访问权限

自定义构建的镜像需要将用户刻录到镜像中。通常,用户会使用 diskimage-builder devuser 元素来实现这一点。有关此的更多详细信息,请参见 https://docs.openstack.org/diskimage-builder/2025.2/elements/devuser/README.html

示例

export DIB_DEV_USER_USERNAME=customuser
export DIB_DEV_USER_PWDLESS_SUDO=yes
export DIB_DEV_USER_AUTHORIZED_KEYS=$HOME/.ssh/id_rsa.pub
ironic-python-agent-builder -o /path/to/custom-ipa -e devuser debian

ssh_public_key_path is not valid

Bifrost 要求执行 bifrost 的用户在其用户主目录中有一个 SSH 密钥,或者用户定义一个变量来告诉 bifrost 在哪里识别此文件。定义此变量为有效文件后,可以重新运行部署 playbook。

生成新的 ssh 密钥

请参阅 ssh-keygen 命令的手册页。

定义特定的公钥文件

用户可以通过使用 ssh_public_key_path 变量来定义特定的公钥文件。这可以在 group_vars/inventory/all 文件中设置,或在 ansible-playbook 命令行中使用 -e 命令行参数设置。

示例

ansible-playbook -i inventory/bifrost_inventory.py deploy-dynamic.yaml -e ssh_public_key_path=~/path/to/public/key/id_rsa.pub

注意:需要使用匹配的私钥才能登录到部署的机器。

从 TinyIPA 切换到另一个 IPA 镜像

在 Newton 周期内,Bifrost 的默认 IPA 镜像已更改为基于 Tiny Core Linux 的 TinyIPA,这大大缩短了测试的启动时间,但预计硬件支持较少。在 Yoga 周期中,默认镜像已更改为基于 CentOS 的镜像。

如果全新安装或重新安装,您希望更改为基于 DIB 或任何其他 IPA 镜像,则需要执行以下步骤

  1. 删除现有的 IPA 镜像 ipa.kernel 和 ipa.initramfs。

  2. 编辑 playbooks/roles/bifrost-ironic-install/defaults/main.yml 文件,并更新 ipa_kernel_upstream_urlipa_kernel_upstream_url 设置为新的 URL。对于基于 DIB 的镜像,这些 URL 将是 https://tarballs.opendev.org/openstack/ironic-python-agent/dib/files/ipa-centos9-master.kernelhttps://tarballs.opendev.org/openstack/ironic-python-agent/dib/files/ipa-centos9-master.initramfs 分别。

  3. 执行安装 playbook,并将自动下载设置的文件。如果未在重新安装之前删除文件,则不会替换它们。或者,可以直接在磁盘上替换文件。内核和 ramdisk 所在的默认位置是在 /httboot/ 中。

测试环境中的节点注册和配置

以下是在测试环境中排查节点注册和配置的几个步骤

节点电源和配置状态

如果节点注册失败,请确保节点的电源状态为“On”。默认情况下,电源状态可能是“None”。您可以使用以下命令打开节点电源并使其可用

baremetal node power on <NODE>
baremetal node manage <NODE>
baremetal node provide <NODE>

一旦节点电源打开并且配置状态为 available,请重新运行注册过程

./bifrost-cli enroll baremetal-inventory.json

成功注册后,继续进行部署

./bifrost-cli deploy baremetal-inventory.json

有关测试环境的文档,请参阅 Bifrost 测试环境指南

有关使用 Baremetal CLI 的更多信息,请参阅 Bifrost 用户 HOWTO