11.2. ハードウェアイントロスペクションのトラブルシューティング
検出およびイントロスペクションのプロセスは最後まで実行する必要があります。ただし、Ironic の Discovery Daemon (
ironic-inspector
) は、検出する ramdisk が応答しない場合にはデフォルトの 1 時間が経過するとタイムアウトします。検出 ramdisk のバグが原因とされる場合もありますが、通常は特に BIOS の起動設定などの環境の誤設定が原因で発生します。
以下には、環境設定が間違っている場合の一般的なシナリオと、診断/解決方法に関するアドバイスを示します。
ノードのイントロスペクション開始におけるエラー
通常、イントロスペクションプロセスは、Ironic サービス全体に対するコマンドとして機能する
baremetal introspection
を使用します。ただし、ironic-inspector
で直接イントロスペクションを実行している場合には、AVAILABLE の状態のノードの検出に失敗する可能性があります。このコマンドは、デプロイメント用であり、検出用ではないためです。検出前に、ノードの状態を MANAGEABLE に変更します。
$ ironic node-set-provision-state [NODE UUID] manage
検出が完了したら、状態を AVAILABLE に戻してからプロビジョニングを行います。
$ ironic node-set-provision-state [NODE UUID] provide
イントロスペクション済みのノードが PXE でブートできない問題
ノードがリブートする前に、
ironic-inspector
はアンダークラウドのファイアウォールの ironic-inspector
チェーンに MAC アドレスを追加します。これにより、ノードは PXE でブートします。設定が正しいことを確認するには、以下のコマンドを実行します。
$ sudo iptables -L
出力には、以下のチェーンテーブルで MAC アドレスが表示されるはずです。
Chain ironic-inspector (1 references) target prot opt source destination DROP all -- anywhere anywhere MAC xx:xx:xx:xx:xx:xx ACCEPT all -- anywhere anywhere
MAC アドレスが表示されない場合に最も多く見られる原因は、SQLite データベース内にある
ironic-inspector
キャッシュの破損です。この問題を修正するには、以下のコマンドで SQLite ファイルを削除します。
$ sudo rm /var/lib/ironic-inspector/inspector.sqlite
次に以下のコマンドで、このファイルを再度作成します。
$ sudo ironic-inspector-dbsync --config-file /etc/ironic-inspector/inspector.conf upgrade $ sudo systemctl restart openstack-ironic-inspector
検出プロセスの停止
現在
ironic-inspector
は直接検出プロセスを停止することができません。回避策として、プロセスがタイムアウトするまで待つことを推奨します。必要であれば、/etc/ironic-inspector/inspector.conf
の timeout
設定を別のタイムアウト時間 (分) に変更します。
最悪の場合には以下のプロセスを使用して全ノードの検出を停止することができます。
手順11.3 検出プロセスの停止
- 各ノードの電源状態を OFF に変更します。
$ ironic node-set-power-state [NODE UUID] off
ironic-inspector
キャッシュを削除して、再起動します。$ rm /var/lib/ironic-inspector/inspector.sqlite $ sudo systemctl restart openstack-ironic-inspector
ironic-inspector
キャッシュを再同期します。$ sudo ironic-inspector-dbsync --config-file /etc/ironic-inspector/inspector.conf upgrade
イントロスペクション ramdisk へのアクセス
イントロスペクションの ramdisk は、動的なログイン要素を使用します。これは、イントロスペクションのデバッグ中にノードにアクセスするための一時パスワードまたは SSH キーのいずれかを提供できることを意味します。以下のプロセスを使用して、ramdisk アクセスを設定します。
- 以下のように
openssl passwd -1
コマンドに一時パスワードを指定して MD5 ハッシュを生成します。$ openssl passwd -1 mytestpassword $1$enjRSyIw$/fYUpJwr6abFy/d.koRgQ/
/httpboot/inspector.ipxe
ファイルを編集して、kernel
で開始する行を特定し、rootpwd
パラメーターと MD5 ハッシュを追記します。以下に例を示します。kernel http://192.2.0.1:8088/agent.kernel ipa-inspection-callback-url=http://192.168.0.1:5050/v1/continue ipa-inspection-collectors=default,extra-hardware,logs systemd.journald.forward_to_console=yes BOOTIF=${mac} ipa-debug=1 ipa-inspection-benchmarks=cpu,mem,disk rootpwd="$1$enjRSyIw$/fYUpJwr6abFy/d.koRgQ/" selinux=0
または、sshkey
パラメーターに SSH 公開キーを追記します。注記
rootpwd
およびsshkey
のパラメーターにはいずれも引用符が必要です。- イントロスペクションを開始し、
arp
コマンドまたは DHCP のログから IP アドレスを特定します。$ arp $ sudo journalctl -u openstack-ironic-inspector-dnsmasq
- 一時パスワードまたは SSH キーを使用して、root ユーザーとして SSH 接続します。
$ ssh root@192.0.2.105
イントロスペクションストレージのチェック
director は OpenStack Object Storage (swift) を使用して、イントロスペクションプロセス中に取得したハードウェアデータを保存します。このサービスが稼働していない場合には、イントロスペクションは失敗する場合があります。以下のコマンドを実行して、OpenStack Object Storage に関連したサービスをすべてチェックし、このサービスが稼働中であることを確認します。
$ sudo systemctl list-units openstack-swift*