Puppet управление · 5 min read · Feb 07, 2026
Автоматизация конфигурации и централизованное управление с Puppet на Ubuntu
Автоматизация конфигурации и централизованное управление с Puppet на Ubuntu
Автор: Кент Бреде
На основе http://reductivelabs.com/trac/puppet/wiki/InstallationGuide
Введение
Это пошаговое руководство о том, как установить серверный компонент Puppet (puppetmaster) на одной машине и клиент Puppet (puppetd) на другой. Затем мы проведем простой тест, чтобы убедиться, что Puppet работает правильно.
Если вы не знакомы с Puppet, это инструмент автоматизации конфигурации, который позволяет централизовать управление различными *nix версиями, работающими в вашей сети. Puppet поддерживает централизованное управление важными аспектами ваших систем, такими как: файлы, пакеты, пользователи, службы, cron, монтирования и т.д. Для более полного описания посетите Reductive Labs.
Фон
Эта установка выполняется на Ubuntu 6.06 LTS Server, но должна работать для большинства версий Debian/Ubuntu с небольшими изменениями.
На момент написания этой статьи текущие пакеты Puppet для Ubuntu можно найти в Feisty. Ищите текущие пакеты Debian в Unstable.
В этом руководстве мы будем использовать example.com в качестве нашего доменного имени. Серверу будет присвоено имя хоста “puppet” и IP 192.168.10.1. Имя хоста клиента - “pclient” с IP 192.168.10.2.
1. Сетевые требования
Если DNS не настроен в вашей сети, убедитесь, что файлы hosts на обоих серверах и клиентах содержат записи для обеих машин. Для этого сценария следующие записи должны быть добавлены в /etc/hosts. Используйте ваш любимый текстовый редактор, чтобы добавить строки, отражающие ваши собственные сетевые настройки, аналогичные приведенным ниже.
192.168.10.1 puppet.example.com puppet
192.168.10.2 pclient.example.com pclientСервер работает на порту 8140. Убедитесь, что между двумя машинами нет брандмауэра, блокирующего порт 8140.
2. Настройка Apt
Многие из необходимых нам пакетов находятся в репозитории universe. Если следующие строки не раскомментированы в “sources.list”, используя ваш любимый текстовый редактор, найдите и раскомментируйте их на сервере.
puppet:# vim /etc/apt/sources.list
# deb http://us.archive.ubuntu.com/ubuntu/ dapper universe
# deb http://security.ubuntu.com/ubuntu dapper-security universeПоскольку мы используем более раннюю версию Ubuntu, давайте настроим apt, чтобы легко загружать пакеты Puppet из Feisty. Отрегулируйте источники по мере необходимости, чтобы отразить вашу версию ОС. Если вы не знакомы с шагами в этом разделе, смотрите раздел 3.10 в Apt-Howto.
Откройте “sources.list” и добавьте две строки, которые следуют.
puppet:# vim /etc/apt/sources.list
deb http://us.archive.ubuntu.com/ubuntu/ feisty universe
deb http://security.ubuntu.com/ubuntu feisty-security universeОбновите ваш список источников.
puppet:# apt-get update
Выполните те же шаги выше на “pclient.”
Далее давайте настроим apt, чтобы загружать пакеты, которые нам нужны для нашей установки Puppet из Feisty, но позволить всем остальным пакетам поступать из репозитория Dapper. Добавьте следующие строки в файл “preferences”.
На сервере:
puppet:# vim /etc/apt/preferences
Package: *
Pin: release a=dapper
Pin-Priority: 700
Package: facter
Pin: release a=feisty
Pin-Priority: 500
Package: puppet
Pin: release a=feisty
Pin-Priority: 500
Package: puppetmaster
Pin: release a=feisty
Pin-Priority: 500На клиенте:
pclient:# vim /etc/apt/preferences
Package: *
Pin: release a=dapper
Pin-Priority: 700
Package: facter
Pin: release a=feisty
Pin-Priority: 500
Package: puppet
Pin: release a=feisty
Pin-Priority: 5003. Требования к программному обеспечению
В подготовке к установке Puppet нам нужно установить несколько библиотек и пакетов как на сервере, так и на клиенте. На момент написания этой статьи, если этот набор не установлен первым, возникнет цикл зависимостей.
puppet:# apt-get install libopenssl-ruby rdoc irb1.8 libopenssl-ruby1.8 libreadline-ruby1.8 libruby1.8 rdoc1.8 ruby1.8
pclient:# apt-get install libopenssl-ruby rdoc irb1.8 libopenssl-ruby1.8 libreadline-ruby1.8 libruby1.8 rdoc1.8 ruby1.8
4. Установка клиента
Установите Puppet и Facter из Feisty.
pclient:# apt-get -t feisty install facter puppet
5. Установка сервера
Установите Puppet, Facter и Puppetmaster. Скрипт после установки попытается запустить сервер и выдаст ошибку, как показано. Не беспокойтесь об этом. Мы создадим манифест на этапе 6.
puppet:# apt-get -t feisty install facter puppet puppetmaster
…..
Запуск инструмента управления конфигурацией puppet master
Манифест /etc/puppet/manifests/site.pp должен существовать [ошибка]
6. Подготовка сервера
Сервер (puppetmasterd) требует наличия манифеста, прежде чем он сможет работать. Давайте напишем манифест, который говорит puppet создать файл “/tmp/testfile” на клиенте.
puppet:# vim /etc/puppet/manifests/site.pp
# Создать "/tmp/testfile", если он не существует.
class test_class {
file { "/tmp/testfile":
ensure => present,
mode => 644,
owner => root,
group => root
}
}
# укажите puppet, на каком клиенте запустить класс
node pclient {
include test_class
}Теперь запустите сервер puppet.
puppet:# /etc/init.d/puppetmaster start
6. Подготовка клиента
Клиенты по умолчанию будут подключаться к серверу в вашей сети с именем хоста “puppet.” Если имя хоста вашего сервера не “puppet”, необходимо вставить директиву в файл конфигурации puppetd “puppetd.conf.” Хотя в этом случае нам это не нужно, мы сделаем это для демонстрационных целей.
Откройте “/etc/puppet/puppetd.conf” с вашим любимым текстовым редактором и добавьте “server = puppet.example.com” в существующий файл, как показано в примере ниже.
pclient:# vim /etc/puppet/puppetd.conf
[puppetd]
server = puppet.example.com
# Убедитесь, что все сообщения журнала отправляются в правильный каталог
# Этот каталог должен быть записываемым пользователем puppet
logdir=/var/log/puppet
vardir=/var/lib/puppet
rundir=/var/run7. Подпись ключей
Для того чтобы две системы могли безопасно общаться, нам нужно создать подписанные SSL сертификаты. Вы должны быть залогинены на обеих машинах сервера и клиента для этого следующего шага.
На стороне клиента выполните.
pclient:# puppetd –server puppet.example.com –waitforcert 60 –test
Вы должны увидеть следующее сообщение.
err: Нет сертификата; работает с ограниченной функциональностью.
info: Создание нового запроса сертификата для pclient.example.con
info: Запрос сертификата
warning: сертификат партнера не будет проверяться в этой SSL-сессии
notice: Сертификат не получен
Затем, на стороне сервера, выполните следующую команду, чтобы проверить, что клиент ждет подписания сертификата.
puppet:# puppetca –list
pclient.example.con
Затем подпишите сертификат.
puppet:# puppetca –sign pclient.example.com
Подписан pclient.example.com
Если все прошло хорошо, вы должны увидеть это сообщение на pclient.
info: Запрос сертификата
warning: сертификат партнера не будет проверяться в этой SSL-сессии
notice: Игнорирование –listen на однократном запуске
info: Кэширование конфигурации в /etc/puppet/localconfig.yaml
notice: Запуск конфигурационного запуска
notice: //pclient/test_class/File[/tmp/testfile]/ensure: создан
info: Создание файла состояния /var/lib/puppet/state/state.yaml
notice: Завершен конфигурационный запуск за 0.11 секунд
8. Тест
Проверьте и убедитесь, что файл был создан.
pclient:# ls -l /tmp/testfile
-rw-r–r– 1 root root 0 2007-02-18 18:28 /tmp/testfile
Для теста давайте отредактируем манифест и укажем Puppet изменить режим файла. Измените строку “mode => 644,” на “mode => 600,”
puppet:# vim /etc/puppet/manifests/site.pp
# Создать "/tmp/testfile", если он не существует.
class test_class {
file { "/tmp/testfile":
ensure => present,
mode => 600,
owner => root,
group => root
}
}
# укажите puppet, на каком клиенте запустить класс
node pclient {
include test_class
}На клиенте запустите puppetd в режиме подробного вывода (-v) и только один раз (-o).
pclient:# puppetd -v -o
Вы должны увидеть следующее сообщение, которое указывает, что /tmp/testfile изменился с режима 644 на 600.
notice: Игнорирование –listen на однократном запуске
info: Конфигурация актуальна
notice: Запуск конфигурационного запуска
notice: //pclient/test_class/File[/tmp/testfile]/mode: режим изменился с ‘644’ на ‘600’
notice: Завершен конфигурационный запуск за 0.26 секунд
Чтобы проверить, что работа была выполнена правильно.
pclient:# ls -l /tmp/testfile
-rw——- 1 root root 0 2007-02-18 18:28 /tmp/testfile
9. Заключение
Поздравляем, тестирование завершено, и у вас есть рабочая установка Puppet. Ваш следующий шаг - создать функциональный манифест, протестировать еще раз, а затем запустить демон puppetd на стороне клиента. Puppetd по умолчанию будет автоматически опрашивать сервер каждые 30 минут.
pclient:# /etc/init.d/puppet start
Для получения дополнительной информации посетите Reductive Labs.
Для дружелюбной и знающей помощи присоединяйтесь к Puppet Users или загляните в #puppet на irc.freenode.net.
Get new posts in your inbox
No spam. Unsubscribe anytime.