A.5. 컨테이너화된 Ansible Automation Platform 참조
이 정보를 사용하여 컨테이너화된 Ansible Automation Platform 배포의 아키텍처를 파악합니다.
Ansible Automation Platform 컨테이너화된 설계의 아키텍처에 대한 세부 정보를 제공할 수 있습니까?
기본 Red Hat Enterprise Linux 기술을 최대한 많이 사용합니다. Podman은 컨테이너 런타임 및 서비스 관리에 사용됩니다.
podman ps 를 사용하여 시스템에서 실행 중인 컨테이너를 나열합니다.
$ 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
podman 이미지를 사용하여 로컬에 저장된 이미지에 대한 정보를 표시합니다.
$ 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
컨테이너화된 Ansible Automation Platform은 기본적으로 강화된 보안을 위해 rootless 컨테이너로 실행됩니다. 즉, 권한이 없는 로컬 사용자 계정을 사용하여 컨테이너화된 Ansible Automation Platform을 설치할 수 있습니다. 권한 에스컬레이션은 특정 루트 수준 작업에만 필요하며 기본적으로 root를 직접 사용할 필요는 없습니다.
설치 프로그램은 기본 Red Hat Enterprise Linux 호스트에서 설치 프로그램을 실행하는 파일 시스템에 다음 파일을 추가합니다.
$ tree -L 1
.
├── aap_install.log
├── ansible.cfg
├── collections
├── galaxy.yml
├── inventory
├── LICENSE
├── meta
├── playbooks
├── plugins
├── README.md
├── requirements.yml
├── roles
설치 루트 디렉터리에는 Podman 볼륨을 사용하는 다른 컨테이너화된 서비스가 포함되어 있습니다.
추가 참조를 위한 몇 가지 예는 다음과 같습니다.
containers 디렉터리에는 실행 플레인에 사용 및 설치된 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
설치 후 로컬 사용자의 /home 디렉터리에서 .cache 디렉터리와 같은 다른 파일도 찾을 수 있습니다.
.cache/
├── containers
│ └── short-name-aliases.conf.lock
└── rhsm
└── rhsm.log
서비스는 기본적으로 rootless 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에 한정되며 OCI(Open Container Initiative) 사양을 준수합니다. Podman을 root 사용자 /var/lib/containers 로 실행하는 경우 기본적으로 사용됩니다. 표준 사용자의 경우 $HOME/.local 아래의 계층 구조가 사용됩니다.
.local 디렉터리:
.local/
└── share
└── containers
├── cache
├── podman
└── storage
예를 들어 .local/storage/volumes 에는 podman volume ls 의 출력이 다음과 같이 표시됩니다.
$ podman volume ls
DRIVER VOLUME NAME
local d73d3fe63a957bee04b4853fd38c39bf37c321d14fdab9ee3c9df03645135788
local postgresql
local redis_data
local redis_etc
local redis_run
실행 플레인은 기본 서비스에 영향을 미치지 않도록 컨트롤 플레인 기본 서비스와 분리되어 있습니다.
컨트롤 플레인 서비스는 표준 Podman 구성으로 실행되며 ~/.local/share/containers/storage 에서 확인할 수 있습니다.
실행 플레인 서비스(자동화 컨트롤러, 이벤트 기반 Ansible 및 실행 노드)는 ~/aap/containers/storage.conf 에 있는 전용 구성을 사용합니다. 이렇게 분리하면 실행 플레인 컨테이너가 컨트롤 플레인 서비스에 영향을 미치지 않습니다.
다음 명령 중 하나를 사용하여 실행 플레인 구성을 볼 수 있습니다.
CONTAINERS_STORAGE_CONF=~/aap/containers/storage.conf podman <subcommand>
CONTAINER_HOST=unix://run/user/<user uid>/podman/podman.sock podman <subcommand>
호스트 리소스 사용률 통계를 보려면 어떻게 해야 합니까?
다음 명령을 실행하여 호스트 리소스 사용률 통계를 표시합니다.
$ podman container stats -a
Dell을 기반으로 하는 출력의 예는 ~1.8GB RAM을 활용하는 DAAP(Ansible Automation Platform 솔루션) 설치를 제공합니다.
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%
얼마나 많은 스토리지를 사용하고 어디에서 사용됩니까?
컨테이너 볼륨 스토리지는 로컬 사용자( $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}}"출력 예:
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출력 예:
/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.certjqRPM이 설치되지 않은 경우 다음 명령을 실행하여 설치합니다.$ sudo dnf -y install jq