Проект

Общее

Профиль

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:

  1. Hosts (хосты). Указывают, на каких серверах или группах серверов Ansible будет выполнять задачи. Хосты могут быть определены в файле инвентаризации Ansible или непосредственно в playbook.
  2. Variables (переменные). Позволяют задавать значения, которые могут быть использованы в различных частях playbook. Переменные Ansible могут быть объявлены в playbook, файлах переменных или переданы из командной строки.
  3. Tasks (задачи). Основная часть playbook, которая выполняет конкретные действия. Каждая задача включает в себя модуль (например, apt, yum, service), который выполняет действие, и описание задачи.
  4. Handlers (обработчики). Специальные задачи, которые выполняются только в случае, если одна из задач в playbook изменила состояние системы. Обычно используются для перезапуска сервисов после внесения изменений.
  5. Roles (роли). Позволяют структурировать playbook в повторно используемые и организованные модули. Роли могут включать задачи, обработчики, переменные и шаблоны, которые могут быть использованы в различных playbook.
  6. Templates (шаблоны). Используются для генерации файлов конфигурации на основе переменных и данных, определённых в playbook. Шаблоны обычно написаны с использованием Jinja2.
  7. Includes (включения). Позволяют включать другие playbook или задачи в текущий playbook для лучшей организации и повторного использования кода.

Jinja2 — это шаблонизатор для Python, который используется для генерации текстов на основе шаблонов. Он широко применяется для создания конфигурационных файлов, HTML-документов и других текстовых файлов, где требуется вставка переменных и логики.

Для написания playbook используется формат YAML — YAML Ain't Markup Language («YAML не язык разметки»). YAML — это простой удобочитаемый формат сериализации данных, который используется для представления данных в структурированном виде благодаря своей простоте и читаемости.

Создание Playbook

Пример создания простого playbook для установки и настройки веб-сервера Nginx.

  1. Создание файла 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
  1. Запуск playbook с помощью команды:
ansible-playbook nginx.yml.

links: