9.3. Ansible を使用したコンテナーの管理
Red Hat OpenStack Platform 17.1 は、tripleo_container_manage
Ansible ロールを使用してコンテナーの管理操作を実行します。カスタム Playbook を作成して、特定のコンテナー管理操作を実行することもできます。
-
heat が生成するコンテナー設定データを収集する。
tripleo_container_manage
ロールは、このデータを使用してコンテナーのデプロイメントをオーケストレーションします。 - コンテナーを起動する。
- コンテナーを停止する。
- コンテナーを更新する。
- コンテナーを削除する。
- 特定の設定でコンテナーを実行する。
director はコンテナー管理を自動的に実施しますが、コンテナー設定をカスタマイズしなければならない場合や、オーバークラウドを再デプロイせずにコンテナーにホットフィックスを適用しなければならない場合があります。
このロールがサポートするのは Podman コンテナー管理だけです。
9.3.1. tripleo-container-manage ロールのデフォルトと変数 リンクのコピーリンクがクリップボードにコピーされました!
次の抜粋は、tripleo_container_manage
Ansible ロールのデフォルトと変数を示しています。
9.3.2. tripleo-container-manage molecule のシナリオ リンクのコピーリンクがクリップボードにコピーされました!
Molecule
は tripleo_container_manage
ロールをテストするために使用されます。以下は、molecule
のデフォルトのインベントリーを示しています。
使用方法
Red Hat OpenStack 17.1 は、このロールで Podman のみをサポートします。Docker のサポートはロードマップ上にあります。
Molecule
Ansible ロールは、次のタスクを実行します。
-
TripleO Heat テンプレートによって生成されたコンテナー設定データを収集します。このデータは、信頼できる情報源として使用されます。コンテナーがすでに
Molecule
で管理されている場合には、現在の状態に関係なく、設定データは必要に応じてコンテナーを再設定します。 -
systemd
シャットダウンファイルを管理します。ノードのシャットダウン時または起動時のサービス注文に必要なTripleO Container systemd
サービスを作成します。また、netns-placeholder
サービスも管理します。 不要になったコンテナーまたは再設定が必要なコンテナーを削除します。コンテナーを削除する必要があるかどうかを判断するための一連のルールが含まれる、
needs_delete ()
という名前のカスタムフィルターを使用します。-
コンテナーが
tripleo_ansible
によって管理されていない場合、またはコンテナーのconfig_id
が入力 ID と一致しない場合には、コンテナーは削除されません。 -
コンテナーに
config_data
がない場合、またはコンテナーに入力データと一致しないconfig_data
がある場合には、コンテナーは削除されます。コンテナーが削除されると、そのロールもsystemd
サービスとヘルスチェックを無効にして削除することに注意してください。
-
コンテナーが
start_order
コンテナー設定で定義された特定の順序でコンテナーを作成します。デフォルトは 0 です。-
コンテナーが
exec
の場合は、exec
専用の Playbook が実行し、async
を使用して複数のexec
を同時に実行できるようになります。 -
それ以外の場合、
podman_container
が非同期で使用され、コンテナーが作成されます。コンテナーに再起動ポリシー
がある場合、systemd
サービスが設定されます。コンテナーにヘルスチェックスクリプトがある場合には、systemd healthcheck
サービスが設定されます。
-
コンテナーが
tripleo_container_manage_concurrency
パラメーターはデフォルトで 1 に設定されており、2 より大きい値を設定すると、Podman ロックに関する問題が発生する可能性があります。
Playbook の例:
9.3.3. tripleo_container_manage ロールの変数 リンクのコピーリンクがクリップボードにコピーされました!
tripleo_container_manage
Ansible ロールには、以下の変数が含まれます。
名前 | デフォルト値 | 説明 |
---|---|---|
tripleo_container_manage_check_puppet_config | false |
Ansible で Puppet コンテナー設定を確認する場合は、この変数を使用します。Ansible は、設定ハッシュを使用して更新されたコンテナー設定を識別することができます。コンテナーに Puppet からの新規設定がある場合は、この変数を |
tripleo_container_manage_cli | podman |
この変数を使用して、コンテナーを管理するのに使用するコマンドラインインターフェイスを設定します。 |
tripleo_container_manage_concurrency | 1 | この変数を使用して、同時に管理するコンテナーの数を設定します。 |
tripleo_container_manage_config | /var/lib/tripleo-config/ | この変数を使用して、コンテナー設定ディレクトリーへのパスを設定します。 |
tripleo_container_manage_config_id | tripleo |
この変数を使用して、特定の設定ステップの ID を設定します。たとえば、デプロイメントのステップ 2 のコンテナーを管理するには、この値を |
tripleo_container_manage_config_patterns | *.json | この変数を使用して、コンテナー設定ディレクトリーの設定ファイルを識別する bash 正規表現を設定します。 |
tripleo_container_manage_debug | false |
この変数を使用して、デバッグモードを有効または無効にします。特定の一度限りの設定でコンテナーを実行する場合、コンテナーのライフサイクルを管理するコンテナーコマンドを出力する場合、またはテストおよび検証目的で操作を行わずにコンテナー管理を実施する場合に、 |
tripleo_container_manage_healthcheck_disable | false | この変数を使用して、ヘルスチェックを有効または無効にします。 |
tripleo_container_manage_log_path | /var/log/containers/stdouts | この変数を使用して、コンテナーの stdout ログパスを設定します。 |
tripleo_container_manage_systemd_order | false | この変数を使用して、Ansible による systemd のシャットダウン順序を有効または無効にします。 |
tripleo_container_manage_systemd_teardown | true | この変数を使用して、使用されなくなったコンテナーのクリーンアップをトリガーします。 |
tripleo_container_manage_config_overrides | {} | この変数を使用して、コンテナー設定をオーバーライドします。この変数では、値にディクショナリー形式が使用されます。ここで、それぞれのキーはコンテナー名およびオーバーライドするパラメーター (例: コンテナーイメージ、ユーザー) です。この変数は、JSON コンテナー設定ファイルにカスタムオーバーライドを書き込みません。したがって、コンテナーが新たにデプロイ、更新、またはアップグレードされると、JSON 設定ファイルの内容に戻ります。 |
tripleo_container_manage_valid_exit_code | [] |
この変数を使用して、コンテナーが終了コードを返すかどうかを確認します。この値はリストにする必要があります (例: |
9.3.4. tripleo-container-manage ヘルスチェック リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenStack 17.1 までは、コンテナーのヘルスチェックは systemd
タイマーで実装され、podman exec
を実行して特定のコンテナーが正常かどうかを判断していました。現在は、Podman のネイティブの healthcheck
インターフェイスを使用しており、統合と使用がさらに簡単になっています。
コンテナー (keystone など) が正常かどうかを確認するには、次のコマンドを実行します。
sudo podman healthcheck run keystone
$ sudo podman healthcheck run keystone
戻りコードは 0
および “healthy”
である必要があります。
9.3.5. tripleo-container-manage デバッグ リンクのコピーリンクがクリップボードにコピーされました!
tripleo_container_manage
Ansible ロールを使用すると、特定のコンテナーに対して特定のアクションを実行できます。これは次の目的で使用できます。
- 特定の 1 回限りの設定でコンテナーを実行します。
- コンテナーのライフサイクル管理用のコンテナーコマンドを出力します。
- Ansible がコンテナーに加えられた変更を出力します。
1 つのコンテナーを管理するには、次の 2 つのことを知っておく必要があります。
- オーバークラウドのデプロイ中のどのステップでコンテナーがデプロイされたか。
- コンテナー設定を含む、生成された JSON ファイルの名前。
以下は、イメージ設定をオーバーライドする ステップ 1
で HAproxy
コンテナーを管理する Playbook の例です。
Ansible が check mode
で実行されている場合に、コンテナーは削除または作成されませんが、Playbook の実行の最後にコマンドのリストが表示され、Playbook で出される可能性のある結果が示されます。これはデバッグに役立ちます。
ansible-playbook haproxy.yaml --check
$ ansible-playbook haproxy.yaml --check
diff mode
を追加すると、Ansible によってコンテナーに加えられた変更が表示されます。
ansible-playbook haproxy.yaml --check --diff
$ ansible-playbook haproxy.yaml --check --diff
tripleo_container_manage_clean_orphans
パラメーターはオプションです。false に設定できます。これは、固有の config_id
が割り当てられた、孤立したコンテナーが削除されないことを意味します。このパラメーターを使用して、config_id
が同じ、別の実行中のコンテナーに影響を与えずに、1 つのコンテナーを管理できます。
tripleo_container_manage_config_overrides
パラメーターはオプションであり、イメージやコンテナーユーザーなどの特定のコンテナー属性をオーバーライドするために使用できます。このパラメーターは、コンテナー名とオーバーライドするパラメーターを使用してディクショナリーを作成します。これらのパラメーターは存在する必要があり、TripleO Heat テンプレートでコンテナー設定を定義します。
ディクショナリーは JSON ファイルのオーバーライドを更新しないことに注意してください。そのため、更新またはアップグレードが実行された場合に、コンテナーは JSON ファイルの設定で再構成されます。