- Работа в операционной системе семейства Linux
- Устанвленные Docker,Docker-compose
- Установленный пакет Python3
Для выполнения лабораторной работы необходимы будут материалы лекций:
- скачать проект DevOps на локальную машину: Code ->Download Zip
- Разархивировать проект и зайти в папку с проектом:
cd DevOps-master/Лабы/Лаб6
Структура директории
├── 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
├── download.png
├── lab6-agent
│ ├── build.sh
│ └── Dockerfile
└── README.MD
cd lab6-agent
# собираем образ базового контейнера для лабы
./build.sh
Поднимаем тестовый стенд
cd ../
docker-compose up -d
После успешной компиляции образов и старта кластера
docker-compose down
Поднимаем тестовый стенд
docker-compose up -d --scale app=3
О том, как работает горизонталоьное масштабирование в docker-compose Делаем листинг запущенных контейнеров
docker ps
Находим контейнер 6-ansible-1 или 6_ansible_1 (в разных реализациях docker-compose бывает по разному)
Важно! Необходимо заменить в инвентори файле на _ или - в зависимости от названия в системе
Заходим на хост с ансиблем
docker exec -it `docker ps -aqf "name=6-ansible-1"` bash
#или
docker exec -it `docker ps -aqf "name=6_ansible_1"` bash
Ad-hoc команды Ad-hoc - вызов отдельных команд. Ping - проверяем доступность хостов инвернтори
ansible all -m ping
Пример вывода
6-app-2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
6-app-3 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
6-app-1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
Команда uptime- проверяем сколько времени поднят сервер
ansible all -m command -a 'uptime'
Пример вывода
6-app-2 | CHANGED | rc=0 >>
19:08:47 up 1 day, 4:18, 1 user, load average: 1.39, 1.14, 1.22
6-app-1 | CHANGED | rc=0 >>
19:08:47 up 1 day, 4:18, 1 user, load average: 1.39, 1.14, 1.22
6-app-3 | CHANGED | rc=0 >>
19:08:47 up 1 day, 4:18, 1 user, load average: 1.39, 1.14, 1.22
Запускаем плейбук для установки базы:
ansible-playbook /playbooks/playbook-database.yml
Плейбук поставит и установит базу на хост 6_app_3.
Проверяем заходим на хост с базой (из масер-хоста ansible: 6_ansible_1)
ssh 6_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
Сделаем селект из тестовой таблицы
mysql> select * from test;
Пример вывода
+--------------------+
| message |
+--------------------+
| Ansible To Do List |
| Get ready |
| Ansible is fun |
+--------------------+
3 rows in set (0.00 sec)
Запускаем плейбук для установки приложений :
ansible-playbook /playbooks/playbook-application.yml
Проверим что процесс работает на хосте
ssh 6_app_1
После логина найдем что процесс запущен
ps ax | grep python
И убедимся что порт 5000 открыт
netstat -nlp | grep 5000
Для проверки, что приложение запущено на всех хостах и чтобы не проверять по одному, воспользуемся adhoc командой. C помощью утилиты curl проверим работу сервиса и загрузку данных из базы для всех нод
ansible application -a "curl localhost:5000" -m shell
поставим необходимвй пакет 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 из консоли на хосте 6_ansible_1:
nginx
проверим работу nginx вызвав с нашей хост машины: localhost:8080
Добавить еще один экземпляр приложения python, прописав изменения во всех необходимых файлах.
- Doc-документ
- Скриншоты результатов заданий и ответы на вопросы задания
- Отчеты присылать на Яндекс-форму
- Что в ходит в состав ansible playbook?
- Что такое группы хостов?
- Как одной командой "пингануть" группу хостов?