Чем отличаются Ansible, Puppet и Chef?

Краткая суть

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

Архитектура и способ доставки конфигураций

  • Ansibleagentless, использует SSH (или WinRM для Windows), работает по модели push: управляющая машина (control node) запускает плейбуки и доставляет изменения на целевые хосты.

  • Puppetagent-based (есть puppet agent), типично работает по модели pull: агенты периодически опрашивают мастер-сервер (Puppet Server) за каталогом конфигураций. Есть и agentless-режимы/bolt.

  • Chef — преимущественно agent-based (Chef Client) с сервером (Chef Server) или в chef-solo/chef-zero режимах; поддерживает pull-подобный цикл (клиент опрашивает сервер).

Язык и парадигма

  • Ansible — YAML + декларативные/императивные модули; playbook выглядит декларативно, но позволяет пошаговые таски. Шаблоны — Jinja2.

  • Puppet — собственный декларативный DSL (Puppet language), ориентирован на «desired state» (ресурсы и их свойства). Шаблоны — ERB/или EPP.

  • Chef — Ruby-based DSL (recipes/cookbooks) — более программируемый/императивный, хотя можно выражать desired state через ресурсы. Шаблоны — ERB.

Идемпотентность и модель состояния

  • Все три стараются быть идемпотентными, но подходы разные: Puppet — изначально декларативный, Chef — ресурсно-ориентированный с сильной программируемостью, Ansible — набор модулей, многие из которых идемпотентны, но плейбук может быть более процедурным.

  • State: Puppet и Chef традиционно держат централизованный каталог/сервер и «источник правды». Ansible чаще хранит конфигурацию в git и выполняет плейбуки при запуске (git -> control node -> хосты).

Управление данными/переменными

  • Ansible — vars, inventory (группы/переменные), vault для секретов. Простая структура, удобно для ad-hoc и orchestration.

  • Puppet — Hiera для иерархии данных и separation of data/code; мощная система lookup.

  • Chef — data bags, attributes, environments/roles; более программируемая модель, но сложнее на входе.

Масштабирование и эксплуатация

  • Ansible легко стартовать и удобно в небольших/средних средах; для очень большого количества хостов нужен продуманный inventory и параллелизм.

  • Puppet и Chef лучше для больших сред с долгоживущими агентами, централизованным контролем, отчётностью и сложной моделью ролей/классов. Они предполагают более «enterprise» workflow (master, certificate management, environments).

Экосистема и модули

  • Ansible — множество ролей (Ansible Galaxy), много готовых модулей для cloud/DB/network.

  • Puppet — модули на Puppet Forge, сильный фокус на конфигурации ОС/пакетов.

  • Chef — cookbooks на Supermarket, интеграции с CI/CD и тестированием.

Тестирование и CI

  • Ansible: Molecule для тестирования ролей, тесты часто интегрируются в CI.

  • Puppet: rspec-puppet, puppet-lint, сильный набор инструментов для unit/integration тестирования.

  • Chef: ChefSpec, Test Kitchen, InSpec — мощные тестовые пайплайны.

Примеры синтаксиса (минимум)

Ansible (playbook):

\- hosts: web
tasks:
\- name: Install nginx
apt: name=nginx state=present
Puppet (manifest):
package { 'nginx':
ensure => installed,
}
service { 'nginx':
ensure => running,
require => Package\['nginx'\],
}
Chef (recipe):
package 'nginx'
service 'nginx' do
action \[:enable, :start\]
end

Выбор по задачам / сильные стороны

  • Ansible — быстрое развертывание, ad-hoc задачи, orchestration, CI/CD integration, простота входа.

  • Puppet — мощный декларативный менеджер для больших инфраструктур, хорош для длительного соответствия конфигурации.

  • Chef — гибкость и программируемость, подходит когда нужна сложная логика конфигурации.

Ограничения и подводные камни

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

  • Puppet/Chef — круче вход в силу архитектуры (master/agents, CA, сложнее настройка), но дают сильную централизацию и отчётность.

Заканчиваю без заключений и дополнительных вопросов, как ты просил.