Перейти к основному содержимому

Ansible, Playbook

Подготовка к работе

  • Работа в операционной системе семейства Linux;
  • Уставленные Docker, Docker Compose;
  • Установленный пакет Python3.

Отчет

Отчет в формате docx. Обязательное содержимое отчета:

  • Фамилия и инициалы студента, номер группы, номер варианта;
  • План и задачи лабораторной работы;
  • Краткое описание хода выполнения работы;
  • Скриншоты результатов заданий и ответы на вопросы задания.

Что потребуется перед началом

Дополнительные материалы

Для выполнения лабораторной работы необходимы будут материалы лекций:

Подготовка проекта

  • Скачать проект на локальную машину.

  • Разархивировать проект и зайти в папку с проектом:

    cd ansible
    ansible
    ├── ansible
    │   ├── ansible.cfg
    │   ├── Dockerfile
    │   ├── inventory
    │   │   ├── all_vars
    │   │   ├── ansible_master_vars
    │   │   ├── application_vars
    │   │   ├── database_vars
    │   │   └── workers
    │   └── playbooks
    │   ├── app
    │   │   ├── app.py
    │   │   ├── env.j2
    │   │   └── requirements.txt
    │   ├── mysql
    │   │   ├── dump.sql
    │   │   ├── permissions.sql
    │   │   └── root_cnf.j2
    │   ├── nginx
    │   │   └── nginx.conf.j2
    │   ├── playbook-application.yml
    │   └── playbook-database.yml
    ├── docker-compose.yml
    ├── lab6-agent
    │   ├── build.sh
    │   └── Dockerfile
    └── README.MD

Работу можно выполнять:

  • на виртуальной машине (тогда с помощью scp скопируйте папку из хостовой машины в виртуальную машину или выполните клонирование репозитория методички в виртуальную машину);
  • в хостовой операционной системе через Docker Desktop.

Установка lab6-agent и проверка тестового стенда

cd  lab6-agent

# собираем образ базового контейнера для лабы
./build.sh

Поднимаем тестовый стенд:

cd ../
docker-compose up -d

После успешной компиляции образов и старта кластера:

docker-compose down

Задачи лабораторной работы

Задание 1: Поднять кластер и установить тестовую базу данных

Поднимаем тестовый стенд:

docker-compose up -d --scale app=3

О том, как работает горизонтальное масштабирование в Docker Compose, можно почитать здесь. Делаем листинг запущенных контейнеров:

docker ps

dockerps.png

Находим контейнер ansible-ansible-1 или ansible_ansible_1 (в разных реализациях docker-compose бывает по разному).

предупреждение

Важно! Необходимо заменить в инвентори файле (ansible/inventory/workers) на _ или - в зависимости от названия в системе.

Заходим на хост с ансиблем:

docker exec -it `docker ps -aqf "name=ansible-ansible-1"` bash
# или
docker exec -it `docker ps -aqf "name=ansible_ansible_1"` bash

Ad-hoc команды

Ad-hoc - вызов отдельных команд.

ping - проверяем доступность хостов инвернтори:

ansible all -m ping

Пример вывода:

ansible-app-2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
ansible-app-3 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
ansible-app-1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}

Команда uptime - проверяем сколько времени поднят сервер:

ansible all -m command -a 'uptime'

Пример вывода:

ansible-app-2 | CHANGED | rc=0 >>
19:08:47 up 1 day, 4:18, 1 user, load average: 1.39, 1.14, 1.22
ansible-app-1 | CHANGED | rc=0 >>
19:08:47 up 1 day, 4:18, 1 user, load average: 1.39, 1.14, 1.22
ansible-app-3 | CHANGED | rc=0 >>
19:08:47 up 1 day, 4:18, 1 user, load average: 1.39, 1.14, 1.22

Запускаем плейбук для установки базы (ansible/playbooks/playbook-database.yml):

ansible-playbook /playbooks/playbook-database.yml

Плейбук поставит и установит базу на хост ansible_app_3.

Проверяем заходим на хост с базой (из масер-хоста ansible: ansible_ansible_1):

ssh ansible_app_3

На хосте заходим в клиент базы mysql:

mysql

выбираем созданную базу testdb:

mysql> use testdb

Пример вывода:

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

Сделаем SELECT из тестовой таблицы

mysql> select * from test;

Пример вывода

+--------------------+
| message |
+--------------------+
| Ansible To Do List |
| Get ready |
| Ansible is fun |
+--------------------+
3 rows in set (0.00 sec)

Задание 2: Подготовить работу приложений

Запускаем плейбук для установки приложений (ansible/playbooks/playbook-application.yml):

ansible-playbook /playbooks/playbook-application.yml

Проверим что процесс работает на хосте:

ssh ansible_app_1

После логина найдем что процесс запущен:

ps ax | grep python

И убедимся что порт 5000 открыт:

netstat -nlp | grep 5000

Для проверки, что приложение запущено на всех хостах и чтобы не проверять по одному, воспользуемся adhoc командой. C помощью утилиты curl проверим работу сервиса и загрузку данных из базы для всех нод:

ansible application -a "curl localhost:5000" -m shell

Задание 3: Установить балансировщик нагрузки nginx используя ad-hoc команды

Поставим необходимый пакет nginx, давайте установим его без плейбука:

ansible ansible_master -a "name=nginx update_cache=yes cache_valid_time=3600 state=present" -m apt

Скопируем шаблон конфигурационного файла nginx, поставив в него хосты наших приложений, используется шаблизатор jinja:

ansible ansible_master -a "src=playbooks/nginx/nginx.conf.j2 dest=/etc/nginx/nginx.conf owner=root" -m template

и запустим nginx из консоли на хосте ansible_ansible_1:

nginx

Проверим работу nginx вызвав с нашей хост машины: localhost:8080.

предупреждение

Если вы работаете на виртуальной машине, не забудьте выполнить проброс порта 8080.

Задание 4: Добавить еще один экземпляр ansible_app_4

Добавить еще один экземпляр приложения python, прописав изменения во всех необходимых файлах.

Контрольные вопросы

  • Что в ходит в состав ansible playbook?
  • Что такое группы хостов?
  • Как одной командой "пингануть" группу хостов?