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