Ansible инструкции и команды¶
Ansible — это инструмент для автоматизации настройки сети серверов и управления ею. С его помощью разработчики развёртывают приложения на серверах. В статье расскажем, как новичку начать работать с Ansible
Что такое Ansible¶
Ansible помогает автоматизировать настройку удалённых серверов в сети и управление ими. Он позволяет управлять конфигурациями машин, доставлять и развёртывать приложения, а также выполнять другие задачи администрирования без ручного вмешательства.
Обычным способом нужно вручную прописывать каждую команду или скрипт и по кругу запускать их на серверах. Когда серверов много, это процесс становится сложным и трудоёмким. C помощью Ansible всю настройку можно прописать в одном конфигурационном файле, который программа разошлёт на большое количество машин. Такой метод работы называют IaC — infrastructure as a code («инфраструктура как код»).
Для чего используют Ansible¶
Ansible используют сетевые администраторы, DevOps-инженеры, разработчики ПО и системные администраторы. Вот основные функции программы:¶
- Управление конфигурацией. Ansible позволяет управлять конфигурациями серверов и поддерживать их, чтобы они оставались в согласованном состоянии. С его помощью можно проводить установку и настройку программного обеспечения, управлять файлами конфигурации и обеспечивать выполнение политик безопасности.
- Развёртывание приложений. Ansible автоматизирует процесс развёртывания приложений, включая установку необходимых зависимостей, копирование файлов приложений, настройку серверов и запуск сервисов.
- Оркестрация. Это процесс координации и управления выполнения задач на нескольких серверах или системах для обеспечения их согласованного и эффективного взаимодействия. Ansible позволяет проводить оркестрацию нескольких серверов — например, при обновлении кластеров или выполнении сложных операций, требующих координации между различными сервисами и машинами.
- Управление облачной инфраструктурой. Ansible поддерживает множество провайдеров облачных услуг, включая AWS, Azure и Google Cloud. Он позволяет создавать, изменять и удалять облачные ресурсы, включая виртуальные машины, сети, хранилища и другие компоненты.
- Управление контейнерами. Контейнеры — это небольшие самодостаточные единицы, которые включают всё необходимое для выполнения приложения: код, зависимости, библиотеки и конфигурационные файлы. Они обеспечивают изоляцию приложения от системы, на которой оно работает, что позволяет легко переносить и запускать приложения в различных средах. Ansible интегрируется с Docker и Kubernetes, что позволяет автоматизировать развёртывание и масштабирование контейнеризированных приложений, а также управление ими.
- Обеспечение безопасности. Ansible может использоваться для автоматизации задач безопасности, включая установку обновлений и патчей, настройку файерволов, управление учётными записями пользователей и применение политик безопасности.
- Мониторинг и оповещение. Ansible помогает в настройке систем мониторинга, таких как Prometheus, Nagios, Zabbix, и управлении ими, а также в настройке систем оповещения. Он помогает провести установку агентов мониторинга, настройку метрик и создание уведомлений.
- Резервное копирование и восстановление. Ansible можно использовать для автоматизации процессов резервного копирования и восстановления данных. Это включает настройку задач для регулярного создания резервных копий и автоматизированное восстановление данных в случае сбоя.
- Управление пользователями и группами. Ansible упрощает управление учётными записями пользователей и группами на серверах, что важно для соблюдения политик безопасности и управления доступом.
- Создание тестовых и разработческих сред. Ansible позволяет быстро и легко создавать и настраивать тестовые и разработческие среды, обеспечивая их идентичность продуктивным системам. Это помогает разработчикам и тестировщикам работать в условиях, максимально приближенных к реальным.
Изучить Ansible и другие инструменты для работы в DevOps можно на курсе «Системный администратор». Всего за шесть месяцев вы научитесь администрировать Linux на реальных проектах и освоите базу DevOps.
Основные понятия Ansible¶
Inventory (инвентарь)¶
Inventory — это файл, содержащий список хостов и групп хостов, которыми управляет Ansible. По умолчанию Ansible использует файл /etc/ansible/hosts, но можно указать любой другой файл с помощью параметра -i.
[webservers]
web1.example.com
web2.example.com
[dbservers]
db1.example.com
db2.example.com
Модули¶
Модули Ansible — это единицы кода, выполняющие конкретные действия, такие как установка пакетов, копирование файлов, управление сервисами и многое другое. Ansible включает сотни встроенных модулей для выполнения различных задач. Примеры модулей: apt, yum, copy, service.
Playbook¶
Плейбук Ansible — это YAML-файл, содержащий сценарии, которые описывают задачи по автоматизации. Каждый плейбук состоит из одного или нескольких «play», которые определяют группу хостов и список задач для выполнения.
- hosts: webservers
tasks:
- name: Deploy web server
pkgng: pkg="{{ item }}" state=present
with_items:
- nginx
- name: Starting web server
service:
name: nginx
enabled: yes
state: started
Ad hoc команды¶
Ad hoc команды Ansible позволяют выполнять одноразовые задачи на хостах без необходимости создания плейбуков.
Пример ad hoc команды для проверки доступности хостов:
ansible all -m ping.
Файлы конфигурации¶
Основной файл конфигурации Ansible — ansible.cfg. В нём можно указать различные параметры, такие как путь к инвентарю, настройки SSH и многое другое. Пример минимальной конфигурации:
[defaults]
inventory = ./inventory
Инструкция по работе с Playbook¶
Playbook в Ansible — это основной файл конфигурации, который используется для автоматизации задач управления и настройки системы. Playbook состоит из одного или нескольких play («игр»), которые описывают, как должны быть настроены или развёрнуты узлы в серверной инфраструктуре. Каждый play в playbook выполняет набор задач на определённых хостах или группах хостов.
Среди основных компонентов Playbook:
- Hosts (хосты). Указывают, на каких серверах или группах серверов Ansible будет выполнять задачи. Хосты могут быть определены в файле инвентаризации Ansible или непосредственно в playbook.
- Variables (переменные). Позволяют задавать значения, которые могут быть использованы в различных частях playbook. Переменные Ansible могут быть объявлены в playbook, файлах переменных или переданы из командной строки.
- Tasks (задачи). Основная часть playbook, которая выполняет конкретные действия. Каждая задача включает в себя модуль (например, apt, yum, service), который выполняет действие, и описание задачи.
- Handlers (обработчики). Специальные задачи, которые выполняются только в случае, если одна из задач в playbook изменила состояние системы. Обычно используются для перезапуска сервисов после внесения изменений.
- Roles (роли). Позволяют структурировать playbook в повторно используемые и организованные модули. Роли могут включать задачи, обработчики, переменные и шаблоны, которые могут быть использованы в различных playbook.
- Templates (шаблоны). Используются для генерации файлов конфигурации на основе переменных и данных, определённых в playbook. Шаблоны обычно написаны с использованием Jinja2.
- Includes (включения). Позволяют включать другие playbook или задачи в текущий playbook для лучшей организации и повторного использования кода.
Jinja2 — это шаблонизатор для Python, который используется для генерации текстов на основе шаблонов. Он широко применяется для создания конфигурационных файлов, HTML-документов и других текстовых файлов, где требуется вставка переменных и логики.
Для написания playbook используется формат YAML — YAML Ain't Markup Language («YAML не язык разметки»). YAML — это простой удобочитаемый формат сериализации данных, который используется для представления данных в структурированном виде благодаря своей простоте и читаемости.
Создание Playbook¶
Пример создания простого playbook для установки и настройки веб-сервера Nginx.
- Создание файла nginx.yml: (freebsd)
- hosts: webservers
tasks:
- name: Deploy web server
pkgng: pkg="{{ item }}" state=present
with_items:
- nginx
- name: Starting web server
service:
name: nginx
enabled: yes
state: started
- Запуск playbook с помощью команды:
ansible-playbook nginx.yml.
links: