Ответ
Puppet — это инструмент управления конфигурацией (Configuration Management), который автоматизирует развертывание, настройку и поддержку серверов в согласованном, предопределенном состоянии. Он использует декларативную модель — вы описываете желаемое состояние системы, а Puppet определяет, как его достичь и поддерживать.
Основные концепции:
- Манфест (Manifest): Файл с кодом на DSL Puppet (расширение
.pp), описывающий ресурсы и их состояние. - Ресурс (Resource): Базовая единица конфигурации (пакет, служба, файл, пользователь).
- Идемпотентность: Puppet можно применять многократно, и система будет приведена к желаемому состоянию, но лишних изменений не произойдет.
Пример манифеста (nginx.pp):
# Объявление класса для установки и настройки Nginx
class nginx_config {
# Ресурс ПАКЕТ: убедиться, что пакет 'nginx' установлен
package { 'nginx':
ensure => installed,
}
# Ресурс ФАЙЛ: управление конфигурационным файлом
file { '/etc/nginx/nginx.conf':
ensure => file,
source => 'puppet:///modules/nginx/nginx.conf', # Источник из модуля
owner => 'root',
group => 'root',
mode => '0644',
require => Package['nginx'], # Зависимость: сначала установить пакет
notify => Service['nginx'], # Уведомить службу об изменении
}
# Ресурс СЛУЖБА: убедиться, что служба nginx запущена и включена
service { 'nginx':
ensure => running,
enable => true,
hasstatus => true,
# Перезапустить службу, если уведомил File['/etc/nginx/nginx.conf']
subscribe => File['/etc/nginx/nginx.conf'],
}
}
# Применение класса к узлу (node)
node 'web-server-01.example.com' {
include nginx_config
}
Архитектура Puppet:
- Puppet Master/Server: Центральный сервер, хранящий манифесты и модули.
- Puppet Agent: Демон, работающий на управляемых узлах (нодах). Периодически (по умолчанию каждые 30 минут) запрашивает конфигурацию у мастера, применяет её и отправляет отчет.
Ключевые особенности:
- Декларативный язык (DSL): Описывает что, а не как.
- Модель агент-сервер (Pull): Агенты сами запрашивают обновления.
- Факты (Facts): Puppet собирает информацию об узле (ОС, IP, память) для условной логики в манифестах.
- Модули: Переиспользуемые коллекции манифестов, шаблонов и файлов.
- Hiera: Инструмент для отделения данных (переменных) от кода, что упрощает управление конфигурациями для разных сред.
Типичные сценарии использования:
- Единообразная настройка сотен серверов.
- Установка и обновление ПО.
- Управление пользователями и правами доступа.
- Настройка мониторинга и бэкапов.
Альтернативы: Ansible (без агентов, push-модель), Chef (императивный подход, Ruby DSL), SaltStack.