Differences

This shows you the differences between two versions of the page.


Previous revision
linux_faq:ansible_awx_setup [2020/06/10 08:58] (current) admin
Line 1: Line 1:
 +====== Установка AWX на Ubuntu 19.04 ======
 +Вот рабочая последовательность команд для установки **Ansible AWX** на **Ubuntu 19.04** в виде контейнеров **docker**. \\
 +**Docker** обязательно нужно ставить последний из https://download.docker.com/linux/ubuntu
 +<code>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
 +</code>
 +====== Установка AWX в кластере kubernetes ======
 +Для установки в Kubernetes есть несколько опций:
 +  * Штатный ansible-инсталлятор - https://github.com/ansible/awx/blob/devel/INSTALL.md#kubernetes
 +  * operator (в июне 2020 - alpha) - https://github.com/geerlingguy/tower-operator
 +  * helm chart (в июне 2020 уже несколько устарел - там все еще rabbitmq вместо redis) - https://github.com/arthur-c/ansible-awx-helm-chart
 +\\
 +На старых версиях плейбуков 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
 +  
 +  
 +====== Ошибки ======
 +===== cannot import name errors =====
 +Вот такая ошибка появлялась, пока я не сменил версию python с 2.7 на 3.
 +<code>
 +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"}
 +</code>
 +
 +===== read-only file system =====
 +При [[linux_faq:docker_migrate_to_another_host|переносе инсталляции 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 on kubernetes - high CPU usage erl_child_setup =====
 +**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
 +====== Ссылки ======
 +https://www.ansible.com/products/awx-project/faq \\
 +https://www.admintome.com/blog/install-ansible-on-ubuntu-18-04-with-awx/ \\
 +Установка AWX из rpm-репозитория: https://developer.ibm.com/articles/automation-using-ansible-awx-gui/