Гид по технологиям

Установка и настройка Puppet на CentOS 8

• 7 min read • DevOps • Обновлено 18 Nov 2025
Puppet на CentOS 8 — установка и настройка
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

Экран настройки hostname

Настройка 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

Конфигурация Firewall

Проверка

Убедитесь, что сервис слушает порт 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

Запуск puppet agent

На 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 и применяет ресурсы без ошибок.

Тест puppet agent


Создание первого 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

Создание manifest

Проверьте статус httpd на агенте:

systemctl status httpd
netstat -plntu

Ожидается, что httpd будет запущен на порту 80.

Проверка httpd


Методология управления manifests (мини-метод)

  1. Разделяйте code/environments/production/manifests по ролям и nodedef: node, roles, profiles.
  2. Используйте профили для групп ресурсов (apache, mysql).
  3. Храните параметры в hiera и используйте параметры в классах.
  4. Тестируйте локально в виртуальной среде перед применением в production.
  5. Автоматизируйте 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

Проверки по шагам:

  1. Проверка сети и DNS: ping master, nslookup master.hakase-labs.io.
  2. Проверка времени: timedatectl или chronyc sources — синхронизация времени.
  3. Проверка firewall: на master открыт 8140/tcp.
  4. Проверка статуса puppetserver: systemctl status puppetserver и логи journalctl -u puppetserver.
  5. Проверка сертификатов: /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.

Ресурсы

Справочные изображения

Общее изображение Puppet и серверов

Важно

Перед применением в production адаптируйте настройки памяти, политики безопасности и процесс управления сертификатами под требования вашей организации.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро