Что такое Ansible и зачем он нужен: автоматизация без агентов

Рейтинг: 40.9% · 8 голосов
Подробный курс по Ansible с прицелом на экзамен RHCE EX294: установка и инвентарь, плейбуки, переменные и факты, Vault, циклы и условия, шаблоны Jinja2, роли и коллекции, Execution Environments и ansible-navigator, управление системами (диски, LVM, cron, SELinux, firewalld). Примеры на RHEL/Fedora. Актуально на 2026.
Ответить
Аватара пользователя
Maksim_DevOps
Сообщения: 47
Зарегистрирован: 11 май 2026, 05:31

Что такое Ansible и зачем он нужен: автоматизация без агентов

Сообщение Maksim_DevOps »

Оглавление курса (47)
  1. Что такое Ansible и зачем он нужен: автоматизация без агентов (вы здесь)
  2. Сертификация RHCE и экзамен EX294: что внутри и как готовиться
  3. Архитектура Ansible: control node, узлы, модули и плагины
  4. Установка Ansible на control node: dnf, pip и версии ansible-core
  5. Подготовка управляемых узлов: SSH, пользователь и sudo
  6. Инвентарь Ansible: hosts, группы и переменные
  7. Настройка Ansible: файл ansible.cfg и приоритеты конфигурации
  8. Host patterns и инструменты командной строки Ansible
  9. Ad hoc команды Ansible: быстрые задачи без плейбука
  10. Ansible playbook: что это такое и как устроен
  11. Структура плейбука: play, task, модули и переменные
  12. Запуск плейбуков: проверка, теги, ограничения и отладка
  13. Параллелизм и порядок выполнения: forks, serial, strategy
  14. Факты Ansible: сбор информации об узлах
  15. Переменные Ansible: типы, объявление и приоритет
  16. Регистрация результатов и специальные переменные
  17. Ansible Vault: шифрование паролей и секретов
  18. Организация инвентаря: group_vars, host_vars и вложенные группы
  19. Динамический инвентарь и инвентарные плагины
  20. Циклы в Ansible: loop, списки и словари
  21. Повтор задачи до условия: until, retries и delay
  22. Условия в Ansible: директива when и логика
  23. Jinja2 в Ansible: выражения, фильтры и подстановки
  24. Обработчики Ansible: handlers, notify и flush_handlers
  25. Обработка ошибок: failed_when, changed_when и ignore_errors
  26. Блоки в Ansible: block, rescue и always
  27. Управление файлами: модули file, copy, fetch и stat
  28. Архивы и сборка файлов: archive, unarchive, assemble
  29. Точечное редактирование файлов: lineinfile и blockinfile
  30. Шаблоны Jinja2: модуль template и динамические конфиги
  31. Jinja2 продвинуто: фильтры, циклы, макросы и lookup
  32. Модули Ansible: ansible-doc и поиск нужного модуля
  33. Разработка собственного модуля Ansible на Python
  34. Роли Ansible и Ansible Galaxy: переиспользование
  35. Разработка роли Ansible: создание с нуля
  36. Зависимости ролей и requirements.yml
  37. Коллекции Ansible: ansible.posix, community и своя коллекция
  38. Execution Environments: контейнеры для запуска Ansible
  39. Сборка Execution Environment с ansible-builder
  40. ansible-navigator: запуск плейбуков в Execution Environment
  41. Управление SSH-ключами через Ansible: authorized_key
  42. Управление дисками: filesystem, mount и parted
  43. LVM через Ansible: тома, группы и расширение
  44. Планировщик задач: cron и systemd timers через Ansible
  45. Безопасность: hardening SSH и репозитории dnf/yum
  46. SELinux через Ansible: булевы, контексты и порты
  47. Сквозной проект и подготовка к экзамену EX294
Представь утро, когда тебе прилетает задача: накатить один и тот же набор пакетов, конфигов и сервисов на тридцать новых серверов. Руками через SSH? К третьей машине ты собьёшься, на десятой забудешь включить firewalld, а на двадцатой случайно поставишь не ту версию. Через неделю никто уже не вспомнит, что и где меняли. Эта боль - ручная рутина, дрейф конфигураций и "работает только на проде, потому что там Петя что-то правил" - именно то, что решает Ansible. Если ты только начинаешь разбираться с инфраструктурой как кодом и готовишься к RHCE, этот урок - фундамент, на котором будет стоять весь курс.

Что такое Ansible простыми словами

Если совсем коротко, то Ansible это open-source инструмент автоматизации и управления конфигурацией от Red Hat. Ты описываешь желаемое состояние системы в текстовых файлах формата YAML, а Ansible приводит твои серверы к этому состоянию. Поставить nginx, открыть порт 443, положить конфиг, перезапустить сервис, завести пользователя - всё это становится кодом, который лежит в git, ревьюится и повторяется одинаково хоть на одной машине, хоть на тысяче.

Когда говорят "ansible это про автоматизацию", имеют в виду три уровня задач. Первый - настройка серверов (configuration management): пакеты, файлы, службы, пользователи. Второй - деплой приложений: выкатка новой версии кода на пул хостов в нужном порядке. Третий - оркестрация: согласованные действия на группах машин, например "сначала выведи ноду из балансировщика, потом обнови, потом верни". И всё это - инфраструктура как код (IaC): конфигурация перестаёт жить в голове админа и переезжает в репозиторий.

Для тех, кто осваивает ansible для начинающих, важно сразу понять: ты пишешь не последовательность команд "сделай это, потом то", а описание результата. Это называется декларативность. Ты говоришь "пакет httpd должен быть установлен", а не "выполни dnf install httpd". Разница принципиальная, и к ней мы ещё вернёмся.

Изображение

Agentless и push-модель: главное отличие Ansible

Вот первая суперсила. Ansible работает без агентов - agentless. На управляемые узлы не нужно ставить никакой демон, никакой постоянный процесс, который висит в памяти и слушает порт. Всё, что требуется на стороне сервера, у тебя уже есть: рабочий SSH и Python (а для управления сетевыми железками - даже без Python, по API).

Схема такая. Есть управляющая нода (control node) - твой ноутбук или выделенная машина, где установлен сам Ansible. Есть управляемые узлы (managed nodes) - те серверы, которые ты настраиваешь. Ansible подключается к ним по SSH, копирует туда временные модули, выполняет их, забирает результат и подчищает за собой. Это push-модель: инициатива всегда исходит от управляющей ноды, ты сам решаешь, когда и что применять. Сравни с pull-моделью, где на каждом сервере крутится агент и сам ходит за конфигом к мастеру.

Почему agentless - это так ценно на практике:
  • Нет агентов - нечего ставить, обновлять и чинить на сотнях машин. Меньше движущихся частей.
  • Нет лишней поверхности атаки: не открываешь дополнительный порт под демон, используешь уже проверенный SSH.
  • Завёл новый сервер - он управляем сразу, как только туда пускает твой ключ. Никакого bootstrap агента.
  • Меньше зависимостей: версия Ansible живёт на control node, а не размазана по всему парку.
Тут полезно коротко сравнить ansible с конкурентами. Chef и Puppet исторически построены на агентах: на каждом узле стоит клиент, который периодически тянет каталог с центрального сервера (pull). Salt тоже по умолчанию использует миньоны-агенты, хотя умеет и salt-ssh. Ansible пошёл другим путём - agentless по SSH из коробки, и именно поэтому порог входа у него ниже, а в RHEL-мире он стал стандартом. Это не значит, что остальные плохи, просто модель другая.

И сразу разведём Ansible и Terraform, потому что новички их путают. Terraform поднимает саму инфраструктуру: создаёт виртуалки, сети, балансировщики, диски у облачного провайдера - то, чего ещё нет. Ansible настраивает то, что уже существует: операционную систему и приложения внутри машины. Грубая формула: Terraform строит коробку, Ansible наполняет её содержимым. Часто их используют вместе - Terraform выдал тебе голые серверы, Ansible превратил их в рабочий кластер.

Идемпотентность - почему ansible на linux безопасно запускать дважды

Второе ключевое свойство, ради которого Ansible вообще стоит изучать, - идемпотентность. Звучит страшно, смысл простой: повторный запуск не ломает уже настроенное. Если ты прогнал плейбук и всё в нужном состоянии, второй прогон ничего не сделает и честно скажет "changed=0". Модули сначала проверяют текущее состояние и меняют только то, что отличается от желаемого.

Сравни два подхода. Голый скрипт:

Код: Выделить всё

#!/bin/bash
useradd deploy
echo "listen 8080;" >> /etc/myapp/ports.conf
systemctl restart myapp
Запусти его дважды - и useradd ругнётся, что пользователь уже есть, в конфиг улетит вторая строчка listen, а сервис перезапустится вообще без причины. Скрипт не идемпотентен.

А вот задача на Ansible, описывающая состояние, а не действия:

Код: Выделить всё

- name: Веб-сервер должен быть установлен и запущен
  hosts: web
  become: true
  tasks:
    - name: Пакет httpd установлен
      ansible.builtin.package:
        name: httpd
        state: present

    - name: Служба httpd включена и работает
      ansible.builtin.service:
        name: httpd
        state: started
        enabled: true

    - name: Порт https открыт в firewalld
      ansible.posix.firewalld:
        service: https
        state: enabled
        permanent: true
        immediate: true
Прогоняй сколько угодно раз. Если httpd уже стоит, служба крутится, а порт открыт - Ansible не дёрнет ничего лишнего. Это и есть та самая надёжность: плейбук одновременно и инструмент настройки, и живая документация состояния системы.

Маленькое замечание про дистрибутивы. В RHEL и Fedora пакеты ставит dnf, службами рулит systemd, фаервол - это firewalld, а ещё есть SELinux, который любит ронять чужие конфиги в enforcing. Модуль ansible.builtin.package сам выберет менеджер по факту ОС: на RHEL это dnf, на Ubuntu/Debian - apt, на российских RED OS или Astra Linux - их штатные репозитории (RED OS из rpm-семейства, Astra - из deb). Имена пакетов и сервисов всё равно различаются между семействами, и это нормально - такие развилки разрулим в следующих уроках через факты и переменные.

Типичные грабли новичков
  • Думают, что Ansible надо "поставить на сервер". Нет. Ansible ставится только на control node. На управляемые узлы - ничего, кроме SSH и Python.
  • Пишут плейбук как bash в YAML-обёртке: пачка ansible.builtin.command и shell на всё подряд. Так ты теряешь идемпотентность, ведь Ansible не знает, что делает твоя сырая команда. Правило: ищи специализированный модуль, а command/shell - крайнее средство.
  • Путают Ansible и Terraform, пытаясь Ansible создавать виртуалки с нуля. Можно, но это не его сильная сторона - инфру лучше отдать Terraform.
  • Игнорируют, что для системных задач нужен become: true (эскалация до root через sudo). Без него получишь permission denied на установке пакетов.
  • Забывают, что на RHEL в строгом режиме SELinux и firewalld не дадут сервису заработать, даже если сам сервис настроен идеально. Конфиг есть, а порт закрыт - и кажется, что "Ansible не сработал".
Мини-лаба: пощупай руками

Глубокую установку разберём отдельно, а пока сделай минимальный круг, чтобы прочувствовать agentless и idempotency.
  • Поставь Ansible на control node (RHEL/Fedora):

    Код: Выделить всё

    sudo dnf install -y ansible-core
    На Ubuntu/Debian аналог -

    Код: Выделить всё

    sudo apt install -y ansible
  • Проверь версию и убедись, что бинарь на месте:

    Код: Выделить всё

    ansible --version
  • Создай файл inventory.ini с одной строкой - например localhost ansible_connection=local, чтобы не возиться с SSH на первом шаге.
  • Дёрни модуль ping (это не ICMP, а проверка связи и Python на узле):

    Код: Выделить всё

    ansible all -i inventory.ini -m ansible.builtin.ping
    Хороший ответ - "pong".
  • Собери факты о машине и посмотри, что Ansible о ней знает:

    Код: Выделить всё

    ansible all -i inventory.ini -m ansible.builtin.setup
  • Сохрани плейбук с httpd из урока в site.yml и прогони дважды подряд:

    Код: Выделить всё

    ansible-playbook -i inventory.ini site.yml
    Во второй раз поймай глазами changed=0 - это и есть идемпотентность вживую.
Контрольные вопросы
  • Что значит "Ansible agentless" и что реально требуется на управляемом узле для работы?
  • Чем push-модель Ansible отличается от pull-модели Chef или Puppet?
  • Что такое идемпотентность и почему голый bash-скрипт обычно ей не обладает?
  • Как разделить зоны ответственности между Terraform и Ansible на одном проекте?
Итог

Ansible - это agentless-инструмент управления конфигурацией: подключается по SSH, работает по push-модели и описывает желаемое состояние декларативно, а не пошагово. Два слова, которые надо унести из урока, - agentless и идемпотентность: первое снимает боль с поддержки агентов, второе делает прогоны безопасными и повторяемыми. Рядом стоит Terraform (поднимает инфру), а Ansible её настраивает. Это и есть фундамент всего курса и базовый контекст для экзамена EX294 - дальше будем наращивать инвентари, переменные, роли и шаблоны.
👍3 ❤️1 🔥 😄 🤔1
Аватара пользователя
sonatine
Сообщения: 1
Зарегистрирован: 18 май 2026, 23:46

Re: Что такое Ansible и зачем он нужен: автоматизация без агентов

Сообщение sonatine »

Наконец-то по-человечески объяснили разницу с терраформом. Я месяц думал что это одно и то же и пытался ансиблом виртуалки в облаке плодить, бесился что неудобно. Спасибо, дошло.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
hacker_artem
Сообщения: 1
Зарегистрирован: 15 май 2026, 14:43

Re: Что такое Ansible и зачем он нужен: автоматизация без агентов

Сообщение hacker_artem »

Прогнал плейбук с httpd два раза, второй раз реально changed=0. А вопрос - become: true это всегда через sudo идёт или можно su? И как быть если на узле sudo вообще без пароля не настроен?
👍2 ❤️ 🔥 😄 🤔1
Ответить
Следующая глава →
Сертификация RHCE и экзамен EX294: что внутри и как готовиться

Все главы курса «Ansible: автоматизация и подготовка к RHCE (EX294)»

Поделиться темой: ✈ Telegram VK
Похожие запросы: что такое ansible простыми словамиansible для начинающих с чего начатьустановка ansible на linuxansible inventory и hosts файлчто такое playbook в ansibleструктура ansible playbook из чего состоит

Вернуться в «Ansible: автоматизация и подготовка к RHCE (EX294)»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость