Puppet: автоматизация DevOps и ускорение развертывания
В DevOps вы хотите автоматизировать как можно больше задач. Ручное конфигурирование сред занимает недели при огромных инфраструктурах. К тому моменту, когда все настроено, вы тушите пожары вместо внедрения новых эффективных решений, таких как Rancher серверы.
Puppet помогает автоматизировать ручные задачи для быстрого провижининга систем и развертывания приложений. Управление динамической инфраструктурой — в ядре Puppet.
Эта статья объясняет, что такое Puppet, какие проблемы он решает и как использовать Puppet для автоматизации ручных задач как DevOps команде.

Что такое Puppet?
Puppet — инструмент IaC (Infrastructure as Code) для управления множественными серверами. Написан на Ruby (преимущественно), Puppet работает на множественных Unix-like системах и поддерживает Windows.
ПО высокой зрелости, с первым релизом в 2005 году. Puppet идет как бесплатное open-source ПО, и проприетарная версия также доступна для сложных инфраструктур.
Для чего используется Puppet?
Puppet автоматизирует управление конфигурацией серверов и развертывание. ПО позволяет «тянуть за строки» и управлять состояниями на множественных системах одновременно, и подход снижает ручную настройку и управление серверами по отдельности.
Puppet определяет желаемое состояние (desired state) для системы, а не то, как туда попасть. Конфигурация применяется к различным платформам и устройствам и поддерживает состояние по всей инфраструктуре. В целом, меньше нужды системным администраторам тушить пожары, позволяя DevOps команде внедрять новые и лучшие серверные решения.

Управление конфигурацией Puppet
Скрипты автоматизации помогают справляться с повторяющимися задачами, такими как установка и конфигурация серверов. Однако при работе с обширной инфраструктурой, скрипты автоматизации не масштабируются.
Управление конфигурацией предоставляет решение для обширных конфигураций инфраструктуры. Практики считаются основой DevOps и позволяют частые и более надежные релизы ПО в установленном DevOps пайплайне.
Управление конфигурацией серверов происходит благодаря подходу infrastructure-as-code. В случае Puppet, код управления сервером на Puppet коде, который похож на Ruby. Язык декларативный и описывает model-based конфигурацию.
Как работает Puppet?
Puppet использует клиент-серверный подход и состоит из следующих систем:
- Puppet Master — сервер с демоном Puppet Master, управляющий критичной системной информацией для всех узлов, используя манифесты.
- Puppet Agents — узлы с установленным Puppet и запущенным демоном Puppet Agent.
Разделы ниже объясняют основные элементы и терминологию Puppet, помогая понять, как работает Puppet.
Топология и архитектура Puppet
Puppet использует клиент/сервер архитектуру, состоящую из Puppet Master и Puppet Agents. Puppet Agents используют pull-режим для опроса мастера и получения узло-специфичной и сайт-специфичной конфигурационной информации.
Топология проходит через следующие шаги:
- Узел, запускающий демон Puppet Agent, собирает всю информацию (факты) о себе, и агент отправляет факты Puppet Master.
- Puppet Master использует данные для создания каталога о том, как узел должен быть сконфигурирован, и отправляет его обратно Puppet Agent.
- Puppet Agent конфигурирует себя на основе каталога и сообщает обратно Puppet Master.

Puppet использует утилиту Facter для обнаружения системной информации. Инструмент идет с установкой Puppet по умолчанию.
Puppet Master
Puppet Master — демон, запускаемый на выделенном сервере. Puppet Master — источник информации и конфигурационный авторитет как серверный узел. Мастер отправляет инструкции всем агентским узлам и контролирует конфигурацию системы.
Puppet Master отвечает за следующие задачи:
- Создание каталога для агентов.
- Передача файлов с файлового сервера к агентам.
- Принятие SSL сертификатов от агентов.
- Хранение конфигурационных манифестов.
Puppet использует управление доступом по идентичности через выделенного пользователя и группу, обеспечивая безопасность и раскрывая только необходимую информацию агентам. Однако не все действия требуют повышенных привилегий.
Puppet Agents
Puppet Agent — демон Puppet, запущенный на системе или узле. Агенты имеют определенные привилегии на узле для применения конфигурационных каталогов, полученных от Puppet Master.
Для получения разрешений на коммуникацию, агент запрашивает SSL сертификат при первом контакте с мастером. Сертификат проверяется каждый раз, когда агент просит мастера об обновлениях конфигурации перед отправкой информации. Мастер также аутентифицируется перед агентами для обеспечения корректной конфигурационной информации.
Puppet agents модифицируют конфигурацию системы и требуют root права для выполнения задач.
Шифрование и безопасность коммуникации Puppet
Puppet использует OpenSSL для коммуникации и безопасности. Основанный на SSL и TLS протоколах, Puppet использует стандартное SSL/TLS шифрование и SSL сертификаты для аутентификации и верификации агент/мастер. Дополнительно, Puppet шифрует трафик между агентами и серверами, используя SSL/TLS с SHA-256 как дефолтным хешем.
Методы шифрования в Puppet обеспечивают:
- Аутентификацию и верификацию master/agent.
- Предотвращение утечек данных между мастером и агентами.
Мастер генерирует свой собственный CA сертификат, приватный ключ, CRL (Certificate Revocation List) и серверный сертификат. Серверный сертификат отправляется агентам для включения SSL и TLS коммуникации.
Преимущества Puppet и почему вы должны его использовать
Puppet — один из старейших и самых популярных инструментов автоматизации управления конфигурацией. Ниже — пять преимуществ, дающих хорошие причины начать использовать Puppet.
1. Open source
Puppet — open source, что делает технологию расширяемой. Кастомные библиотеки и модули обогащают индивидуальные проекты под ваш сценарий.
Open source также приносит выгоду активного комьюнити. Много обсуждений, форумов и экспертов готовы помочь и ответить на вопросы.
2. Абстракция ресурсов (Resource Abstraction)
Задачи конфигурации повторяются, и те же шаги часто требуются на серверах с разными ОС через платформо-специфичные шаги. Запомнить все команды — невозможная задача.
Facter помогает Puppet выяснять специфику и достигать абстракции. Системно-специфичные данные и детали ОС все знакомы Puppet благодаря Facter.
3. Идемпотентность (Idempotency)
Избыточные конфигурации — сложная проблема при работе с множеством серверов, и Puppet стремится применять только те изменения, которые влияют на систему. Если желаемое состояние инфраструктуры достигнуто, Puppet не запускает команды. Эта фича Puppet известна как идемпотентность, помогающая снизить избыточность и повысить эффективность.
4. Кроссплатформенность (Cross-Platform)
Puppet покрывает широкий спектр платформ, увеличивая количество серверов в процессе автоматизации конфигурации. Инструмент работает на Windows, OS X, Debian-based системах, Fedora, Gentoo, RHEL и Solaris.
5. Гибкость (Flexible)
Язык Puppet включает способ переопределения инструкций и создания исключений для разных сценариев. Puppet также помогает в планировании специфических периодических действий обслуживания.
Заключение
Puppet — мощный инструмент для управления конфигурациями и серверными задачами, и это отличный выбор для стабильных серверов, которые не меняются динамически или часто.
Чтобы увидеть, как Puppet сравнивается с другими похожими технологиями, проверьте нашу статью сравнения: Ansible vs. Terraform vs. Puppet.
Облачные вычисления
- Алмазное точение: прецизионная обработка для передовых оптик и не только
- Ультразвуковая обработка: процесс, преимущества и ограничения
- Ротационное литье: полное руководство по созданию полых пластиковых деталей
- Хромирование: процесс, этапы и применения
- Что такое штамповый инструмент (пьон)? Руководство для столяра
- Треньевое сверление: тепловое резание для быстрых, чистых отверстий
- Точечная сварка: процесс, преимущества и недостатки
- Оцинкованное железо: как цинковое покрытие защищает сталь для долгосрочной долговечности
- Ре‑платформинг в облаке: что это такое и как он обеспечивает эффективную миграцию
- Что такое сталь A2? Универсальная, стоимоэффективная марка инструментальной стали для промышленности и столя…