AWX v13.0.0 のインストール docker-compose編
はじめに
ansible/awx: AWX Project のインストーラを使って、docker-composeで稼働する環境を作成します。
また、v10.0.0からRabbitMQに変わってRedisを使っている影響で、ホストの設定を変更する必要があるのでそれも事前に対応します。
cf. Replace clustered RabbitMQ with something simpler · Issue #5443 · ansible/awx
前提条件
- OSはCentOS7
# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
- 管理用DBは ホスト外で稼働している PostgreSQL を使用
- 必要であれば HTTP PROXYの設定も実施
- Dockerのセットアップ済み
cf. Install Docker Engine on CentOS | Docker Documentation - Docker Composeのセットアップ済み
cf. Install Docker Compose | Docker Documentation
# docker version
Client: Docker Engine - Community
Version: 19.03.11
API version: 1.40
Go version: go1.13.10
Git commit: 42e35e61f3
Built: Mon Jun 1 09:13:48 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.11
API version: 1.40 (minimum version 1.12)
Go version: go1.13.10
Git commit: 42e35e61f3
Built: Mon Jun 1 09:12:26 2020
OS/Arch: linux/amd64
Experimental: true
containerd:
Version: 1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
# docker-compose version
docker-compose version 1.26.0, build d4451659
docker-py version: 4.2.1
CPython version: 3.7.7
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
構成概要
インストーラの配置先: /root/awx
docker-composeのあるPATH: /var/lib/awx
AWXやAWXから実行されるAnsibleは、すべてコンテナ上で実行します。
また、デフォルトではAnsibleのバージョンも固定されているので、複数バージョンのAnsibleが必要な場合は、AWXのコンテナイメージを変更するなどの対応が必要になると思います。
その場合は、Docker Registryの用意も必要になるのでご注意下さい。
参考情報
- Ansilbleのセットアップ
- AWXのセットアップ
- awx/INSTALL.md at devel · ansible/awx
- AWXのDocker Composeでのセットアップ
構築手順
事前準備
overcommit_memoryの設定を変更
overcommit_memoryの設定を変更しないと実行時に以下の様な警告が出ます。
redis_1 | 1:M 18 Jun 2020 14:38:52.466 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
その為、以下を参考に overcommit_memory=1
が常時、反映されるようにします。
cf. 7.5. システムメモリー容量の設定 Red Hat Enterprise Linux 7 | Red Hat Customer Portal
transparent hugepages (THP) を無効化
THPを無効化しないと実行時に以下の様な警告が出ます。
redis_1 | 1:M 18 Jun 2020 14:38:52.466 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
その為、以下を参考に transparent hugepages (THP) を無効にする
cf. Red Hat Enterprise Linux 7 で transparent hugepages (THP) を無効にする - Red Hat Customer Portal
管理用のデータベースを作成
AWXで利用する外部DBのPostgreSQLにて、ユーザ awx
、データベース awx
を作成し、AWXが稼働するホストから接続出来るように設定します。
$ sudo su - postgres
# psql
postgres=# create database awx;
postgres=# create user awx with password ********;
pg_hba.conf
の設定も忘れずに。
# TYPE DATABASE USER ADDRESS METHOD
local all all peer
:
host sameuser awx XXX.XXX.XXX.XXX/XX password
AWXのインストーラの準備
インストーラを v13.0.0 を指定してclone
# git clone -b 13.0.0 https://github.com/ansible/awx.git
# cd awx/installer
インストーラの実行にansibleを使うので、venv使って ansible v2.9.10 で実行出来るようにする。
また、docker-composeでAWXが稼働するので Prerequisites にある通り、pipで docker、docker-composを入れる。
[root@awx01 installer]# python3 -m venv .venv
[root@awx01 installer]# source .venv/bin/activate
(.venv) [root@awx01 installer]# whereis pip
pip: /usr/bin/pip3.6 /root/awx/installer/.venv/bin/pip /root/awx/installer/.venv/bin/pip3.6
(.venv) [root@awx01 installer]# pip install --upgrade pip
(.venv) [root@awx01 installer]# vim requirements.txt
(.venv) [root@awx01 installer]# cat requirements.txt
docker
docker-compose==1.26.0
ansible==2.9.10
(.venv) [root@awx01 installer]# pip install -r requirements.txt
AWXインストールの為のパラメータの設定
inventoryを編集
(.venv) [root@awx01 installer]# vi inventory (←inventoryファイルを編集する、下記詳細)
以下を参考に環境に合わせて Inventory を変更
- https://github.com/ansible/awx/blob/devel/INSTALL.md#inventory-variables の Pre-install steps の Inventory variables
- https://github.com/ansible/awx/blob/devel/installer/inventory
最終的にこんな感じ。
localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python3"
[all:vars]
dockerhub_base=ansible
awx_task_hostname=awx
awx_web_hostname=awxweb
host_port=80
host_port_ssl=443
docker_compose_dir="/var/lib/awx"
pg_hostname=(利用するPostgreSQLのホスト名)
pg_username=awx
pg_password=(設定したDBのパスワード)
pg_database=awx
pg_port=5432
admin_user=admin
admin_password=(AWXの管理用パスワードを設定)
create_preload_data=True
secret_key=(任意の文字列)
# 必要ならHTTP PROXYを設定しておく
http_proxy=http://(プロキシホスト):(ポート)
https_proxy=http://(プロキシホスト):(ポート)
no_proxy="127.0.0.1,localhost"
project_data_dir=/var/lib/awx/projects
※Ansible v2.9 v2.7 を共存したいなど、カスタムの仮想環境を追加したい場合は、以下を参考にすると良いです。
cf. [Ansible/AWX] AWX でカスタムの仮想環境(venv)パスを認識させる方法 - てくなべ (tekunabe)
インストーラ実行(docker-compose環境作成&AWXコンテナ起動)
(.venv) [root@awx01 installer]# ansible-playbook -i inventory install.yml
:
TASK [local_docker : Update CA trust in awx_task container] ******************************************************************
changed: [localhost]
PLAY RECAP *******************************************************************************************************************
localhost : ok=12 changed=5 unreachable=0 failed=0 skipped=90 rescued=0 ignored=0
※ failed=0
でない場合は、エラーログが出ているのでInventoryやホストの設定を見直して下さい
コンテナが起動しているか確認
(.venv) [root@awx01 installer]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
51f268490cf6 ansible/awx:12.0.0 "tini -- /usr/bin/la…" 4 minutes ago Up 4 minutes 8052/tcp awx_task
60df1e18b2bf ansible/awx:12.0.0 "tini -- /bin/sh -c …" 4 minutes ago Up 4 minutes 0.0.0.0:80->8052/tcp awx_web
cde0749edde4 redis "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 6379/tcp awx_redis
また、インストーラは、以下の様にセットアップして稼働している
[root@awx01 ~]# cd /var/lib/awx
[root@awx01 awx]# ls
credentials.py docker-compose.yml environment.sh nginx.conf projects redis.conf redis_socket SECRET_KEY
[root@awx01 awx]# docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------
awx_redis docker-entrypoint.sh /usr/ ... Up 6379/tcp
awx_task tini -- /usr/bin/launch_aw ... Up 8052/tcp
awx_web tini -- /bin/sh -c /usr/bi ... Up 0.0.0.0:80->8052/tcp
AWXの各コンテナが完全に起動準備が整うと、以下の様なログを出すのでしばらく待つ。
[root@awx01 awx]# docker-compose logs -f
:
web_1 | RESULT 2
web_1 | OKREADY
task_1 | RESULT 2
task_1 | OKREADY
AWXの起動後の手直し
こんな感じでRedisの警告が出てるのでその対策 1 を実施する。
redis_1 | 1:M 18 Jun 2020 14:38:52.466 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
上記の警告がAWXインストーラでサポートしていないので手動でRedisサービスを変更する。
また、docker-composeのversionも3に変更(2ではsysctls 2 が使えないので)。
AWXを停止
[root@awx01 awx]# docker-compose down
Stopping awx_task ... done
Stopping awx_web ... done
Stopping awx_redis ... done
Removing awx_task ... done
Removing awx_web ... done
Removing awx_redis ... done
Removing network awx_default
/var/lib/awx/docker-compose.yml
を以下の様に変更
version: '3' # ← ここを 2から3に
services:
:
redis:
:
sysctls: # この2行を追加
net.core.somaxconn: '511' #
補足
長時間稼働すると、AWXサービスから出力される各コンテナのログでDiskがいっぱい!なんて事にならないように、以下を参考に、syslogに出力するとか、ログローテートするなどの対策を行って下さい。
- Docker Composeへの設定方法
- そもそものDockerコンテナのlogging driversの説明
AWXを起動
[root@awx01 awx]# docker-compose up -d
※実行後は、 docker-compose logs -f
で実行の様子を確認すること
ブラウザで、 http://(ホストのIPアドレス)/
にアクセスすると下図の様にログイン画面が出てくるので、AWXのインストーラのInventoryで設定した admin_user
と admin_password
を使ってログインする。
FAQ:アップデートどないするの?
基本的にインストーラをイチから作成し直す(流用しない)
- データベースは外部のPostgreSQLにあるので、データベースをバックアップ
-
/root/awx/awx
にcloneしたインストーラをリネーム ※なんかあった時の切り戻し用 -
docker-compose down
でAWXを停止 -
/var/lib/awx
をリネーム ※なんかあった時の切り戻し用 - いつもの通り再セットアップ ※Inventoryだけ、2でリネームしたやつを使い回す
アップデートする際の注意事項
Author And Source
この問題について(AWX v13.0.0 のインストール docker-compose編), 我々は、より多くの情報をここで見つけました https://qiita.com/yassan168/items/82fb7adca569e3ff5c71著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .