Код
#подборки

Ansible для новичков: что это, как устроен и зачем нужен

Мощный инструмент управления серверами для настоящих космических рейнджеров.

Иллюстрация: Оля Ежак для Skillbox Media

В фильме «Игра Эндера» ансиблом называли параллакс-коммуникатор для передачи сообщений на межпланетные расстояния. Наш, земной Ansible работает почти так же — только связывает он не звездолёты, а веб-серверы с управляющим компьютером. Да и используют его вовсе не жукеры, а вполне миролюбивые DevOps-инженеры и сисадмины.

Из этой статьи вы узнаете:

Эксперт

Дмитрий Зайцев

CTO Flocktory, программный директор профессии «DevOps-инженер» в Skillbox, директор программного комитета DevOpsConf.

Что такое Ansible

Представьте, что у вас есть много удалённых серверов, на каждый из которых нужно накатить изменения: обновить систему, создать папку, добавить пользователя, сделать бэкап — что угодно. Как это сделать?

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

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

А ещё, в отличие от большинства конкурентов, Ansible — безагентная система. Это значит, что для работы не нужно накатывать на серверы программы-агенты. Главное, чтобы клиент Ansible был установлен на управляющем хосте — им может быть что угодно, вплоть до вашего домашнего компьютера.

Интересно, что название вполне утилитарного Ansible взято из научной фантастики. В романах Урсулы Ле Гуин так называется аппарат для связи между космическими кораблями. Поэтому во время настройки серверов ансиблом вы заслуженно можете считать себя космическим инженером :)

Как работает Ansible: плейбуки, модули и задачи

Как мы отметили ранее, в Ansible все манипуляции с сервером можно описать в едином файле. Называется такой файл плейбуком — по сути, это набор инструкций, которые нужно выполнить на сервере. Плейбуки пишутся на декларативном языке YAML — выглядит это так:

---
- name: Example Ansible Playbook
  hosts: all
  gather_facts: no

  tasks:
    # Устанавливаем пакет Vim
    - name: Install vim package
      ansible.builtin.apt:
        name: vim
        state: present

    # Добавляем пользователя 'newuser'
    - name: Add user 'newuser'
      ansible.builtin.user:
        name: newuser
        state: present
        shell: /bin/bash

    # Копируем файл на удалённый хост
    - name: Copy file to remote host
      ansible.builtin.copy:
        src: /path/to/local/file.txt
        dest: /path/to/remote/file.txt

    # Устанавливаем и запускаем Nginx
    - name: Install and start nginx
      ansible.builtin.apt:
        name: nginx
        state: present
      notify:
        - Start nginx

В этом примере плейбук по очереди выполняет разные действия — словно актёр на сцене по заученному сценарию:

  • устанавливает редактор кода Vim;
  • создаёт нового пользователя с именем newuser;
  • копирует файл на удалённый хост;
  • устанавливает веб-сервер Nginx.

Видно, что за каждое действие в плейбуке отвечает отдельный кусочек кода — в Ansible они называются модулями. Это такие небольшие программки, которые и творят всю серверную магию. Например, ansible.builtin.user добавляет на хост нового пользователя.

Модулей для Ansible написано великое множество — можно собирать свои плейбуки словно из деталек Lego. А если ваши инженерные вкусы весьма специфичны, можно написать свой собственный модуль.

Для удобства модули заворачивают в задачи, или «таски». Сами по себе они не выполняют никаких операций — лишь запускают нужные модули в нужное время. Например, в этом фрагменте задача Copy file to remote host запускает модуль ansible.builtin.copy, чтобы «залить» файл на хост:

# Копируем файл на удалённый хост
    - name: Copy file to remote host
      ansible.builtin.copy:
        src: /path/to/local/file.txt
        dest: /path/to/remote/file.txt

С механикой работы разобрались — теперь давайте посмотрим на задачи, где Ansible может быть полезен.

Для чего нужен Ansible

Настройка конфигураций. Парой движений можно привести серверы в рабочее состояние. Например, если вы хотите установить обновление системы сразу на все машины организации, всё, что нужно, — это записать IP-адреса узлов в плейбук и запустить его со своего компьютера.

Управление безопасностью. С помощью Ansible можно задать серверам единую политику безопасности. Например, с помощью модуля iptables можно настроить брандмауэры сразу всех подконтрольных машин — а ansible-vault зашифрует файлы с паролями и другие ценные данные.

Развёртывание приложений. Ansible можно использовать в паре с тем же Jenkins и другими инструментами потоковой сборки. В этом случае Jenkins будет подхватывать коммиты разработчиков из Git и рассылать их на серверы с помощью Ansible.

Настройка облачных ресурсов. В Ansible есть модули для создания виртуальных машин в облачных средах — например, VK Cloud, VMware, OpenStack, AWS, Azure, Google Cloud Platform и многих других.

Создание контейнеров. Контейнер — это программная «коробка», в которой находится приложение и всё, что ему нужно для работы: базы данных, фреймворки и другие зависимости. И хотя сам по себе Ansible не подходит для создания контейнеров, он здорово облегчает настройку инструментов, которые это «умеют» — например, Docker и Podman.

Главные фишки Ansible

Вот за что платформу ценят инженеры и разработчики:

  • Идемпотентность — модули Ansible можно запускать многократно без риска нежелательных изменений. Если система уже находится в нужном состоянии, модули просто не сработают. Представьте, что хотите посолить борщ, но голос сверху говорит вам, что вы уже это сделали, — вот это и есть идемпотентность :)
  • Компактность — благодаря безагентной модели вам не нужно устанавливать на серверы лишний софт. Главное, чтобы все хосты поддерживали соединение по SSH и запуск скриптов на Python.
  • Кросс-платформенность — управляющий узел можно развернуть на машине с любой системой на борту: Linux, FreeBSD, macOS, Ubuntu, Windows (с небольшими костылями) — или в облаке.
  • Open source — приложение не собирает данные пользователей, а его код доступен для изучения разработчикам. Более того, Ansible можно использовать бесплатно в некоммерческих целях.
  • Кэширование — Ansible кэширует данные о серверах, которыми управляет: список пользователей, настройки сети и другое. Когда вы захотите получить эти сведения, Ansible автоматически подтянет их из кэша, не тратя время на соединение с сервером.
  • Интеграция с DevOps-инструментами — Ansible может служить низкоуровневой «подложкой» для работы Kubernetes, Docker и других инструментов оркестрации и управления контейнерами.

Из чего состоит Ansible

Часть из этих понятий мы разобрали в предыдущих разделах — теперь попробуем уложить всё в единую картину.

Инвентарь. Список серверов, на которых будут выполняться задачи. Файл инвентаря создаётся автоматически после установки Ansible и хранится в директории /etc/ansible/hosts. Чтобы система работала, в файле нужно прописать IP-адреса подконтрольных серверов.

Плейбук. Файл YAML, в котором прописаны задачи для выполнения на серверах. Плейбук может состоять из нескольких «плеев» — каждый из них отвечает за один или несколько хостов. Если плейбук — это книга, то плей можно условно сравнить с одной из глав.

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

Задачи. «Кусочки» скрипта, которые запускают модули и передают им параметры для выполнения.

Роли. Несколько однотипных задач можно объединять в роли. Допустим, у вас есть несколько задач, которые отвечают за один и тот же процесс: «установка Nginx», «копирование конфига Nginx», «перезагрузка Nginx». Чтобы не запускать эти задачи по отдельности, можно прописать в плейбуке роль «Установка и настройка Nginx».

Плагины. То же самое, что и модули, но работают не на хостах, а на управляющей машине. Нужны для автоматизации рутины: получения данных о серверах, фильтрации результатов, вывода журналов работы сервера и многих других действий.

Прикладные интерфейсы. С помощью API можно подключаться к сторонним приложениям — например, системам оркестрации, облачным провайдерам и сервисам IaC («инфраструктура как код»).

Где изучать Ansible

Освоить Ansible можно самостоятельно, изучив официальную документацию. Но если такой путь кажется вам сложным, можно попробовать записаться на курсы. Например, Stepik предлагает бесплатный курс по Ansible из 38 уроков — для прохождения не нужны глубокие знания в системном администрировании.

Если же вам интересно настраивать веб-серверы и вы хотите заниматься этим профессионально, можно присмотреться к программе «Профессия DevOps-инженер». На ней можно научиться всему, что нужно для старта и развития карьеры в DevOps, — в том числе и работе с Ansible.

Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия DevOps-инженер Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована