Ansible vs Chef/Puppet/Salt
Тема дорожной карты · Ansible
При сравнении Ansible с Chef, Puppet и Salt наиболее значимое отличие — это безагентная push-модель Ansible: он подключается по SSH, не требуя никакого программного обеспечения на управляемых узлах, тогда как Chef и Puppet полагаются на постоянные агенты, опрашивающие центральный сервер (pull-модель), а SaltStack может работать в обоих режимах, но обычно использует агент (minion) на основе ZeroMQ. Ansible использует YAML-playbook, понятные операторам без изучения специального DSL, тогда как Chef использует рецепты на Ruby, а Puppet — собственный декларативный язык, оба из которых требуют более глубокого освоения. С точки зрения масштабируемости, шинная архитектура Salt обрабатывает очень большие парки с меньшей задержкой по сравнению с SSH-per-host моделью Ansible, хотя Ansible снижает этот разрыв с помощью SSH pipelining, плагинов стратегии mitogen и высоких значений forks. Выбор между этими инструментами в конечном счёте зависит от экспертизы команды, интеграции с существующим инструментарием и допустимости постоянно работающего агент-демона в среде.
Как это работает
Ansible vs Chef/Puppet/Salt — agentless инструмент управления конфигурацией: control-node ходит по SSH (или WinRM/local) на целевые хосты и гоняет модули, сводящие состояние. Конфиг — YAML-плейбуки; задачи зовут модули (apt, copy, service, template, user, file); модули идемпотентны — два запуска дают тот же результат. Inventory описывает таргеты; переменные параметризуют поведение. Ansible — push-based (вы триггерите с control-node); сравните с Puppet/Chef (pull-based).
Когда применять
Ansible — когда нужно настраивать существующие серверы (применять OS-настройки, деплоить приложения, управлять юзерами), не когда нужно провижионить новую cloud-инфраструктуру (Terraform лучше). Для эфемерных cattle-серверов — immutable-образы (Packer) + Terraform; Ansible хорош на долгоживущих pet. Для маленьких флотов — проще Salt/Puppet/Chef; для тысяч хостов SSH-модель может стать тесной.
Типичные ошибки
Ловушки Ansible vs Chef/Puppet/Salt: пишут Ansible как shell-скрипты (command: / shell: повсюду — убивает идемпотентность, используйте реальные модули); запуск плейбуков с ноута в production (нет аудита — запускайте из CI-раннера или AWX); не запиннены версии collection/role; запуск против prod без --check --diff сначала (dry-run ваш друг).