Что это
Декларативная система управления конфигурациями: вы описываете в коде желаемую конфигурацию серверов, а агент на каждом узле приводит машину к ней и удерживает в ней.
Puppet — система управления конфигурациями серверов: вы описываете в коде, как должна выглядеть машина — пакеты, сервисы, файлы, пользователи, — а агент на каждом узле сам приводит её к описанию и удерживает в нём. Классика Infrastructure as Code для крупных серверных парков.
Puppet — система управления конфигурациями серверов, один из родоначальников подхода Infrastructure as Code. Идея декларативная: вы не пишете последовательность команд, а описываете, как сервер должен выглядеть — какие пакеты установлены, какие сервисы запущены, что лежит в конфигах, какие пользователи существуют. Агент на каждом узле по расписанию сверяет реальную систему с этим описанием и исправляет только отличия. Повторный прогон ничего не ломает — это идемпотентность, главное свойство инструмента.
Архитектура агент-серверная: центральный Puppet Server хранит код и компилирует для каждого узла персональный каталог ресурсов, агенты забирают его по защищённому каналу — pull-модель, в отличие от push-подхода агентлесс Ansible. Сегодня ниша Puppet — живое легаси в крупных парках серверов: банки, телеком, хостинг, где он годами держит сотни и тысячи машин в едином эталоне. Чаще всего его спрашивают с DevOps-инженеров и системных администраторов.
Для этого навыка доступны ограниченные данные (менее 50 вакансий или нет зарплатных данных). Аналитика носит ориентировочный характер.
Декларативная система управления конфигурациями: вы описываете в коде желаемую конфигурацию серверов, а агент на каждом узле приводит машину к ней и удерживает в ней.
DevOps-инженеры и системные администраторы, реже SRE и инженеры платформ — в компаниях с большими парками виртуалок и железных серверов.
Зрелый инструмент с нишей живого легаси: новых внедрений меньше, чем у Ansible, но крупные парки на Puppet работают годами и требуют сопровождения — специалистов при этом немного.
Puppet — инструмент, который превращает настройку серверов из ручной работы в код. Вместо того чтобы заходить на каждую машину по SSH и выполнять команды, вы описываете в манифестах желаемую конфигурацию: пакет nginx установлен, сервис запущен, конфиг совпадает с эталоном, пользователь deploy существует. Дальше Puppet сам решает, что нужно сделать на конкретной машине: где-то доустановить пакет, где-то поправить файл, а где всё уже совпадает — не трогать ничего. Это и есть декларативная модель: вы отвечаете за «что», инструмент — за «как».
На каждом управляемом узле стоит агент, в центре — Puppet Server. Связь защищена сертификатами: новый узел запрашивает подпись, администратор её подтверждает. Дальше цикл повторяется по расписанию, по умолчанию раз в полчаса: агент отправляет серверу факты о себе (ОС, сеть, память — их собирает Facter), сервер компилирует из манифестов и данных Hiera персональный каталог ресурсов для этого узла, агент сверяет с ним систему, исправляет отличия и отправляет отчёт. Это pull-модель: узлы сами приходят за конфигурацией, и ручные правки на сервере живут максимум до следующего прогона.
Код Puppet пишется на собственном декларативном языке. Базовая единица — ресурс: package, service, file, user и десятки других типов. Ресурсы группируются в классы, классы — в модули: переиспользуемые блоки вида «настроить NTP» или «развернуть nginx». Готовые модули берут с Puppet Forge — публичного каталога, где есть решения для большинства типовых задач. Данные при этом отделены от логики: Hiera хранит параметры в иерархии — общие значения, значения для окружения, значения для конкретного узла — и модуль получает нужные без единого if в коде.
Цикл от кода в git до настроенного парка — и так каждые полчаса.
Вы описываете конфигурацию
Манифесты, модули и данные Hiera лежат в git: какие пакеты, сервисы, файлы и пользователи должны быть на каждом типе машин. Код — единственный источник правды.
Сервер компилирует каталог
Агент присылает факты об узле, и Puppet Server собирает из кода и данных персональный каталог ресурсов именно для этой машины — с учётом её ОС, окружения и роли.
Агент сверяет и исправляет
Агент сравнивает систему с каталогом и меняет только то, что отклонилось: доустанавливает пакет, чинит конфиг, перезапускает сервис. Затем отправляет отчёт — виден дрейф по всему...
Puppet переносится между ролями: DevOps-инженер, Системный администратор, Инженер по автоматизации тестирования. В одном треке этот навык может быть основным рабочим инструментом, а в другом - сильным прикладным усилителем основной специализации.
DevOps-инженер — самый заметный профиль в распределении ролей по навыку.
Текущий срез показывает активные вакансии сейчас. Распределение по ролям рассчитано по расширенной исторической выборке, поэтому значения могут быть выше текущего количества активных вакансий.
Puppet ценен не абстрактным знанием инструмента, а повторяющимися рабочими задачами — ниже они разобраны так, как встречаются в реальной работе.
Классическая тройка: пакет, конфиг, сервис
Базовый паттерн Puppet: пакет установлен, конфиг эталонный, сервис запущен — с явными зависимостями между ними.
package { 'nginx':
ensure => installed,
}
file { '/etc/nginx/nginx.conf':
ensure => file,
source => 'puppet:///modules/nginx/nginx.conf',
require => Package['nginx'], # сначала пакет, потом конфиг
notify => Service['nginx'], # изменился конфиг — перезапустить сервис
}
service { 'nginx':
ensure => running,
enable => true, # автозапуск при загрузке
} Пользователи и SSH-ключи
Одинаковые учётки и ключи на всём парке — вместо ручного разноса по машинам.
user { 'deploy':
ensure => present,
managehome => true,
shell => '/bin/bash',
groups => ['docker'],
}
ssh_authorized_key { 'deploy@ci':
ensure => present,
user => 'deploy',
type => 'ssh-ed25519',
key => 'AAAAC3NzaC1lZDI1NTE5AAAA...',
}
# удалить ключ на всём парке = ensure => absent
# и один прогон агентов Класс с параметрами
Переиспользуемый блок конфигурации: логика одна, параметры приходят снаружи — из Hiera.
class ntp (
Array[String] $servers = ['0.ru.pool.ntp.org'],
) {
package { 'chrony':
ensure => installed,
}
file { '/etc/chrony.conf':
content => epp('ntp/chrony.conf.epp', { 'servers' => $servers }),
require => Package['chrony'],
notify => Service['chronyd'],
}
service { 'chronyd':
ensure => running,
enable => true,
}
} Hiera: данные отдельно от кода
Иерархия данных: общие значения внизу, особенности окружения и узла — выше. Модуль не меняется, меняются данные.
# hiera.yaml — порядок поиска значений
hierarchy:
- name: 'Узел'
path: 'nodes/%{trusted.certname}.yaml'
- name: 'Окружение'
path: 'env/%{environment}.yaml'
- name: 'Общие данные'
path: 'common.yaml'
# common.yaml — значения по умолчанию для всех
ntp::servers:
- '0.ru.pool.ntp.org'
- '1.ru.pool.ntp.org'
# nodes/db01.example.com.yaml — переопределение для узла
ntp::servers:
- 'ntp.internal.example.com' Факты и ветвление по ОС
Facter собирает сведения об узле автоматически; манифест подстраивается под ОС без дублирования кода.
case $facts['os']['family'] {
'RedHat': { $web_pkg = 'httpd' }
'Debian': { $web_pkg = 'apache2' }
default: {
fail("Неподдерживаемая ОС: ${facts['os']['family']}")
}
}
package { $web_pkg:
ensure => installed,
}
# посмотреть факты узла:
# facter os.family
# facter memory.system.total Прогон: сначала noop, потом применение
Режим noop показывает, что изменилось бы, не трогая систему, — обязательный шаг перед раскаткой на парк.
# локально, без сервера
puppet apply --noop site.pp # показать план изменений
puppet apply site.pp # применить
# на узле с агентом
puppet agent --test --noop # разовый прогон без изменений
puppet agent --test # применить немедленно
# проверки кода до раскатки
puppet parser validate manifests/site.pp
puppet-lint manifests/ Завернуть shell-команду в exec — самый быстрый способ убить идемпотентность: команда будет выполняться при каждом прогоне. Почти всегда есть готовый тип ресурса или модуль на Forge; exec — крайняя мера, и только с условиями creates, onlyif или unless.
Изменение, применённое сразу на сотни машин, размножает ошибку со скоростью прогона агентов. Правильный цикл: noop-прогон, просмотр плана изменений, канареечная группа узлов — и только потом весь парк.
IP-адреса, имена окружений и пароли, зашитые в манифесты, превращают модуль в одноразовый и заставляют править логику ради смены параметра. Данные — в Hiera, секреты — в eyaml или внешнем хранилище, код — универсальный.
Puppet не выполняет ресурсы сверху вниз — порядок определяется графом зависимостей. Конфиг «после» пакета без require может примениться до него, и всё сломается неожиданно и не везде. Зависимости require, notify, before — всегда явно.
Качество модулей на Forge неровное: рядом с образцовыми supported-модулями лежат заброшенные поделки. Перед внедрением смотреть поддержку, даты обновлений, совместимость версий — чужой заброшенный код станет вашим легаси.
Ядро спроса на Puppet — DevOps-инженеры; следом идут системные администраторы, SRE и инженеры платформ. Профиль работодателя характерный: крупные компании с парками в сотни и тысячи серверов — банки, телеком, хостинг, ретейл, — где Puppet внедрили давно и он продолжает управлять боевой инфраструктурой. В требованиях он почти всегда соседствует с Linux, Ansible, Terraform и CI/CD: рынок ищет не «специалиста по Puppet», а инженера, который понимает управление конфигурациями в принципе и способен сопровождать существующий Puppet-контур. Отдельная ниша — миграции: компании, переезжающие с Puppet на другие инструменты, ценят людей, знающих обе стороны.
Puppet востребован там, где инструмент реально ускоряет повторяемые задачи команды, а не существует отдельной теорией.
Спрос держится дольше, когда навык нужен не эпизодически, а как часть ежедневного цикла разработки, проверки или доставки.
Puppet чаще ищут там, где процесс уже стандартизирован и без этого инструмента команда теряет скорость и предсказуемость.
Puppet формирует устойчивый спрос внутри своего рабочего сегмента.
Puppet сохраняет устойчивый прикладной спрос на рынке: 20 активных вакансий, #285 по рынку, 0.4% IT-вакансий. Ниже показано число открытых вакансий на конец каждого месяца: это исторический ряд по состоянию на конец месяца, а не текущий срез рынка на сегодня.
#285 по рынку • 0.4% IT-вакансий
-8 вакансий и -22% к предыдущему месяцу.
Puppet редко живёт изолированно: чаще всего рынок видит его рядом с Ansible, Linux, Docker. Самая плотная связка сейчас - Ansible: оба навыка встречаются вместе в 85% вакансий.
Главная связка: Ansible • 85% вакансий. Показываем общерыночные связки Puppet: не junior-минимум из блока выше, а навыки, которые чаще всего встречаются рядом с ним в одной вакансии.
навыки, которые рынок чаще всего видит рядом в одной вакансии
Сейчас на рынке 2 активных junior-вакансий с Puppet. Это 12.5% всех вакансий по навыку, поэтому для старта важнее всего смотреть на реальный объём junior-окна и на стек, который рынок ждёт рядом.
12.5% всех вакансий по навыку • Senior / Junior 4.5x
Вход возможен, но рынок ждёт уже собранный стартовый стек.
Медианная вакансия с Puppet ожидает около 20 навыков в стеке. Это широкий стартовый набор: рынок обычно ищет не один изолированный инструмент, а рабочую комбинацию соседних навыков.
навыки из junior-вакансий, где встречается Puppet
Умение работать с Puppet — это демонстрация навыков централизованного управления конфигурациями, декларативного подхода и Infrastructure as Code. Вот как описать Puppet в резюме для разных ролей:
Компоненты, из которых складывается рабочий Puppet-контур.
Центр: компиляция каталогов, сертификаты узлов
Парк от десятков узлов, где нужен единый контроль
Отдельная инфраструктура на обслуживании; для пары машин достаточно puppet apply.
Иерархическое хранилище данных конфигурации
Параметры различаются между окружениями и узлами
Хранит только данные — логика остаётся в модулях, и плохую структуру кода Hiera не спасёт.
Публичный каталог готовых модулей
Типовые задачи: nginx, PostgreSQL, SSH, firewall
Качество модулей неровное — проверять поддержку, свежесть и совместимость версий.
База фактов, каталогов и отчётов прогонов
Нужны запросы по парку, экспорт ресурсов и аудит
Ещё один сервис с PostgreSQL на обслуживании — оправдан на заметном парке.
Раскатка окружений Puppet из git-веток
Командная работа и несколько окружений кода
Требует дисциплины веток и аккуратного Puppetfile — иначе окружения расползаются.
Территория Puppet — большие парки виртуалок и железных серверов, где конфигурацию сотен машин нужно годами держать в едином, проверяемом эталоне.
Сотни и тысячи виртуалок и железных серверов под единым эталоном: базовая ОС, пакеты, сервисы, доступы — одинаково и проверяемо на всём парке.
Банки, телеком, госсектор: отчёты агентов показывают, какие узлы соответствуют эталону, а какие отклонились — готовая доказательная база для аудита и регуляторных...
Типовая задача Puppet: пользователи и SSH-ключи, NTP, репозитории, агенты мониторинга и логирования — всё, что должно быть на каждой машине независимо от её роли.
Ручные правки «на минуточку» — бич больших парков. Агент возвращает систему к описанию при каждом прогоне, и реальность перестаёт расходиться с кодом.
Puppet заметен в 2 направлениях рынка с долей выше 5%.
Возможности, ради которых крупные парки держат агентную модель.
Одна кодовая база описывает сотни машин; новая машина получает полную конфигурацию первым же прогоном агента.
Ручные правки на серверах живут до следующего прогона: агент возвращает систему к описанию без участия человека.
Hiera хранит параметры по иерархии — от общих до узловых; модули остаются универсальными, окружения различаются только данными.
PuppetDB собирает факты и отчёты прогонов: в любой момент видно, какие узлы соответствуют эталону, — аргумент для регуляторов и внутреннего контроля.
Три инструмента управления конфигурациями — критерии выбора между ними.
Выбирайте по режиму работы. Если задача — непрерывно удерживать большой парк в эталонной конфигурации и автоматически гасить дрейф, агентная pull-модель Puppet сильнее: узлы сами приходят за...
Оба — агентные ветераны с центральным сервером, поэтому критерий выбора не архитектура, а язык и команда. Chef описывает конфигурацию императивными рецептами на Ruby и ближе инженерам с бэкграундом...
Здесь выбор «или-или» — ошибка: инструменты работают на разных слоях. Terraform создаёт инфраструктуру у провайдера — виртуалки, сети, балансировщики, кластеры; Puppet настраивает то, что внутри...
Puppet использует архитектуру «клиент-сервер». Ключевые компоненты развёртывания:
Центральный сервер, который компилирует каталоги и обслуживает запросы агентов. Устанавливается на отдельной Linux-машине.
Демон на каждой управляемой ноде (Linux, Windows). Выполняет полученный каталог и отправляет отчёт назад.
Хранит историю фактов, отчёты и данные о ресурсах. Необязателен, но без него теряются отчёты и поиск по фактам.
Иерархическая база данных для разделения кода и данных. Поддерживает бэкенды eYAML, HashiCorp Vault.
Изолированные среды (production, staging) с собственными модулями и данными Hiera. Синхронизируются с Git-ветками через r10k.
Puppet Server + PuppetDB (PostgreSQL) + r10k (Git-синхронизация) + Puppet Agent на каждой ноде. Для мониторинга стека — Prometheus + Grafana.
Придерживайтесь модели «роли и профили»: роль описывает бизнес-юнит, профиль — технический компонент. Роли обычно пусты и только включают профили.
Вся изменяемая информация — в Hiera, манифесты без хардкода. Это упрощает адаптацию под разные окружения.
Используйте rspec-puppet для unit-тестов и Beaker для приёмочного тестирования. Это гарантирует корректность манифестов.
Периодически запускайте `puppet agent -t --noop` и используйте puppet-linter для выявления отклонений от эталона.
Не держите секреты в модулях. Используйте Hiera с EYAML или внешние vault-бэкенды (HashiCorp Vault, AWS Secrets Manager).
Организуйте CI-пайплайн, который прогоняет каталоги на всех окружениях (тестовое, предрелизное, боевое) перед deploy.
Используйте Semantic Versioning для модулей. Храните модули в Git-репозиториях, синхронизируйте окружения с ветками Git через r10k или Code Manager.
Избегайте циклических зависимостей между классами. Используйте `require` и `before` для явного описания порядка ресурсов.
Включите шифрование трафика между агентами и мастером с подписанными сертификатами. Autosign только для доверенных подсетей.
Регулярно обновляйте Puppet Server и агентов — уязвимости в старых версиях позволяют повышение привилегий.
Храните конфиденциальные данные в Hiera с бэкендом eYAML или HashiCorp Vault. Никогда не помещайте пароли и ключи в манифесты.
Запускайте мастер с ограниченными привилегиями (non-root), а агентов с минимальными правами, используя принцип наименьших привилегий.
Настройте RBAC в Puppet Enterprise: разделяйте роли администратора и код-ревьюера для предотвращения несанкционированных изменений.
Ведите аудит изменений через PuppetDB и логи. Настройте алерты на подозрительные каталоги и неожиданные изменения конфигурации.
Используйте изолированные окружения (production, staging, development) с разными наборами модулей и данных Hiera. Никогда не тестируйте на production.
Используйте `puppet agent -t --noop` как безопасный способ предпросмотра изменений перед боевым запуском. Для проверки синтаксиса заранее используйте `puppet parser validate` и `puppet-lint`.
Перспективы Puppet завязаны не только на текущем спросе, но и на том, как навык встраивается в новые платформы, инструменты и рабочие контуры.
Крупные парки не мигрируют быстро: переезд с Puppet — многолетний проект с сомнительной окупаемостью, пока всё работает. Установленная база продолжит требовать инженеров...
После ужесточения политики владельца платформы сообщество Vox Pupuli развивает открытый форк OpenVox, совместимый с экосистемой. Для компаний это страховка от вендора, для...
Контейнеры и неизменяемая инфраструктура забирают часть задач управления конфигурацией. Однако виртуалки и железо никуда не делись — базы данных, сетевые сервисы,...
Собственный модуль «эталонная машина»: пользователи и SSH-ключи, NTP, репозитории, агент мониторинга. С параметрами через Hiera, проверками puppet-lint и rspec-puppet и демонстрацией noop-прогона. Показывает главное —...
Puppet Server и два-три агента на локальных виртуалках: подпись сертификатов, Hiera-иерархия с переопределением на узле, готовый модуль с Forge плюс свой, паттерн ролей и профилей. Демонстрирует всю агент-серверную...
Старт проще, чем кажется: puppet apply работает локально без всякого сервера, и первые манифесты пишутся за вечер. Дальше порог растёт — свой язык, зависимости ресурсов, Hiera и агент-серверная архитектура требуют недель практики.
Linux-база и идея IaC
Puppet управляет Linux-серверами, поэтому нужно понимать, чем управляешь: пакеты, сервисы systemd, права, пользователи. Плюс сама идея «инфраструктура как...
Первые манифесты локально
puppet apply на виртуалке: ресурсы package, service, file, user. Написать манифест, применить, поменять, применить снова — почувствовать декларативную...
Идемпотентность и зависимости
Связи require, notify, subscribe: конфиг зависит от пакета, сервис перезапускается при смене конфига. Понять, почему порядок записи ресурсов ничего не...
Классы, модули, Forge
Оформить код в модуль с правильной структурой, взять пару готовых модулей с Forge и разобрать, как они устроены внутри — это лучший учебник идиоматичного...
Прямых курсов по Puppet пока нет — показываем смежные: Ansible, Linux, Docker
Соответствие — доля тем навыка, которые охватывает программа курса
Профессии, где нужен Puppet:
Три шага от локального манифеста до собственного мини-парка.
Поставить Puppet на виртуалку и применить манифест через puppet apply: ресурсы package, file, service с зависимостями. Сервер для старта не нужен — модель осваивается локально.
Официальная документация и практические курсы Puppet: идемпотентность, факты, классы, Hiera. Ключ — понять граф зависимостей ресурсов и noop-режим, а не заучить синтаксис.
Puppet Server плюс два агента на виртуалках: сертификаты, компиляция каталога, готовый модуль с Forge, свои данные в Hiera. Это уже рабочая модель того, что происходит в бою.
Для инструментов вроде Puppet на одной странице полезно держать и объяснение роли на рынке, и быстрые переходы к официальным ресурсам.
Система, которая настраивает серверы по написанному вами описанию. Вы говорите, как машина должна выглядеть — какие пакеты, сервисы, файлы, пользователи, — а агент на каждом сервере по расписанию сверяет реальность с описанием и исправляет отличия. Один код — сотни одинаково настроенных машин.
Для входа в профессию — Ansible: он проще, без агентов и встречается в требованиях чаще. Puppet имеет смысл как второй инструмент: он открывает вакансии в крупных компаниях с большими парками, где конкуренция кандидатов ниже. Идеи у них общие — идемпотентность, инфраструктура как код, — поэтому второй инструмент даётся заметно легче первого.
Да, но специфично: новых внедрений немного, зато установленная база огромна. Банки, телеком и хостинг годами управляют парками через Puppet, и этим системам нужны инженеры — сопровождать, обновлять, иногда мигрировать. Это рынок живого легаси: не растущий бурно, но стабильный и с дефицитом специалистов.
У Puppet на каждом узле работает агент, который сам регулярно забирает конфигурацию с сервера — pull-модель, дающая постоянный контроль и защиту от дрейфа. Ansible агентов не требует: подключается по SSH, когда запустили плейбук, — push-модель, удобная для сценариев и разовых операций. Первое сильнее для непрерывного поддержания эталона, второе — для гибкости и быстрого старта.
Внутри контейнеров — нет: там конфигурация фиксируется в образе при сборке. Но кластеры работают на реальных машинах, и этот слой кто-то должен настраивать: ОС, ядро, агенты мониторинга, доступы. В крупных компаниях Puppet часто управляет именно узлами, на которых живёт контейнерная платформа.
Порог выше, чем у Ansible: свой декларативный язык, граф зависимостей ресурсов, Hiera, агент-серверная архитектура. Зато начать можно без сервера — puppet apply применяет манифесты локально, и первые ресурсы осваиваются за вечер. Основы — недели, уверенное сопровождение боевого парка — месяцы практики.
Свойство, при котором повторное применение конфигурации не меняет ничего, если система уже соответствует описанию. Агент прогоняет одну и ту же конфигурацию каждые полчаса, и это безопасно: исправляется только то, что отклонилось. Именно идемпотентность отличает управление конфигурациями от обычных скриптов.