Вот рабочая последовательность команд для установки Ansible AWX на Ubuntu 19.04 в виде контейнеров docker.
Docker обязательно нужно ставить последний из https://download.docker.com/linux/ubuntu
export http_proxy=http://192.168.104.94:3130/ export https_proxy=http://192.168.104.94:3130/ echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/ansible.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 7BB9C367 sudo apt-get update sudo apt install ansible -y sudo rm -f /usr/bin/python sudo ln -s /usr/bin/python3 /usr/bin/python sudo snap remove --purge docker sudo apt-get purge docker docker-engine docker.io docker-ce docker-ce-cli containerd.io containerd runc -y sudo rm -rf /var/lib/docker/ sudo rm -rf /var/lib/docker-engine sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo apt-key fingerprint 0EBFCD88 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io -y sudo service docker start sudo rm -f /usr/bin/python sudo ln -s /usr/bin/python3 /usr/bin/python sudo apt-get install python3-pip -y sudo pip3 --proxy=http://__Proxy_IP__:_proxy_port__ install docker docker-compose sudo apt install nodejs npm -y sudo npm install npm --global git clone https://github.com/ansible/awx.git cd awx/installer sudo ansible-playbook -i inventory install.yml
Для установки в Kubernetes есть несколько опций:
На старых версиях плейбуков AWX при установке в кластер kubernetes версии 1.16 playbook вываливался с ошибкой на задаче TASK [kubernetes : Apply Deployment]. Сейчас такого не происходит.
Для начала - нужно включить логирование, чтобы увидеть в чем дело. В файлике roles/kubernetes/tasks/main.yml ищем задачу с именем
Apply Deployment
и в ней комментируем строку
no_log: yes
В итоге можем увидеть сообщение об ошибке:
no matches for kind "StatefulSet" in version "apps/v1beta1"
Это означает, что apiVersion в файлике манифеста не соотвествует apiVersion кластера. Открываем файл roles/kubernetes/templates/deployment.yml.j2, находим объявление
kind: StatefulSet
и исправляем версию строкой выше.
Версии kubernetes API в вашем кластере можно посмотреть так:
for kind in `kubectl api-resources | tail +2 | awk '{ print $1 }'`; do kubectl explain $kind; done | grep -e "KIND:" -e "VERSION:"
В моем случае
apiVersion: apps/v1beta1
нужно заменить на
apiVersion: apps/v1
В результате - характер ошибки изменился и теперь сообщение такое:
missing required field "selector" in io.k8s.api.apps.v1.StatefulSetSpec
Отлично. Оказалось, теперь в спецификации StatefulSet нужно добавлять selector, который, в соответствии с документацией должен совпадать с метками (labels), заданным в спецификации контейнеров этого StatefulSet (has to match .spec.template.metadata.labels). Приводим спецификацию StatefulSet к такому виду:
spec: serviceName: {{ kubernetes_deployment_name }} replicas: 1 selector: matchLabels: app: {{ kubernetes_deployment_name }}
Также в моей конфигурации оказалось проще удалить секции resources, чем их настраивать (мой тренировочный кластер не сможет выделить какие-то фиксированные объемы ресурсов). Также лучше сразу удалить liveness и readyness probes из спецификации контейнера rabbitmq (иначе - будет жор CPU).
Бекапим базу. На сервере postgres выполняем:
sudo su - postgres su - postgres pg_dump awx > awx_`date +"%d.%m.%y_%H-%M"`.bak
Клонируем свежий репозиторий AWX:
git clone https://github.com/ansible/awx.git
Настраиваем inventory:
cd awx/installer nano inventory
Вот такая ошибка появлялась, пока я не сменил версию python с 2.7 на 3.
TASK [local_docker : Start the containers] ************************************************************************************************************************************************************************************************************************************ fatal: [localhost]: FAILED! => {"changed": false, "msg": "Failed to import the required Python library (Docker SDK for Python: docker (Python >= 2.7) or docker-py (Python 2.6)) on kom250.rdleas.ru's Python /usr/bin/python. Please read module documentation and install in the appropriate location, for example via `pip install docker` or `pip install docker-py` (Python 2.6). The error was: cannot import name errors"}
При переносе инсталляции AWX с одного сервера на другой хост я столкнулся с такой ошибкой:
Cannot start service postgres: b"error while creating mount source path '/opt/awx/pgsql_db': mkdir /opt/awx: read-only file system
Гугление показало, что виноват древний docker. Помогло удаление и переустановка из репозитория https://download.docker.com/linux/ubuntu.
AWX в маленьком кластере kubernetes. В простое постоянно высокая нагрузка на CPU - процесс erl_child_setup.
Причина - liveness и readyness пробы в контейнере awx-rabbit.
Решение - отредактировать StatefullSet и удалить liveness и readyness пробы.
kubectl edit sts awx -n awx
Это уже древний вариант. Сейчас актуальна установка в контейнеры docker.
CentOS 7 1810
yum install -y epel-release yum install -y https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-redhat96-9.6-3.noarch.rpm yum install -y postgresql96-server yum install -y rabbitmq-server wget memcached nginx ansible wget -O /etc/yum.repos.d/awx-rpm.repo https://copr.fedorainfracloud.org/coprs/mrmeee/awx/repo/epel-7/mrmeee-awx-epel-7.repo yum install -y awx
/usr/pgsql-9.6/bin/postgresql96-setup initdb
systemctl start rabbitmq-server systemctl enable rabbitmq-server systemctl enable postgresql-9.6 systemctl start postgresql-9.6 systemctl enable memcached systemctl start memcached
sudo -u postgres createuser -S awx sudo -u postgres createdb -O awx awx sudo -u awx /opt/awx/bin/awx-manage migrate
echo "from django.contrib.auth.models import User; User.objects.create_superuser('admin', 'root@localhost', 'password')" | sudo -u awx /opt/awx/bin/awx-manage shell sudo -u awx /opt/awx/bin/awx-manage create_preload_data sudo -u awx /opt/awx/bin/awx-manage provision_instance --hostname=$(hostname) sudo -u awx /opt/awx/bin/awx-manage register_queue --queuename=tower --hostnames=$(hostname)
cd /etc/nginx/ cp nginx.conf nginx.conf.bak wget -O /etc/nginx/nginx.conf https://raw.githubusercontent.com/sunilsankar/awx-build/master/nginx.conf
systemctl start nginx systemctl enable nginx systemctl start awx-cbreceiver systemctl start awx-channels-worker systemctl start awx-daphne systemctl start awx-dispatcher systemctl start awx-web systemctl enable awx-cbreceiver systemctl enable awx-channels-worker systemctl enable awx-daphne systemctl enable awx-dispatcher systemctl enable awx-web