25.9. コンテナーの設定に関するトラブルシューティング
OpenStack Platform director は、paunch を使用してコンテナーを起動し、podman を使用してコンテナーを管理し、また puppet を使用してコンテナー設定を作成します。以下の手順で、エラーが発生した場合にコンテナーを診断する方法について説明します。
ホストへのアクセス
stackrcファイルを取得します。source ~/stackrc
$ source ~/stackrcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 障害の発生したコンテナーがあるノードの IP アドレスを取得します。
(undercloud) $ openstack server list
(undercloud) $ openstack server listCopy to Clipboard Copied! Toggle word wrap Toggle overflow ノードにログインします。
(undercloud) $ ssh heat-admin@192.168.24.60
(undercloud) $ ssh heat-admin@192.168.24.60Copy to Clipboard Copied! Toggle word wrap Toggle overflow root ユーザーに変更します。
sudo -i
$ sudo -iCopy to Clipboard Copied! Toggle word wrap Toggle overflow
障害が発生したコンテナーの識別
すべてのコンテナーを表示します。
podman ps --all
$ podman ps --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow 障害の発生したコンテナーを特定します。障害の発生したコンテナーは、通常ゼロ以外のステータスで終了します。
コンテナーログの確認
各コンテナーは、主要プロセスからの標準出力を保持します。この出力をログとして使用し、コンテナー実行時に実際に何が発生したのかを特定するのに役立てます。たとえば、
keystoneコンテナーのログを確認するには、以下のコマンドを実行します。sudo podman logs keystone
$ sudo podman logs keystoneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 多くの場合、このログにコンテナー障害の原因に関する情報が含まれます。
ホストには、失敗したサービスの
stdoutログも保持されます。stdoutログは、/var/log/containers/stdouts/に保存されます。たとえば、障害の発生したkeystoneコンテナーのログを確認するには、以下のコマンドを使用します。cat /var/log/containers/stdouts/keystone.log
$ cat /var/log/containers/stdouts/keystone.logCopy to Clipboard Copied! Toggle word wrap Toggle overflow
コンテナーの検証
状況によっては、コンテナーに関する情報を検証する必要がある場合があります。たとえば、以下のコマンドを使用して keystone コンテナーのデータを確認します。
sudo podman inspect keystone
$ sudo podman inspect keystone
このコマンドにより、ローレベルの設定データが含まれた JSON オブジェクトが返されます。その出力を jq コマンドにパイプして、特定のデータを解析することが可能です。たとえば、keystone コンテナーのマウントを確認するには、以下のコマンドを実行します。
sudo podman inspect keystone | jq .[0].Mounts
$ sudo podman inspect keystone | jq .[0].Mounts
--format オプションを使用して、データを単一行に解析することもできます。これは、コンテナーデータのセットに対してコマンドを実行する場合に役立ちます。たとえば、keystone コンテナーを実行するのに使用するオプションを再生成するには、以下のように inspect コマンドに --format オプションを指定して実行します。
sudo podman inspect --format='{{range .Config.Env}} -e "{{.}}" {{end}} {{range .Mounts}} -v {{.Source}}:{{.Destination}}:{{ join .Options "," }}{{end}} -ti {{.Config.Image}}' keystone
$ sudo podman inspect --format='{{range .Config.Env}} -e "{{.}}" {{end}} {{range .Mounts}} -v {{.Source}}:{{.Destination}}:{{ join .Options "," }}{{end}} -ti {{.Config.Image}}' keystone
--format オプションは、Go 構文を使用してクエリーを作成します。
これらのオプションを podman run コマンドと共に使用して、トラブルシューティング目的のコンテナーを再度作成します。
OPTIONS=$( sudo podman inspect --format='{{range .Config.Env}} -e "{{.}}" {{end}} {{range .Mounts}} -v {{.Source}}:{{.Destination}}{{if .Mode}}:{{.Mode}}{{end}}{{end}} -ti {{.Config.Image}}' keystone )
sudo podman run --rm $OPTIONS /bin/bash
$ OPTIONS=$( sudo podman inspect --format='{{range .Config.Env}} -e "{{.}}" {{end}} {{range .Mounts}} -v {{.Source}}:{{.Destination}}{{if .Mode}}:{{.Mode}}{{end}}{{end}} -ti {{.Config.Image}}' keystone )
$ sudo podman run --rm $OPTIONS /bin/bash
コンテナー内でのコマンドの実行
状況によっては、特定の Bash コマンドでコンテナー内の情報を取得する必要がある場合があります。このような場合には、以下の podman コマンドを使用して、稼働中のコンテナー内でコマンドを実行します。たとえば、podman exec コマンドを実行して、keystone コンテナー内でコマンドを実行します。
sudo podman exec -ti keystone <COMMAND>
$ sudo podman exec -ti keystone <COMMAND>
-ti オプションを指定すると、コマンドは対話式の擬似ターミナルで実行されます。
<COMMAND> を実行するコマンドに置き換えてください。たとえば、各コンテナーには、サービスの接続を確認するためのヘルスチェックスクリプトがあります。keystone にヘルスチェックスクリプトを実行するには、以下のコマンドを実行します。
sudo podman exec -ti keystone /openstack/healthcheck
$ sudo podman exec -ti keystone /openstack/healthcheck
コンテナーのシェルにアクセスするには、コンテナー内で実行するコマンドとして /bin/bash を使用して podman exec を実行します。
sudo podman exec -ti keystone /bin/bash
$ sudo podman exec -ti keystone /bin/bash
コンテナーファイルシステムの確認
障害の発生したコンテナーのファイルシステムを確認するには、
podman mountコマンドを実行します。たとえば、障害の発生したkeystoneコンテナーのファイルシステムを確認するには、以下のコマンドを実行します。podman mount keystone
$ podman mount keystoneCopy to Clipboard Copied! Toggle word wrap Toggle overflow これによりマウント位置が表示され、ファイルシステムの内容を確認することができます。
/var/lib/containers/storage/overlay/78946a109085aeb8b3a350fc20bd8049a08918d74f573396d7358270e711c610/merged
/var/lib/containers/storage/overlay/78946a109085aeb8b3a350fc20bd8049a08918d74f573396d7358270e711c610/mergedCopy to Clipboard Copied! Toggle word wrap Toggle overflow これは、コンテナー内の Puppet レポートを確認する際に役立ちます。これらのレポートは、コンテナーのマウント内の
var/lib/puppet/ディレクトリーにあります。
コンテナーのエクスポート
コンテナーに障害が発生した場合には、ファイルの内容を詳細に調べる必要があります。この場合は、コンテナーの全ファイルシステムを tar アーカイブとしてエクスポートすることができます。たとえば、keystone コンテナーのファイルシステムをエクスポートするには、以下のコマンドを実行します。
sudo podman export keystone -o keystone.tar
$ sudo podman export keystone -o keystone.tar
このコマンドにより keystone.tar アーカイブが作成されます。これを抽出して、調べることができます。