Установка AWX на Ubuntu 19.04

Вот рабочая последовательность команд для установки 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

Установка AWX в кластере kubernetes

Для установки в 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).

Обновление AWX в кластере kubernetes

Бекапим базу. На сервере 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

Установка 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

Ссылки

Enter your comment. Wiki syntax is allowed:
 
  • linux_faq/ansible_awx_setup.txt
  • Last modified: 2020/06/10 08:58
  • by admin