12.2. コンテナー化されたサービスの管理
Red Hat OpenStack Platform (RHOSP) では、アンダークラウドおよびオーバークラウドノード上のコンテナー内でサービスが実行されます。特定の状況では、1 つのホスト上で個別のサービスを制御する必要がある場合があります。本項では、コンテナー化されたサービスを管理するためにノード上で実行することのできる、一般的なコマンドについて説明します。
コンテナーとイメージのリスト表示
実行中のコンテナーをリスト表示するには、以下のコマンドを実行します。
sudo podman ps
$ sudo podman ps
コマンド出力に停止中またはエラーの発生したコンテナーを含めるには、コマンドに --all
オプションを追加します。
sudo podman ps --all
$ sudo podman ps --all
コンテナーイメージをリスト表示するには、以下のコマンドを実行します。
sudo podman images
$ sudo podman images
コンテナーの属性の確認
コンテナーまたはコンテナーイメージのプロパティーを表示するには、podman inspect
コマンドを使用します。たとえば、keystone
コンテナーを検査するには、以下のコマンドを実行します。
sudo podman inspect keystone
$ sudo podman inspect keystone
Systemd サービスを使用したコンテナーの管理
以前のバージョンの OpenStack Platform では、コンテナーは Docker およびそのデーモンで管理されていました。OpenStack Platform 16 では、Systemd サービスインターフェイスでコンテナーのライフサイクルが管理されます。それぞれのコンテナーはサービスであり、Systemd コマンドを実行して各コンテナーに関する特定の操作を実施します。
Systemd は再起動ポリシーを適用するため、Podman CLI を使用してコンテナーを停止、起動、および再起動することは推奨されません。その代わりに、Systemd サービスコマンドを使用してください。
コンテナーのステータスを確認するには、systemctl status
コマンドを実行します。
コンテナーを停止するには、systemctl stop
コマンドを実行します。
sudo systemctl stop tripleo_keystone
$ sudo systemctl stop tripleo_keystone
コンテナーを起動するには、systemctl start
コマンドを実行します。
sudo systemctl start tripleo_keystone
$ sudo systemctl start tripleo_keystone
コンテナーを再起動するには、systemctl restart
コマンドを実行します。
sudo systemctl restart tripleo_keystone
$ sudo systemctl restart tripleo_keystone
コンテナーステータスを監視するデーモンはないので、以下の状況では Systemd はほとんどのコンテナーを自動的に再起動します。
-
podman stop
コマンドの実行など、明瞭な終了コードまたはシグナル - 起動後に podman コンテナーがクラッシュするなど、不明瞭な終了コード
- 不明瞭なシグナル
- コンテナーの起動に 1 分 30 秒以上かかった場合のタイムアウト
Systemd サービスに関する詳しい情報は、systemd.service
のドキュメント を参照してください。
コンテナー内のサービス設定ファイルに加えた変更は、コンテナーの再起動後には元に戻ります。これは、コンテナーがノードのローカルファイルシステム上の /var/lib/config-data/puppet-generated/
にあるファイルに基づいてサービス設定を再生成するためです。たとえば、keystone
コンテナー内の /etc/keystone/keystone.conf
を編集してコンテナーを再起動すると、そのコンテナーはノードのローカルシステム上にある /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf
を使用して設定を再生成します。再起動前にコンテナー内で加えられた変更は、この設定によって上書きされます。
Systemd タイマーを使用した podman コンテナーの監視
Systemd タイマーインターフェイスは、コンテナーのヘルスチェックを管理します。各コンテナーのタイマーがサービスユニットを実行し、そのユニットがヘルスチェックスクリプトを実行します。
すべての OpenStack Platform コンテナーのタイマーをリスト表示するには、systemctl list-timers
コマンドを実行し、出力を tripleo
が含まれる行に限定します。
特定のコンテナータイマーのステータスを確認するには、healthcheck サービスに対して systemctl status
コマンドを実行します。
コンテナータイマーを停止、起動、再起動、およびコンテナータイマーのステータスを表示するには、.timer
Systemd リソースに対して該当する systemctl
コマンドを実行します。たとえば、tripleo_keystone_healthcheck.timer
リソースのステータスを確認するには、以下のコマンドを実行します。
sudo systemctl status tripleo_keystone_healthcheck.timer
$ sudo systemctl status tripleo_keystone_healthcheck.timer
● tripleo_keystone_healthcheck.timer - keystone container healthcheck
Loaded: loaded (/etc/systemd/system/tripleo_keystone_healthcheck.timer; enabled; vendor preset: disabled)
Active: active (waiting) since Fri 2019-02-15 23:53:18 UTC; 2 days ago
healthcheck サービスは無効だが、そのサービスのタイマーが存在し有効になっている場合には、チェックは現在タイムアウトしているが、タイマーに従って実行されることを意味します。チェックを手動で開始することもできます。
podman ps
コマンドは、コンテナーのヘルスステータスを表示しません。
コンテナーログの確認
OpenStack Platform 16 では、新たなロギングディレクトリー /var/log/containers/stdout
が導入されています。ここには、すべてのコンテナーの標準出力 (stdout) と標準エラー (stderr) が、コンテナーごとに 1 つのファイルに統合されて保存されます。
paunch および container-puppet.py
スクリプトは、出力を /var/log/containers/stdout
ディレクトリーにプッシュするように podman コンテナーを設定します。これにより、container-puppet-*
コンテナー等の削除されたコンテナーを含め、すべてのログのコレクションが作成されます。
また、ホストはこのディレクトリーにログローテーションを適用し、大きな容量のファイルがディスク容量を消費する問題を防ぎます。
コンテナーが置き換えられた場合には、新しいコンテナーは同じログファイルにログを出力します。podman
はコンテナー ID ではなくコンテナー名を使用するためです。
podman logs
コマンドを使用して、コンテナー化されたサービスのログを確認することもできます。たとえば、keystone
コンテナーのログを確認するには、以下のコマンドを実行します。
sudo podman logs keystone
$ sudo podman logs keystone
コンテナーへのアクセス
コンテナー化されたサービスのシェルに入るには、podman exec
コマンドを使用して /bin/bash
を起動します。たとえば、keystone
コンテナーのシェルに入るには、以下のコマンドを実行します。
sudo podman exec -it keystone /bin/bash
$ sudo podman exec -it keystone /bin/bash
root ユーザーとして keystone
コンテナーのシェルに入るには、以下のコマンドを実行します。
sudo podman exec --user 0 -it <NAME OR ID> /bin/bash
$ sudo podman exec --user 0 -it <NAME OR ID> /bin/bash
コンテナーから出るには、以下のコマンドを実行します。
exit
# exit