Сравните Ansible и Puppet: архитектура, модель работы и язык.

Ответ

Ansible и Puppet — это популярные инструменты управления конфигурациями (Configuration Management), но они используют разные подходы.

КритерийAnsiblePuppet
АрхитектураБезагентная (Agentless)Агент-серверная (Agent-based)
Модель работыPush (проталкивание)Pull (вытягивание)
ПротоколSSH/WinRMСобственный, через HTTPS
ЯзыкYAML + Jinja2Собственный DSL на основе Ruby
УправлениеПроцедурное и декларативноеВ основном декларативное

Детальное сравнение:

  1. Архитектура и модель работы (Push vs. Pull)

    • Ansible (Push): Не требует установки агентов на управляемые узлы. Управляющий сервер (control node) подключается к ним по стандартному SSH (для Linux) или WinRM (для Windows) и "проталкивает" инструкции. Это упрощает первоначальную настройку.
    • Puppet (Pull): Требует установки агента Puppet на каждый управляемый узел. Агенты периодически обращаются к центральному серверу (Puppet Master), "вытягивают" свою целевую конфигурацию (каталог) и применяют её. Это обеспечивает постоянное поддержание состояния.
  2. Язык конфигурации

    • Ansible: Использует YAML для описания "плейбуков" (playbooks). YAML легко читается человеком. Для шаблонов и логики используется шаблонизатор Jinja2.
    • Puppet: Использует собственный декларативный язык (Puppet DSL), который похож на Ruby. Он строго описывает желаемое состояние системы, а не шаги для его достижения.
  3. Оркестрация и управление состоянием

    • Ansible отлично подходит как для управления состоянием, так и для оркестрации — выполнения задач в строгом порядке (например, развертывание приложения: остановить сервис, обновить бинарный файл, запустить сервис). Также удобен для выполнения разовых команд (ad-hoc).
    • Puppet сильнее в строгом управлении состоянием. Он постоянно следит за тем, чтобы система соответствовала описанному в манифестах состоянию, и автоматически исправляет любые отклонения.

Пример Ansible (playbook.yml):

- hosts: webservers
  tasks:
    - name: Ensure nginx is at the latest version
      apt:
        name: nginx
        state: latest

Пример Puppet (manifest.pp):

package { 'nginx':
  ensure => 'latest',
}

Когда что выбрать:

  • Ansible: Для быстрого старта, оркестрации, в средах, где установка агентов нежелательна или невозможна.
  • Puppet: Для крупных, стабильных инфраструктур, где требуется строгий контроль состояния и соответствие политикам (compliance) в долгосрочной перспективе.