Ansible в действии | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Алгоритмы и структуры данных Team Lead Архитектура и шаблоны проектирования Разработчик IoT C# Developer. Professional PostgreSQL Разработчик на Spring Framework
-5%
Flutter Mobile Developer NoSQL iOS Developer. Basic
-10%
C++ Developer. Basic C++ Developer. Professional Android Developer. Professional Microservice Architecture Unity Game Developer. Professional Базы данных Node.js Developer React.js Developer Специализация Java-разработчик
-25%
Web-разработчик на Python Framework Laravel Cloud Solution Architecture Vue.js разработчик Интенсив «Оптимизация в Java» Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив "Tarantool" PHP Developer. Basic
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK Administrator Linux. Professional Дизайн сетей ЦОД Разработчик IoT PostgreSQL Экспресс-курс "Версионирование и командная работа с помощью Git"
-30%
Microservice Architecture Highload Architect Специализация Administrator Linux
-25%
Network engineer Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Tarantool" Network engineer. Basic
Корпоративные курсы
Безопасность веб-приложений IT-Recruiter Дизайн сетей ЦОД Компьютерное зрение Разработчик IoT Вебинар CERTIPORT Machine Learning. Professional
-6%
NoSQL Пентест. Практика тестирования на проникновение Java QA Engineer. Базовый курс Руководитель поддержки пользователей в IT
-8%
SRE практики и инструменты Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Infrastructure as a code Супер-практикум по использованию и настройке GIT Промышленный ML на больших данных Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes» BPMN: Моделирование бизнес-процессов Основы Windows Server
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02

Ansible в действии

Ansible — программное обеспечение с открытым исходным кодом, автоматизирующее настройку и развертывание ПО. Ansible как система имеет следующие ключевые особенности: безагентная. В клиенте нет установленного ПО либо агента, который общается с сервером; • идемпотентная. Вне зависимости от того, сколько раз вызывается операция, результат будет одним и тем же; • простая и расширяемая. Ansible написана на Python и использует для написания команд YAML. Оба вышеупомянутых языка в изучении довольно просты.

Установка и запуск трудностей обычно не вызывает:

# ubuntu
sudo apt-get install ansible
#mac-OS
brew install ansible

Структура Ansible

Модули

Модули представляют собой небольшие программы, которые выполняют определённую работу на сервере. К примеру, вместо запуска этой команды:

sudo apt-get install htop

Можно воспользоваться модулем apt и установить htop:

- name: Install htop
apt: name=htop

Плагины

Плагины — фрагменты кода, расширяющие основные функциональные возможности Ansible. В принципе, Ansible изначально поставляется с несколькими удобными плагинами, однако можно написать и свой.

Инвентаризация хостов

Для предоставления перечня хостов надо обозначить список, находящийся в файле инвентаризации (напоминает содержание файла hosts).

В самом простом виде он может содержать лишь одну строку:

35.178.45.231  ansible_ssh_user=ubuntu

Playbooks

Ansible playbooks является способом отправки команд на удалённые компьютеры посредством скриптов. Вместо того, чтобы персонально применять команды Ansible для удалённой настройки компьютеров из командной строки, можно настраивать целые сложные среды и передавать скрипт одной или нескольким системам.

group_vars

Этот файл содержит набор переменных, допустим, имя пользователя и пароль БД.

Роли

Не что иное, как способ сгруппировать ряд задач в один контейнер, дабы эффективно автоматизировать работу посредством понятной структуры каталогов.

Обработчики

Это списки задач, которые, по сути, не отличаются от обычных задач, на которые ссылается глобальное уникальное имя и которые оповещаются уведомителями. Когда ничто не уведомляет обработчик, запускаться он не станет. Вне зависимости от того, сколько именно задач уведомляет обработчик, запускается он лишь один раз после завершения всех задач.

Теги

Когда у вас playbook с большим объёмом, бывает полезно иметь возможность запускать лишь определённую часть конфигурации.

Демо «Реальное приложение»

Чтобы показать пример работы Ansible, давайте установим Laravel-приложение в VPS. Задействуем lightsail.

Последовательность действий при создании и запуске Laravel APP:

  1. Создаём экземпляр Ubuntu Lightsail.
  2. Устанавливаем зависимости Ansible на VPS.
  3. Добавляем SSH-ключи в Git.
  4. Выполняем сборку хостов и ansible.cfg.
  5. Определяем роль в Ansible.
  6. Определяем обработчик в Ansible.
  7. Устанавливаем модули PHP.
  8. Устанавливаем Nginx.
  9. Добавляем default-конфигурацию Nginx.
  10. Добавляем переменные для управления учётными данными БД, хоста, URL-адресом источника GitHub и переменными .env.
  11. Используйем Ansible-Vault.
  12. Создаём БД MySql, имя пользователя и пароль.
  13. Клонируем кодовую базу в ваш VPS.
  14. Генерируем .env.
  15. Создаём playbook.

Теперь рассмотрим каждый пункт более подробно.

Создаём экземпляр Ubuntu Lightsail

Переходим в панель управления Lightsail и нажимаем «Создать экземпляр».

1_BJsuHjjOv8l_iWyK_HCimg1_1540x439_1-20219-d19241.jpg

Выбираем ОС.

1_RyjXMXMvPNTju05QD8hK1Q1_1540x779_1-20219-d34f20.jpg

Выбираем «Добавить скрипт запуска», запускаемый после создания вашего экземпляра. И не забываем получить SSH-ключ.

1_szDeGFIuFnXMJAx9ri6ANg1_1-20219-0759e5.jpg

Устанавливаем зависимости Ansible на нашем VPS

Чтобы установить нужные зависимости, добавляем эти sh-команды:

sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt-get update
sudo apt-get install -y python2.7 python3 python-pip

1_mv8hONZPT7zZjG0_bJ2XGQ1_1-20219-b39e2b.jpg

1_SFEcu_pqfMrQSkBT0BKBEQ1_1-20219-26e6a5.jpg

Теперь у нас уже есть готовый экземпляр, поэтому можем переходить к построению Ansible Project.

Добавляем SSH-ключи в Git

Нужно добавить свой сервер id_rsa.pub к своим ключам GitHub SSH, предварительно войдя в свой сервер.

# Подключаемся к серверу через SSH и запускаем
ssh-keygen
sudo chmod -R 644 .ssh/id_rsa
cat .ssh/id_rsa.pub

# Добавляем результат команды в аккаунт Git
# github settings=> SSH keys => Add new Key
# bitbucket settings=> ssh-keys => Add new Key

Сборка хостов и ansible.cfg

hosts.ini

[aws]
# Ваш IP сервера
127.0.0.39

ansible.cfg

[defaults]
hostfile = hosts.ini
# configure log dir
log_path= logs/ansible-log.log

Определяем роли в Ansible

Используя модуль Ping, убедимся, что хост работает, после чего обновляем все пакеты и устанавливаем 2 модуля: git и htop.

---
- ping: ~
###
- name: Update apt packages
  apt:
    update_cache: yes
##
- name: Install GIT VCS
  apt:
    name: git
    state: latest
##
- name: Install htop
  apt: name=htop

Определение обработчика

---
- name: Restart PHP-FPM
  service:
    name: php{{php_version}}-fpm
    state: restarted
    ####
- name: Restart Nginx
  service:
    name: nginx
    state: restarted

Продолжение в следующей части, не пропустите!

Источник — «Ansible In Action».

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться