← Назад к вопросам

Как работает Ansible?

2.0 Middle🔥 171 комментариев
#Контейнеризация и DevOps

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Как работает Ansible: архитектура и принципы работы

Ansible — это инструмент для управления конфигурацией, автоматизации развертывания и оркестрации задач в ИТ-инфраструктуре, построенный на принципах идиоматичности и минимализма. В отличие от многих аналогов (например, Puppet, Chef), он использует агентную (agentless) архитектуру, что является его ключевой особенностью и преимуществом.

Агентная архитектура (Agentless)

Основной принцип работы Ansible — управление удаленными узлами без необходимости установки какого-либо специального ПО (агента) на них. Связь осуществляется по стандартным протоколам:

  • SSH — для Linux/Unix-систем.
  • WinRM — для Windows-серверов.

Управляющая машина (control node), где установлен Ansible, использует эти протоколы для подключения к управляемым узлам (managed nodes), передачи необходимых модулей (как правило, написанных на Python) и выполнения задач. После выполнения задачи временные файлы (включая переданные модули) удаляются. Это делает развертывание и эксплуатацию простыми и безопасными.

Ключевые компоненты

Работу Ansible обеспечивают несколько основных компонентов:

  1. Инвентарь (Inventory) — файл (чаще всего в форматах INI или YAML), содержащий список управляемых хостов, сгруппированных по категориям (например, [webservers], [dbservers]). В нем указываются IP-адреса, доменные имена, переменные для групп и отдельных хостов.

    # inventory.yml
    webservers:
      hosts:
        web1.example.com:
          ansible_user: deploy
        web2.example.com:
      vars:
        http_port: 80
    
    dbservers:
      hosts:
        db01.example.com:
          ansible_user: admin
    
  2. Плейбуки (Playbooks) — сердце автоматизации Ansible. Это YAML-файлы, описывающие желаемое состояние системы. Они состоят из "пьес" (plays), которые применяются к группам хостов из инвентаря, и "задач" (tasks), которые являются вызовами модулей Ansible.

    # playbook.yml
    - name: Установка и запуск nginx
      hosts: webservers
      become: yes
      tasks:
        - name: Установить пакет nginx
          apt:
            name: nginx
            state: present
        - name: Запустить службу nginx
          service:
            name: nginx
            state: started
            enabled: yes
    
  3. Модули (Modules) — это "инструменты в наборе" Ansible. Каждый модуль выполняет одну конкретную задачу: управление пакетами (yum, apt), службами (service), файлами (file, copy, template), пользователями (user) и т.д. Модули идут вместе с Ansible (более 3000 встроенных) и являются идемпотентными: повторный вызов модуля с теми же параметрами не изменит систему, если желаемое состояние уже достигнуто.

  4. Факты (Facts) — это системная информация (IP-адрес, ОС, объем памяти, диски), автоматически собираемая с управляемых узлов с помощью модуля setup перед выполнением плейбука. Эти данные хранятся в переменных и могут использоваться для условного выполнения задач.

    - name: Вывести версию ОС
      debug:
        msg: "Это {{ ansible_os_family }} версии {{ ansible_distribution_version }}"
    

Процесс выполнения

Типичный процесс работы выглядит так:

  • Администратор запускает команду ansible-playbook, указывая плейбук и инвентарь.
  • Ansible подключается к целевым хостам из инвентаря по SSH/WinRM.
  • На каждом узле (если это не отключено) собираются факты.
  • Интерпретатор Ansible последовательно выполняет задачи из плейбука для каждой группы хостов.
  • Для каждой задачи:
    *   Соответствующий модуль и его аргументы преобразуются в скрипт (обычно на Python).
    *   Этот скрипт копируется на управляемый узел и выполняется.
    *   Результат выполнения (успех, изменение состояния или ошибка) возвращается на управляющую машину.
  • В конце выводится сводка выполнения (play recap), показывающая, на каких хостах задачи были успешны, где произошли изменения, а где случились ошибки.

Преимущества подхода Ansible

  • Простота развертывания: не требует установки агентов, только Python (на большинстве Linux-систем он уже есть) и открытые SSH-порты.
  • Идемпотентность: гарантирует предсказуемость и безопасность при многократном выполнении.
  • Человекочитаемый язык: YAML-плейбуки легко читать, понимать и поддерживать.
  • Push-модель: выполнение инициируется централизованно, что дает полный контроль над временем и порядком операций.
  • Расширяемость: можно создавать собственные модули, роли (roles) для повторного использования кода и плагины.

Таким образом, Ansible работает как декларативный инструмент автоматизации, который, используя простые текстовые файлы (инвентарь, плейбуки) и безопасные протоколы удаленного доступа, приводит разнородные системы в заранее описанное, согласованное состояние.

Как работает Ansible? | PrepBro