故障排除

内省启动时出错

  • 无效的置备状态“available”

    在 Kilo 版本中,如果使用 python-ironicclient 0.5.0 或更高版本,Ironic 默认情况下会将新注册节点的置备状态报告为 AVAILABLEironic-inspector 会拒绝在此状态下进行内省,因为这些节点应该由 Nova 用于调度。 请参阅 节点状态,了解如何将节点置于正确状态的说明。

内省超时

内省在一段时间后(默认为 60 分钟,由 timeout 配置选项更改)超时可能有 3 个原因

  1. 在节点在本地缓存中找到之前,处理链中发生致命错误。 请参阅 数据处理故障排除,获取提示。

  2. 无法在目标节点上加载 ramdisk。 请参阅 PXE 启动故障排除,获取提示。

  3. ramdisk 运行期间发生故障。 请参阅 ramdisk 运行故障排除,获取提示。

数据处理故障排除

在这种情况下,ironic-inspector 日志应该能很好地说明出了什么问题。 例如,对于 RDO 或 Fedora,以下命令将输出完整的日志

sudo journalctl -u openstack-ironic-inspector

(对于版本 < 2.0.0,使用 openstack-ironic-discoverd)。

注意

服务名称和具体命令可能因其他 Linux 发行版(以及 ironic-inspector 的旧版本)而异。

如果启用了 ramdisk_error 插件,并且设置了 ramdisk_logs_dir 配置选项,ironic-inspector 会将从 ramdisk 接收到的日志存储到 ramdisk_logs_dir 目录。 但是,这取决于 ramdisk 实现。

数据处理期间的本地缓存未命中会留下如下消息

ERROR ironic_python_agent.inspector [-] inspectorerror 400: {"error":{"message":"The following failures happened during running pre-processing hooks:\nLook up error: Could not find a node for attributes {'bmc_address': u'10.x.y.z', 'mac': [u'00:aa:bb:cc:dd:ee', u'00:aa:bb:cc:dd:ef']}"}}

这种错误的潜在解释是 BMC 配置错误,其中激活了具有错误 IP 地址的通道(因此由 Ironic Python Agent 检测到并报告回来),但无法与 Ironic 在其缓存中为此节点拥有的 IP 地址匹配。

PXE 启动故障排除

PXE 启动最常成为具有多个物理网络的裸机环境中的问题。 如果硬件供应商提供远程控制台(例如,DELL 的 iDRAC),请使用它连接到机器并查看发生了什么。 您可能需要重新启动内省。

另一个信息来源是 DHCP 和 TFTP 服务器日志。 它们的具体位置取决于服务器的安装和运行方式。 对于 RDO 或 Fedora,请使用

$ sudo journalctl -u openstack-ironic-inspector-dnsmasq

(对于版本 < 2.0.0,使用 openstack-ironic-discoverd-dnsmasq)。

最后的手段是 tcpdump 工具。 使用类似如下命令

$ sudo tcpdump -i any port 67 or port 68 or port 69

来监视通过您的机器的 DHCP 和 TFTP 流量。 将 any 替换为特定的网络接口,以检查 DHCP 和 TFTP 请求是否真的到达它。

如果您看到节点未尝试 PXE 启动或尝试在错误的网络上 PXE 启动,请将机器重新启动到 BIOS 设置,并确保只允许一个相关的网卡 PXE 启动。

如果您看到节点尝试使用正确的网卡 PXE 启动但失败,请确保

  1. 网络交换机的配置不会阻止 PXE 启动请求传播,

  2. 没有额外的防火墙规则阻止访问安装了 ironic-inspector 及其 DHCP 服务器的机器上的 67 端口。

如果您看到节点接收到 DHCP 地址然后无法获取内核和/或 ramdisk 或启动它们,请确保

  1. TFTP 服务器正在运行且可访问(使用 tftp 工具进行验证),

  2. 没有防火墙规则阻止访问 TFTP 端口,

  3. SELinux 配置正确,以允许外部 TFTP 访问,

    如果 SELinux 既不是宽松模式也不是禁用的,您应该配置 tftp_home_dir 在 SELinux 中,方法是执行以下命令

    $ sudo setsebool -P tftp_home_dir 1
    

    有关更多详细信息,请参阅 手册页

  4. DHCP 服务器已正确设置为指向 TFTP 服务器,

  5. pxelinux.cfg/default 在 TFTP 根目录中包含对内核和 ramdisk 的正确引用。

注意

如果使用 iPXE 代替 PXE,请检查 HTTP 服务器日志和 iPXE 配置。

ramdisk 运行故障排除

首先,检查 ramdisk 日志是否已如 数据处理故障排除 部分所述存储在本地。 如果没有,请确保 ramdisk 按照 PXE 启动故障排除 部分所述启动。

最后,您可以尝试连接到 IPA ramdisk。 如果您有任何远程控制台访问权限,您可以查看屏幕上出现的日志。 否则,您可以重新构建 IPA 镜像,其中包含您的 SSH 密钥,以便能够登录。 使用 dynamic-logindevuser 元素进行基于 DIB 的构建,或将 authorized_keys 文件放在 /usr/share/oem/ 中进行基于 CoreOS 的构建。

Ubuntu 中的 DNS 问题故障排除

Ubuntu 使用本地 DNS 缓存,因此在调用外部 DNS 服务器之前,会先尝试 localhost 进行 DNS 解析。 当安装并配置 DNSmasq 以与 ironic-inspector 一起使用时,它可能会通过干扰本地 DNS 缓存而导致问题。 要解决此问题,请确保 /etc/resolve.conf 指向您的外部 DNS 服务器,而不是 127.0.0.1

在 Ubuntu 14.04 上,可以通过编辑 /etc/resolvconf/resolv.conf.d/head 并将您的 nameserver 添加到其中来完成。 这将确保在重新生成 /etc/resolv.conf 时它们首先出现。

DnsmasqFilter 故障排除

当内省失败并且以下错误出现在 ironic-inspector.log 中时

ERROR ironic_inspector.node_cache [-] [node: 651da5a3-4ecb-4214-a87d-139cc7778c05
state starting] Processing the error event because of an exception
<class 'ironic_inspector.pxe_filter.base.InvalidFilterDriverState'>:
The PXE filter driver DnsmasqFilter, state=uninitialized: my fsm encountered an
exception: Can not transition from state 'uninitialized' on event 'sync'
(no defined transition) raised by ironic_inspector.introspect._do_introspect:
ironic_inspector.pxe_filter.base.InvalidFilterDriverState: The PXE filter driver
DnsmasqFilter, state=uninitialized: my fsm encountered an exception:
Can not transition from state 'uninitialized' on event 'sync'
(no defined transition)

重新启动 ironic-inspector

在 VirtualBox 环境中运行 Inspector

默认情况下,VirtualBox 不会将 DMI 表暴露给客户机。 这会阻止 ironic-inspector 能够发现节点的属性。 为了在 VirtualBox 客户机上运行 ironic-inspector,必须配置主机在客户机内部暴露 DMI 数据。 为此,请在 VirtualBox 主机上运行以下命令

VBoxManage setextradata {NodeName} "VBoxInternal/Devices/pcbios/0/Config/DmiExposeMemoryTable" 1

注意

{NodeName} 替换为您希望暴露 DMI 表的客户机的名称。 必须对每个主机运行此命令才能启用此功能。