Перейти к содержанию
Innovialabs

Что такое Ansible: настройка серверов без агентов

Основы3 мин

Коротко

Ansible — инструмент автоматизации, который по SSH выполняет на серверах описанные в YAML задачи; ничего ставить на серверы не нужно, а повторный запуск безопасен благодаря идемпотентности.

Что такое Ansible

Ansible — инструмент для автоматической настройки серверов (configuration management). Вы описываете в YAML-файле, каким должен быть сервер: какие пакеты установлены, какие пользователи созданы, какой конфиг у nginx. Ansible подключается к серверам по SSH и приводит их к этому состоянию.

Главная особенность — agentless: на управляемые серверы не нужно ставить никаких агентов. Достаточно SSH-доступа и Python, который есть почти в любом Linux-дистрибутиве. Ansible устанавливается только на машину, с которой вы запускаете команды (ноутбук или CI-сервер).

Четыре базовых понятия

Inventory

Список серверов, сгруппированных по ролям:

[web]
web1.example.com
web2.example.com

[db]
db1.example.com ansible_user=deploy

Группы позволяют сказать «выполни это на всех web-серверах» одной командой.

Модули

Модуль — готовый «кирпичик» для конкретного действия: apt ставит пакеты, copy и template кладут файлы, user управляет пользователями, service или systemd запускают сервисы. Модулей сотни, и большую часть задач можно решить без самописных shell-скриптов.

Playbook

Playbook — YAML-файл со сценарием: на каких хостах и какие задачи выполнить.

- name: Настроить web-серверы
  hosts: web
  become: true
  tasks:
    - name: Установить nginx
      ansible.builtin.apt:
        name: nginx
        state: present
        update_cache: true

    - name: Положить конфиг сайта
      ansible.builtin.template:
        src: site.conf.j2
        dest: /etc/nginx/sites-enabled/site.conf
      notify: Перезапустить nginx

  handlers:
    - name: Перезапустить nginx
      ansible.builtin.service:
        name: nginx
        state: reloaded

Запуск: ansible-playbook -i inventory.ini site.yml. Флаг --check покажет, что изменится, ничего не меняя.

Роли

Роль — способ упаковать задачи, шаблоны и переменные для одной цели (например, «nginx» или «postgres»), чтобы переиспользовать их в разных проектах.

Идемпотентность — главное свойство

Идемпотентность означает: повторный запуск даёт тот же результат и ничего не ломает. Задача state: present установит nginx, если его нет, и ничего не сделает, если он уже стоит. Ansible в отчёте помечает задачи как ok (уже в нужном состоянии) или changed (что-то изменено).

Поэтому playbook можно запускать регулярно — как проверку, что серверы не «уплыли» от эталона.

Важно: идемпотентность гарантируют модули, а не Ansible сам по себе. Задачи через shell или command выполняются каждый раз, и для них нужно самому прописывать условия (creates, when, changed_when).

Какую рутину убирает Ansible

  • первичная настройка нового сервера: пользователи, SSH-ключи, firewall, обновления;
  • установка и обновление ПО на десятках машин одновременно;
  • раскатка конфигов nginx, PostgreSQL, systemd-сервисов из шаблонов;
  • деплой приложения: забрать код, собрать, перезапустить сервис;
  • массовые операции: смена ключа, ротация сертификата, патч безопасности;
  • одинаковое окружение для staging и production.

Частые ошибки

  • Всё через shell. Теряется идемпотентность и читаемость. Сначала ищите подходящий модуль.
  • Пароли в открытом виде в переменных. Используйте Ansible Vault или внешний менеджер секретов.
  • Запуск сразу на production. Сначала --check --diff и staging.
  • Ручные правки на серверах после Ansible. Следующий запуск их перезапишет; любые изменения вносите в playbook.
  • Огромный плоский playbook. Разбивайте на роли.

Ansible и Terraform: в чём разница

TerraformAnsible
Основная задачаСоздать инфраструктуру: серверы, сети, DNSНастроить то, что внутри серверов
ПодходДекларативный, с state-файломЗадачи по порядку, без отдельного state
Как работаетЧерез API облакаПо SSH

Их часто используют вместе: Terraform поднимает серверы, Ansible их настраивает.

Документация: docs.ansible.com.

Частые вопросы

Да, но подключение идёт не по SSH, а обычно через WinRM или OpenSSH для Windows, и используются отдельные модули с префиксом win_. Для смешанной инфраструктуры это рабочий вариант.

Поможем с этим

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

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.