Ironic-Python-Agent (IPA) 故障排除

本文档包含 IPA 的基本故障排除信息。

访问节点上的 IPA

为了访问正在运行的 IPA 实例,必须在镜像中添加或启用一个用户。下面我们将介绍几种方法来实现这一点。

通过 ssh 访问

ironic-python-agent-builder

可以使用 dynamic-login [0] 或 devuser 元素 [1] 将 SSH 访问添加到 DIB 构建的 IPA 镜像中。

dynamic-login 元素允许操作员在镜像启动时注入一个 SSH 密钥。使用内核命令行参数来实现这一点。

dynamic-login 元素示例

  • sshkey="ssh-rsa BBA1..." 添加到 ironic.conf 文件中的 kernel_append_params 设置中

  • 使用命令 service ironic-conductor restart 重新启动 ironic-conductor

按照指南 [2] 安装 ironic-python-agent-builder

devuser 元素示例

export DIB_DEV_USER_USERNAME=username
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

通过控制台访问

如果您需要使用控制台访问,则必须启用密码,具体取决于 IPA 镜像的创建方式,有几种方法可以启用密码。

ironic-python-agent-builder: dynamic-login

希望使用密码访问的用户可以添加 dynamic-login [0] 或 devuser 元素 [1]

dynamic-login 元素允许操作员在镜像启动时动态更改 root 密码或 SSH 密钥。使用内核命令行参数来实现这一点。

使用以下命令生成密码哈希

$ openssl passwd -1 -stdin | sed 's/\$/\$\$/g'

rootpwd="<openssl output>" 值或将 sshkey="<ssh public key>" 添加到 Ironic 配置文件 (/etc/ironic/ironic.conf) 中的 kernel_append_params 设置中。例如,使用以下命令重新启动 ironic-conductor

$ sudo systemctl restart ironic-conductor

警告

  • 使用 sed 命令转义配置文件中的 $ 符号。

  • 该值周围的引号是强制性的。

  • 仅支持 1 个密码或 1 个 SSH 密钥。

ironic-python-agent-builder: devuser

用户也可以使用 devuser 元素 [1] 添加到 DIB 构建的 IPA 镜像中。按照指南 [2] 安装 ironic-python-agent-builder

示例

export DIB_DEV_USER_USERNAME=username
export DIB_DEV_USER_PWDLESS_SUDO=yes
export DIB_DEV_USER_PASSWORD=PASSWORD
ironic-python-agent-builder -o /path/to/custom-ipa -e devuser debian

如何暂停 IPA 进行调试

在调试 IPA 问题时,尤其是在清理时,可能需要在 IPA 实际启动之前登录到 RAM 磁盘(并延迟 IPA 的启动)。一种简单的方法是在节点上设置 maintenance,然后触发清理。Ironic 会将节点启动到 RAM 磁盘,但 IPA 会一直处于暂停状态,直到移除维护状态。这会打开一个登录到节点的窗口。

另一种方法是在自定义硬件管理器中添加简单的清理步骤,这些步骤会休眠,直到满足某个条件,例如直到存在某个文件。拥有多个这些“障碍步骤”可以让你逐步完成清理步骤,并在它们之间设置一个断点。

将 IPA 设置为调试日志

可以通过几种不同的方式启用调试日志。最简单的方法是将 ipa-debug=1 添加到内核命令行。为此

  • ipa-debug=1 追加到 ironic.conf 文件中的 kernel_append_params 设置中

  • 使用命令 service ironic-conductor restart 重新启动 ironic-conductor

如果系统正在运行并使用 systemd,则需要编辑服务文件。

  • systemctl edit ironic-python-agent.service

  • --debug 追加到 ExecStart 命令的末尾

  • 重新启动 IPA。请参阅下面的 手动重新启动 IPA 部分。

在哪里可以找到 IPA 日志

检索 IPA 日志将取决于使用的基本镜像。

  • 不使用 systemd 的操作系统(例如 Ubuntu 14.04)

    • 日志将在 /var/log/ 文件夹中找到。

  • 使用 systemd 的操作系统(例如 Fedora、CentOS、RHEL)

    • 可以使用 sudo journalctl -u ironic-python-agent 查看日志

    • 如果使用 diskimage-builder ramdisk,可以通过启用 journal-to-console 元素 将 journal 的所有内容(包括 ironic-python-agent 日志)输出到控制台。

此外,Ironic 默认配置为在失败时检索 IPA 日志,你可以在 Ironic 故障排除指南 中了解有关此功能的更多信息。

手动重新启动 IPA

在某些情况下,在正在运行的节点上启用调试模式很有帮助。如果系统不使用 systemd,则可以直接重新启动 IPA

sudo /usr/local/bin/ironic-python-agent [--debug]

如果系统使用 systemd,则可以使用 systemctl 重新启动服务

sudo systemctl restart ironic-python-agent.service

清理因 ProtectedDeviceError 而停止

IPA 服务已停止清理,因为裸机节点内的或连接到裸机节点的一个块设备包含一类文件系统,该文件系统可能会对潜在的运行集群造成不可修复的损害,如果意外删除。

这些文件系统可能仅用于本地存储,因此可以安全地擦除。但是,如果正在使用共享块设备,例如通过 iSCSI 或 FibreChannel 等协议提供的通过存储区域网络提供的设备。最终,主机总线适配器 (HBA) 可能不是一个完全“可检测”的实体,考虑到硬件市场以及“智能网卡”和具有特定卸载功能的融合网络适配器等因素,以支持“NVMe over Fabric”(NVMe-oF)等标准。

默认情况下,代理程序会阻止删除这些文件系统,并在检测到它们时停止清理过程。可以使用文档中描述的设置通知代理程序不需要采取任何操作后,可以重新触发清理过程。

正在查找哪些文件系统

IBM General Parallel Filesystem

Red Hat Global Filesystem 2

VmWare Virtual Machine FileSystem (VMFS)

我可以删除,如何告诉 IPA 清理磁盘?

存在四种潜在的方法来向 IPA 发出信号。请注意,所有这些选项都需要访问 Ironic 的 API 或修改 Ironic 配置。

通过 Ironic

注意

此选项要求 Ironic 的版本足以理解并显式地将此选项提供给代理程序。

告知 Ironic 向代理程序提供该选项

baremetal node set --driver-info wipe_special_filesystems=True

通过节点的 kernel_append_params 设置

可以通过使用覆盖 kernel_append_params 设置在节点级别进行设置,该设置可以在节点级别使用。示例

baremetal node set --driver-info kernel_append_params="ipa-guard-special-filesystems=False"

或者,如果您只想设置一次,可以使用 instance_info 字段,该字段会在节点撕毁时被清除。示例

baremetal node set --instance-info kernel_append_params="ipa-guard-special-filesystems=False"

通过 Ironic 的启动时 PXE 参数(全局)

全局而言,可以通过修改集群上的 ironic.conf 配置文件,将 ipa-guard-special-filesystems=False 字符串添加到 [pxe]kernel_append_params 参数中来传递此设置。

警告

如果正在运行多 conductor 部署,则需要更新所有 ironic.conf 配置文件以匹配。

通过 Ramdisk 配置

此选项需要修改 ramdisk,并且是最复杂的,但如果您有一个混合环境集群,其中共享集群文件系统可能在某些机器上存在问题,而在其他机器上则没有问题,则可能建议使用此选项。

警告

这需要重建代理程序 ramdisk,并修改嵌入式 ironic-python-agent 配置文件。如果您对这个声明感到困惑,则此选项不适合您。

编辑 /etc/ironic_python_agent/ironic_python_agent.conf 并将参数 [DEFAULT]guard_special_filesystems 设置为 False

参考