hostprofi.ru
Подобрать хостинг
Термин·буква P

Puppet

краткое определение

Puppet — система управления конфигурацией серверов с декларативным DSL-языком. Агент Puppet на сервере регулярно обращается к Puppet Master, получает каталог желаемого состояния и применяет его. Первый в индустрии инструмент IaC. Создан в 2005 году.

Puppet — система управления конфигурацией серверов с открытым исходным кодом, использующая собственный декларативный язык Puppet DSL (или Ruby). Описывает желаемое состояние ресурсов сервера (пакеты, файлы, сервисы, пользователи), а не последовательность команд. Первый широко принятый инструмент Infrastructure as Code.

Как работает: архитектура Agent-Master

Puppet работает по pull-модели:

  1. Puppet Agent установлен на каждом управляемом сервере. Каждые 30 минут (по умолчанию) агент обращается к Puppet Master.
  2. Facter — компонент агента, собирает факты (facts) о сервере: IP, ОС, объём RAM, версии пакетов.
  3. Puppet Master (Puppet Server) компилирует каталог (catalog) — список ресурсов в желаемом состоянии, адаптированный для этого конкретного агента с учётом фактов.
  4. Агент применяет каталог: устанавливает пакеты, изменяет конфиги, перезапускает сервисы по необходимости.
  5. Агент отправляет отчёт (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

ПараметрPuppetAnsible
МодельPull (агент сам запрашивает)Push (контрол-нода толкает)
АгентТребуется на каждом сервереНе нужен (SSH)
ЯзыкPuppet DSL / RubyYAML
Порог входаВысокийНизкий
МасштабТысячи серверовСотни-тысячи

История

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.

Другие термины