Установка и настройка Puppet на CentOS 8
Puppet — инструмент управления конфигурацией и автоматизации серверов. В этой пошаговой инструкции показано, как подготовить сервера, установить Puppet Server на master и Puppet Agent на агенте, зарегистрировать сертификаты, проверить соединение и создать первый manifest для установки httpd. Пошаговые команды, чеклисты и разделы по устранению неполадок помогут быстро развернуть рабочую систему.
Введение
Puppet — это система управления конфигурацией и серверная рамочная платформа для автоматизации рутинных задач. Puppet поддерживает Unix-подобные системы и Microsoft Windows. Один Puppet master может централизованно управлять сотнями агентов.
Примечание о CentOS 8
CentOS 8 официально завершил стандартную поддержку, поэтому для продакшен-сред рассматривайте миграцию на совместимые дистрибутивы (Rocky Linux, AlmaLinux) или используйте образ, соответствующий вашим требованиям безопасности. Инструкции ниже применимы для CentOS 8, но команды и пути сохраняются на совместимых RH-производных.
Ключевые термины в одну строку
- Puppet master: центральный сервер с Puppet Server.
- Puppet agent: клиент, применяющий конфигурацию.
- Manifest: файл с описанием желаемого состояния (на языке Puppet DSL).
Важные данные
- Порт по умолчанию: 8140/tcp.
- Обычный интервал запуска агента: 1h (runinterval).
- Релиз репозитория в примерах: puppet6-release-el-8.
Кому подходит эта инструкция
Системным администраторам и инженерам DevOps, которые хотят быстро настроить мастер/агент Puppet на CentOS 8 для тестовой или лабораторной среды.
Основные шаги
- Подготовка окружения и установка репозитория Puppet
- Установка и настройка Puppet Server на master
- Установка и настройка Puppet Agent на agent
- Подтверждение регистрации сертификатов и тест запуска
- Создание простого manifest для установки httpd
Важно
Если вы планируете использовать Puppet в продакшене, не отключайте SELinux без обоснования. В инструкции ниже SELinux временно отключается для простоты, но в разделе «Усиление безопасности» описаны лучшие практики.
Требования
- 2 или более сервера на CentOS 8 (master + agent)
- Права root или sudo на всех машинах
- Доступ по сети между master и agent (порт 8140)
Содержание статьи
- Подготовка окружения
- Установка Puppet Server
- Установка Puppet Agent
- Проверка и тестирование
- Создание первого manifest
- Чеклисты, методология и устранение неполадок
Подготовка окружения
В этом разделе настраиваем hostname, синхронизацию времени и добавляем репозиторий Puppet.
Настройка hostname и /etc/hosts
На master задайте hostname master и полное доменное имя master.hakase-labs.io. На агенте используйте agent01 и agent01.hakase-labs.io. Выполните на каждой машине:
hostnamectl set-hostname hostnameОтредактируйте /etc/hosts и добавьте записи с реальными IP-адресами вашей сети:
vim /etc/hostsВставьте строки вида:
10.5.5.21 master.hakase-labs.io master
10.5.5.22 agent01.hakase-labs.io agent01Примените изменения:
systemctl restart systemd-hostnamedПроверьте:
hostname
hostname -f
Настройка NTP (chrony)
Синхронизация времени критична для корректной работы сертификатов TLS.
Установите chrony:
dnf install chronyОтредактируйте /etc/chrony.conf и укажите ближайшие NTP-пулы вашей страны. Список пулов доступен на https://www.pool.ntp.org/zone/COUNTRYID
Пример:
server 0.id.pool.ntp.org iburst
server 1.id.pool.ntp.org iburst
server 2.id.pool.ntp.org iburst
server 3.id.pool.ntp.org iburstЗапустите и включите сервис:
systemctl start chronyd
systemctl enable chronyd
Добавление репозитория Puppet
Добавьте репозиторий Puppet 6 для EL8:
sudo rpm -Uvh https://yum.puppet.com/puppet6-release-el-8.noarch.rpmПроверьте репозитории:
dnf repolistОтключение SELinux (временное)
Для лабораторного развертывания автор инструкции отключает SELinux. В продакшене лучше использовать правила SELinux и правильную настройку модулей.
Отредактируйте:
vim /etc/sysconfig/selinuxУстановите:
SELINUX=disabledСохраните и перезагрузите сервер:
sudo rebootПроверьте статус:
sestatusВажно: отключение SELinux упрощает сборку окружения, но снижает безопасность. Смотрите раздел «Усиление безопасности».
Установка и настройка Puppet Server (master)
На master выполните:
sudo dnf install puppetserverНастройка памяти Java для puppetserver
Отредактируйте:
vim /etc/sysconfig/puppetserverНастройте аргументы Java в зависимости от объёма оперативной памяти:
JAVA_ARGS="-Xms1g -Xmx1g ..."Пояснение: выделите минимум и максимум памяти, подходящие для вашей нагрузки.
Основная конфигурация Puppet
Перейдите в каталог конфигурации и отредактируйте puppet.conf:
cd /etc/puppetlabs/
vim puppet/puppet.confПример секций для master:
[master]
....
dns_alt_names=master.hakase-labs.io,puppet
....
[main]
certname = master.hakase-labs.io
server = master.hakase-labs.io
environment = production
runinterval = 1hЗапуск сервисов и открытие порта
Включите запуск и запустите puppetserver:
systemctl enable puppetserver
systemctl start puppetserverОткройте порт в firewalld:
firewall-cmd --add-port=8140/tcp --permanent
firewall-cmd --reload
Проверка
Убедитесь, что сервис слушает порт 8140 и нет ошибок в логах:
ss -plnt | grep 8140
journalctl -u puppetserver -n 200Установка и настройка Puppet Agent
На agent01 выполните:
sudo dnf install puppet-agentОтредактируйте /etc/puppetlabs/puppet/puppet.conf:
cd /etc/puppetlabs/
vim puppet/puppet.confУкажите certname и server:
[main]
certname = agent01.hakase-labs.io
server = master.hakase-labs.io
environment = production
runinterval = 1hЗапуск агента и регистрация
Запустите агент и обеспечьте его автозапуск:
/opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true
На master отобразятся ожидающие запросы на подпись сертификатов:
/opt/puppetlabs/bin/puppetserver ca listПодпишите сертификат агента:
/opt/puppetlabs/bin/puppetserver ca sign --certname agent01.hakase-labs.ioПосле подписи агент будет зарегистрирован и сможет получать конфигурации от master.
Проверка Puppet Agent
На агенте выполните тест запуска вручную:
/opt/puppetlabs/bin/puppet agent --testОжидаемый результат: агент связывается с master, получает catalog и применяет ресурсы без ошибок.

Создание первого manifest и проверка действия
Создадим manifest, который установит httpd и запустит сервис на agent01.
cd /etc/puppetlabs/code/
cd environments/production/manifests
vim httpd.ppВставьте:
node 'agent01.hakase-labs.io' {
package { 'httpd':
ensure => "installed",
}
service { 'httpd':
ensure => running,
enable => true
}
}Сохраните. На агенте выполните тест:
/opt/puppetlabs/bin/puppet agent --test
Проверьте статус httpd на агенте:
systemctl status httpd
netstat -plntuОжидается, что httpd будет запущен на порту 80.

Методология управления manifests (мини-метод)
- Разделяйте code/environments/production/manifests по ролям и nodedef: node, roles, profiles.
- Используйте профили для групп ресурсов (apache, mysql).
- Храните параметры в hiera и используйте параметры в классах.
- Тестируйте локально в виртуальной среде перед применением в production.
- Автоматизируйте CI для проверки синтаксиса puppet parser и выполнения unit-тестов.
Краткие команды для проверки синтаксиса:
/opt/puppetlabs/bin/puppet parser validate manifests/httpd.pp
/opt/puppetlabs/bin/puppet config print allЧеклист перед развёртыванием в production
Для администратора master:
- Наличие резервных копий каталога /etc/puppetlabs.
- Настроенные ротации логов и мониторинг puppetserver.
- TLS сертификаты и процесс их обновления.
- Проверенные firewall-правила и мониторинг порта 8140.
Для администратора агента:
- Time sync настроен и подтверждён.
- certname уникален и совпадает с DNS/FQDN.
- SELinux и firewall протестированы с учетом политик.
Критерии приёмки
- Агент успешно обращается к master и получает catalog.
- Manifest применён без ошибок и сервисы запущены.
- Логи чисты от критических ошибок в течение 24 часов после развёртывания.
Устранение неполадок и план инцидента
Симптом: агент не подключается к master
Проверки по шагам:
- Проверка сети и DNS: ping master, nslookup master.hakase-labs.io.
- Проверка времени: timedatectl или chronyc sources — синхронизация времени.
- Проверка firewall: на master открыт 8140/tcp.
- Проверка статуса puppetserver: systemctl status puppetserver и логи journalctl -u puppetserver.
- Проверка сертификатов: /opt/puppetlabs/bin/puppetserver ca list
Частые причины и решения
- Несовпадение времени: TLS-сессия не проходит — исправьте chrony/ntp.
- Сертификат не подписан: подпишите на master или удалите и пересоздайте запрос на агенте.
- Firewall блокирует порт: откройте 8140/tcp или используйте сети VPN.
- SELinux блокирует ресурсы: включите режим permissive и проверьте AVC-логи, затем создайте политику.
Пример: удалить старый запрос на сертификат с агента и сгенерировать новый
# На master
/opt/puppetlabs/bin/puppetserver ca clean --certname agent01.hakase-labs.io
# На агенте
rm -f /etc/puppetlabs/puppet/ssl/*
/opt/puppetlabs/bin/puppet agent --testРешение проблемы с зависимостями пакетов
Если при установке puppet-agent или httpd возникают ошибки зависимостей, выполните:
dnf clean all
dnf makecache
dnf install --best --allowerasing Альтернативные подходы
Если вы начинаете с нуля и хотите альтернативы Puppet, рассмотрите:
- Ansible — агентless, проще начать, хорош для ad-hoc и конфигураций.
- Chef — похожая модель с собственным DSL.
- Salt — быстрый подход для масштабной инфраструктуры.
Выбор зависит от команды: для централизованного контроля состояния Puppet удобен; для простоты и быстрого старта — Ansible.
Усиление безопасности
- Возвращайте SELinux в режим Enforcing и тестируйте политики.
- Ограничьте доступ к портам с помощью firewall и сетевых ACL.
- Настройте ротацию логов и мониторинг, чтобы быстро обнаруживать аномалии.
- Используйте резервное копирование /etc/puppetlabs и репозиторий кода Puppet в приватном VCS.
Советы по миграции с CentOS 8
- Рассмотрите миграцию на Rocky Linux или AlmaLinux для сохранения совместимости пакетов.
- Проверьте наличия репозиториев puppet для выбранного дистрибутива (puppet7/puppet6).
- Тестируйте manifests в staging перед переносом в production.
Примеры полезных команд-сниппетов (cheat sheet)
- Проверка статуса puppetserver: systemctl status puppetserver
- Список ожидающих сертификатов: /opt/puppetlabs/bin/puppetserver ca list
- Подпись сертификата: /opt/puppetlabs/bin/puppetserver ca sign –certname
- Локальный тест агента: /opt/puppetlabs/bin/puppet agent –test
Частые ошибки и их признаки
- connection refused на 8140 — network/firewall или puppetserver не запущен
- certificate verify failed — время, DNS или неправильный certname
- package installation failed — проблема репозитория или зависимости
Заключение
Вы успешно настроили базовую инфраструктуру Puppet: master и agent, проверили связь, подписали сертификат и применили первый manifest для установки и запуска httpd. Дальше можно разделять роли через profiles и hiera, интегрировать CI и переходить к управлению конфигурациями в масштабе.
Краткое резюме
- Puppet позволяет централизованно управлять конфигурацией и состоянием серверов.
- Важны синхронизация времени, корректные FQDN и управление сертификатами.
- Рекомендуется настроить мониторинг, ротацию логов и безопасные политики SELinux.
Ресурсы
Справочные изображения

Важно
Перед применением в production адаптируйте настройки памяти, политики безопасности и процесс управления сертификатами под требования вашей организации.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента