28.9. コンテナーの設定に関するトラブルシューティング

Red Hat OpenStack Platform director は、paunch を使用してコンテナーを起動し、podman を使用してコンテナーを管理し、また puppet を使用してコンテナー設定を作成します。以下の手順で、エラーが発生した場合にコンテナーを診断する方法について説明します。

ホストへのアクセス

  1. stackrc ファイルを取得します。

    $ source ~/stackrc
  2. 障害の発生したコンテナーがあるノードの IP アドレスを取得します。

    (undercloud) $ openstack server list
  3. ノードにログインします。

    (undercloud) $ ssh heat-admin@192.168.24.60
  4. root ユーザーに変更します。

    $ sudo -i

障害が発生したコンテナーの識別

  1. すべてのコンテナーを表示します。

    $ podman ps --all

    障害の発生したコンテナーを特定します。障害の発生したコンテナーは、通常ゼロ以外のステータスで終了します。

コンテナーログの確認

  1. 各コンテナーは、主要プロセスからの標準出力を保持します。この出力をログとして使用し、コンテナー実行時に実際に何が発生したのかを特定するのに役立てます。たとえば、keystone コンテナーのログを確認するには、以下のコマンドを実行します。

    $ sudo podman logs keystone

    多くの場合、このログにコンテナー障害の原因に関する情報が含まれます。

  2. ホストには、失敗したサービスの 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

コンテナーファイルシステムの確認

  1. 障害の発生したコンテナーのファイルシステムを確認するには、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 アーカイブが作成されます。これを抽出して、調べることができます。