Puppet — система управления конфигурацией серверов с открытым исходным кодом, использующая собственный декларативный язык Puppet DSL (или Ruby). Описывает желаемое состояние ресурсов сервера (пакеты, файлы, сервисы, пользователи), а не последовательность команд. Первый широко принятый инструмент Infrastructure as Code.
Как работает: архитектура Agent-Master
Puppet работает по pull-модели:
- Puppet Agent установлен на каждом управляемом сервере. Каждые 30 минут (по умолчанию) агент обращается к Puppet Master.
- Facter — компонент агента, собирает факты (facts) о сервере: IP, ОС, объём RAM, версии пакетов.
- Puppet Master (Puppet Server) компилирует каталог (catalog) — список ресурсов в желаемом состоянии, адаптированный для этого конкретного агента с учётом фактов.
- Агент применяет каталог: устанавливает пакеты, изменяет конфиги, перезапускает сервисы по необходимости.
- Агент отправляет отчёт (report) на Master: что изменено, что уже было в нужном состоянии, что не удалось.
Puppet DSL: пример
# Установить nginx и запустить
package { 'nginx':
ensure => installed,
}
service { 'nginx':
ensure => running,
enable => true,
require => Package['nginx'],
}
file { '/etc/nginx/nginx.conf':
ensure => file,
content => template('nginx/nginx.conf.erb'),
notify => Service['nginx'],
require => Package['nginx'],
}
Ресурсы Puppet: package, service, file, user, group, cron, exec — и тысячи кастомных через модули Puppet Forge.
Puppet vs Ansible
| Параметр | Puppet | Ansible |
|---|---|---|
| Модель | Pull (агент сам запрашивает) | Push (контрол-нода толкает) |
| Агент | Требуется на каждом сервере | Не нужен (SSH) |
| Язык | Puppet DSL / Ruby | YAML |
| Порог входа | Высокий | Низкий |
| Масштаб | Тысячи серверов | Сотни-тысячи |
История
Puppet создан Люком Канисом (Luke Kanies) в 2005 году — это первый широко принятый инструмент управления конфигурацией для Linux. Компания Puppet Labs основана в 2005 году. Puppet 4.0 (2015) ввёл Puppet Server на JVM, улучшив производительность компиляции каталогов. В 2021 году Puppet Labs переименована в Perforce Software. Chef (2009) и Ansible (2012) появились как альтернативы, постепенно отбирая рыночную долю у Puppet, особенно в сегменте небольших команд.
На что обращать внимание
Puppet требует установки Ruby на каждый управляемый сервер — это увеличивает накладные расходы. Puppet Forge (forge.puppet.com) содержит тысячи готовых модулей. При деплое изменений нужно подождать до 30 минут до следующего run агента — или запустить вручную (puppet agent -t). Для небольших команд (менее 20 серверов) Puppet избыточен — Ansible Playbook проще в освоении. Puppet оправдан при управлении сотнями и тысячами серверов с централизованным контролем.
Puppet в enterprise
Puppet — агентная система управления конфигурацией: на каждом сервере работает Linux-агент (puppet-agent), который каждые 30 минут запрашивает каталог у Puppet Server и применяет изменения. В отличие от Ansible (agentless, SSH), Puppet требует установки агента. Puppet DSL — Ruby-подобный декларативный язык: описываете желаемое состояние, Puppet определяет порядок применения. Puppet Forge — репозиторий модулей (аналог Ansible Galaxy). На VPS: Puppet Bolt — agentless-версия для разовых задач. Ansible Playbook проще для малых инфраструктур, Puppet — для управления тысячами серверов с детальным compliance-контролем. Chef — ещё одна альтернатива с Ruby Cookbooks.