A.3. コンテナー化された Ansible Automation Platform のリファレンス
Ansible Automation Platform のコンテナー化設計のアーキテクチャーの詳細を教えていただけますか?
Red Hat では、基盤となるネイティブ RHEL テクノロジーを可能な限り多用しています。コンテナーのランタイムとサービスの管理には Podman を使用します。ソリューションを表示および調査するために、多くの Podman サービスとコマンドが使用されます。
たとえば、podman ps
と podman images
を使用して、基礎部分と実行部分の一部を確認します。
[aap@daap1 aap]$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 88ed40495117 registry.redhat.io/rhel8/postgresql-13:latest run-postgresql 48 minutes ago Up 47 minutes postgresql 8f55ba612f04 registry.redhat.io/rhel8/redis-6:latest run-redis 47 minutes ago Up 47 minutes redis 56c40445c590 registry.redhat.io/ansible-automation-platform-24/ee-supported-rhel8:latest /usr/bin/receptor... 47 minutes ago Up 47 minutes receptor f346f05d56ee registry.redhat.io/ansible-automation-platform-24/controller-rhel8:latest /usr/bin/launch_a... 47 minutes ago Up 45 minutes automation-controller-rsyslog 26e3221963e3 registry.redhat.io/ansible-automation-platform-24/controller-rhel8:latest /usr/bin/launch_a... 46 minutes ago Up 45 minutes automation-controller-task c7ac92a1e8a1 registry.redhat.io/ansible-automation-platform-24/controller-rhel8:latest /usr/bin/launch_a... 46 minutes ago Up 28 minutes automation-controller-web [aap@daap1 aap]$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE registry.redhat.io/ansible-automation-platform-24/ee-supported-rhel8 latest b497bdbee59e 10 days ago 3.16 GB registry.redhat.io/ansible-automation-platform-24/controller-rhel8 latest ed8ebb1c1baa 10 days ago 1.48 GB registry.redhat.io/rhel8/redis-6 latest 78905519bb05 2 weeks ago 357 MB registry.redhat.io/rhel8/postgresql-13 latest 9b65bc3d0413 2 weeks ago 765 MB [aap@daap1 aap]$
コンテナー化された Ansible Automation Platform は、セキュリティーを最大限に高めてすぐに使用できるように、ルートレスコンテナーとして実行されます。つまり、ローカルの権限のないユーザーアカウントを使用して、コンテナー化された Ansible Automation Platform をインストールできます。権限の昇格は、特定の root レベルのタスクにのみ必要であり、デフォルトでは root を直接使用する場合には必要ありません。
インストールが完了すると、インストールプログラムが実行されるファイルシステム (基盤となる RHEL ホスト) に特定の項目が取り込まれていることを確認できます。
[aap@daap1 aap]$ tree -L 1 . ├── aap_install.log ├── ansible.cfg ├── collections ├── galaxy.yml ├── inventory ├── LICENSE ├── meta ├── playbooks ├── plugins ├── README.md ├── requirements.yml ├── roles
Podman ボリュームなどを利用するその他のコンテナー化されたサービスは、使用されるインストール root ディレクトリーの下に存在します。詳細な参照情報として、以下にいくつかの例を示します。
コンテナーディレクトリーには、実行プレーンに使用およびインストールされる Podman の詳細の一部が含まれています。
containers/ ├── podman ├── storage │ ├── defaultNetworkBackend │ ├── libpod │ ├── networks │ ├── overlay │ ├── overlay-containers │ ├── overlay-images │ ├── overlay-layers │ ├── storage.lock │ └── userns.lock └── storage.conf
コントローラーディレクトリーには、インストールされた設定とランタイムデータポイントの一部が含まれています。
controller/ ├── data │ ├── job_execution │ ├── projects │ └── rsyslog ├── etc │ ├── conf.d │ ├── launch_awx_task.sh │ ├── settings.py │ ├── tower.cert │ └── tower.key ├── nginx │ └── etc ├── rsyslog │ └── run └── supervisor └── run
レセプターディレクトリーには、自動化メッシュ設定があります。
receptor/ ├── etc │ └── receptor.conf └── run ├── receptor.sock └── receptor.sock.lock
インストール後、ローカルユーザーのホームディレクトリーに、.cache
ディレクトリーなどの他の部分も見つかります。
.cache/ ├── containers │ └── short-name-aliases.conf.lock └── rhsm └── rhsm.log
デフォルトでは、ルートレス Podman などの最も安全な方法で実行されるため、非特権ユーザーとして systemd
を実行するなどの他のサービスも使用できます。systemd
では、利用可能なコンポーネントサービスコントロールの一部を以下のように確認できます。
以下は、.config
ディレクトリーです。
.config/ ├── cni │ └── net.d │ └── cni.lock ├── containers │ ├── auth.json │ └── containers.conf └── systemd └── user ├── automation-controller-rsyslog.service ├── automation-controller-task.service ├── automation-controller-web.service ├── default.target.wants ├── podman.service.d ├── postgresql.service ├── receptor.service ├── redis.service └── sockets.target.wants
これは Podman に固有のものであり、Open Container Initiative (OCI) 仕様に準拠しています。root ユーザーとして実行される Podman はデフォルトで /var/lib/containers
を使用しますが、標準ユーザーの場合は $HOME/.local
の下の階層が使用されます。
以下は、.local
ディレクトリーです。
.local/ └── share └── containers ├── cache ├── podman └── storage As an example `.local/storage/volumes` contains what the output from `podman volume ls` provides: [aap@daap1 containers]$ podman volume ls DRIVER VOLUME NAME local d73d3fe63a957bee04b4853fd38c39bf37c321d14fdab9ee3c9df03645135788 local postgresql local redis_data local redis_etc local redis_run
実行プレーンをコントロールプレーンのメインサービス (PostgreSQL、Redis、Automation Controller、レセプター、Automation Hub、Event-Driven Ansible) から分離します。
コントロールプレーンサービスは、標準の Podman 設定 (~/.local/share/containers/storage
) で実行されます。
実行プレーンサービスは、実行プレーンコンテナーがコントロールプレーンと対話できないように、専用の設定またはストレージ (~/aap/containers/storage
) を使用します。
ホストリソースの使用率統計情報を確認するにはどうすればよいですか?
- 以下を実行します。
$ podman container stats -a
podman container stats -a ID NAME CPU % MEM USAGE / LIMIT MEM % NET IO BLOCK IO PIDS CPU TIME AVG CPU % 0d5d8eb93c18 automation-controller-web 0.23% 959.1MB / 3.761GB 25.50% 0B / 0B 0B / 0B 16 20.885142s 1.19% 3429d559836d automation-controller-rsyslog 0.07% 144.5MB / 3.761GB 3.84% 0B / 0B 0B / 0B 6 4.099565s 0.23% 448d0bae0942 automation-controller-task 1.51% 633.1MB / 3.761GB 16.83% 0B / 0B 0B / 0B 33 34.285272s 1.93% 7f140e65b57e receptor 0.01% 5.923MB / 3.761GB 0.16% 0B / 0B 0B / 0B 7 1.010613s 0.06% c1458367ca9c redis 0.48% 10.52MB / 3.761GB 0.28% 0B / 0B 0B / 0B 5 9.074042s 0.47% ef712cc2dc89 postgresql 0.09% 21.88MB / 3.761GB 0.58% 0B / 0B 0B / 0B 21 15.571059s 0.80%
Dell が販売および提供しているコンテナー化された Ansible Automation Platform ソリューション (DAAP) のインストールにおける前の例では、約 1.8 Gb の RAM を使用しています。
ストレージは、どのくらいの量がどこで使用されていますか?
ルートレス Podman を実行すると、コンテナーボリュームストレージはローカルユーザーの $HOME/.local/share/containers/storage/volumes
にあります。
各ボリュームの詳細を表示するには、次のコマンドを実行します。
$ podman volume ls
次に、以下を実行します。
$ podman volume inspect <volume_name>
以下に例を示します。
$ podman volume inspect postgresql [ { "Name": "postgresql", "Driver": "local", "Mountpoint": "/home/aap/.local/share/containers/storage/volumes/postgresql/_data", "CreatedAt": "2024-01-08T23:39:24.983964686Z", "Labels": {}, "Scope": "local", "Options": {}, "MountCount": 0, "NeedsCopyUp": true } ]
インストールプログラムによって作成されたいくつかのファイルは $HOME/aap/
にあり、実行中のさまざまなコンテナーにバインドマウントされます。
コンテナーに関連付けられたマウントを表示するには、次のコマンドを実行します。
$ podman ps --format "{{.ID}}\t{{.Command}}\t{{.Names}}"
Example: $ podman ps --format "{{.ID}}\t{{.Command}}\t{{.Names}}" 89e779b81b83 run-postgresql postgresql 4c33cc77ef7d run-redis redis 3d8a028d892d /usr/bin/receptor... receptor 09821701645c /usr/bin/launch_a... automation-controller-rsyslog a2ddb5cac71b /usr/bin/launch_a... automation-controller-task fa0029a3b003 /usr/bin/launch_a... automation-controller-web 20f192534691 gunicorn --bind 1... automation-eda-api f49804c7e6cb daphne -b 127.0.0... automation-eda-daphne d340b9c1cb74 /bin/sh -c nginx ... automation-eda-web 111f47de5205 aap-eda-manage rq... automation-eda-worker-1 171fcb1785af aap-eda-manage rq... automation-eda-worker-2 049d10555b51 aap-eda-manage rq... automation-eda-activation-worker-1 7a78a41a8425 aap-eda-manage rq... automation-eda-activation-worker-2 da9afa8ef5e2 aap-eda-manage sc... automation-eda-scheduler 8a2958be9baf gunicorn --name p... automation-hub-api 0a8b57581749 gunicorn --name p... automation-hub-content 68005b987498 nginx -g daemon o... automation-hub-web cb07af77f89f pulpcore-worker automation-hub-worker-1 a3ba05136446 pulpcore-worker automation-hub-worker-2
次に、以下を実行します。
$ podman inspect <container_name> | jq -r .[].Mounts[].Source
Example: /home/aap/.local/share/containers/storage/volumes/receptor_run/_data /home/aap/.local/share/containers/storage/volumes/redis_run/_data /home/aap/aap/controller/data/rsyslog /home/aap/aap/controller/etc/tower.key /home/aap/aap/controller/etc/conf.d/callback_receiver_workers.py /home/aap/aap/controller/data/job_execution /home/aap/aap/controller/nginx/etc/controller.conf /home/aap/aap/controller/etc/conf.d/subscription_usage_model.py /home/aap/aap/controller/etc/conf.d/cluster_host_id.py /home/aap/aap/controller/etc/conf.d/insights.py /home/aap/aap/controller/rsyslog/run /home/aap/aap/controller/data/projects /home/aap/aap/controller/etc/settings.py /home/aap/aap/receptor/etc/receptor.conf /home/aap/aap/controller/etc/conf.d/execution_environments.py /home/aap/aap/tls/extracted /home/aap/aap/controller/supervisor/run /home/aap/aap/controller/etc/uwsgi.ini /home/aap/aap/controller/etc/conf.d/container_groups.py /home/aap/aap/controller/etc/launch_awx_task.sh /home/aap/aap/controller/etc/tower.cert
jq
RPM がインストールされていない場合は、次のコマンドでインストールします。$ sudo dnf -y install jq