Puppet
Puppet - это система управления конфигурациями, написанная на языке программирования Ruby. Она может использоваться для автоматизации развертывания системы на новых машинах.
Установка
На данный момент, не существует разницы между клиентом и сервером, поэтому основная процедура установки для них одна и та же.
USE flags
USE flags for app-admin/puppet A system automation and configuration management software
augeas
|
Enable augeas support |
diff
|
Enable diff support |
doc
|
Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally |
emacs
|
Add support for GNU Emacs |
hiera
|
Enable hiera support |
ldap
|
Add LDAP support (Lightweight Directory Access Protocol) |
rrdtool
|
Enable rrdtool support |
selinux
|
!!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur |
shadow
|
Enable shadow support |
sqlite
|
Add support for sqlite - embedded sql database |
test
|
Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently) |
vim-syntax
|
Pulls in related vim syntax scripts |
Emerge
Для начала, установите Puppet с помощью emerge:
root #
emerge --ask app-admin/puppet
Конфигурация и настройка
В основном, Puppet конфигурируется через файл /etc/puppet/puppet.conf, написанный в стиле формата ini. Комментарии отмечены знаком решетки (#
).
Файл конфигурации разбит на несколько разделов, или блоков:
[main]
содержит настройки, которые действуют по умолчанию для всех частей Puppet, до тех пор, пока они не переписываются настройками в каком-либо из следующих разделов:[master]
используется для настроек, касающихся Puppetmaster (puppet master), или утилиты CA (puppet cert)[agent]
используется для настроек, касающихся Puppet agent (puppet agent).
Более глубокое объяснение, вместе со списком дальнейших блоков, доступно в официальной документации Puppet. Также, существует список всех параметров конфигурации, некоторые из которых, конечно же, имеют смысл только тогда, когда применяются или к серверу, или к клиенту.
Настройка (Puppetmaster) сервера
Настройки по умолчанию, помещенные ebuild-файлом в puppet.conf могут использоваться как есть. Для Puppet 2.7.3, части, относящиеся к серверу выглядят следующим образом:
[main]
# Каталог логов Puppet.
# Значение по умолчанию '$vardir/log'.
logdir = /var/log/puppet
# Место, где хранятся pid-файлы Puppet.
# Значение по умолчанию '$vardir/run'.
rundir = /var/run/puppet
# Место, где хранятся SSL-сертификаты.
# Значение по умолчанию '$confdir/ssl'.
ssldir = $vardir/ssl
Настройка файлового сервера
Для того, чтобы отправить клиентам файлы, файловый сервер должен быть сконфигурирован в /etc/puppet/fileserver.conf. По умолчанию, туда не включено ни одного файла.
[files]
path /var/lib/puppet/files
allow 192.168.0.0/24
Фрагмент выше настраивает общий ресурс с названием files (запомните этот идентификатор, так как на него будет необходимо сослаться в дальнейшем), осуществляющий поиск файлов в /var/lib/puppet/files и доступный только для хостов сети 192.168.0.0/24. Здесь можно использовать любые ip-адреса, бесклассовую адресацию, и имена хостов (включая шаблонные знаки, наподобие *.domain.invalid
). Команда deny может использоваться для явного запрета доступа к определенным компьютерам или диапазонам IP-адресов.
Запуск демона puppetmaster
Рекомендуется, чтобы Puppetmaster был доступен с клиентов, использующих имя хоста
puppet
. Однако, имя может быть переопределено, что, конечно же, требует переконфигурацию.На этот момент, имя хоста, в том виде, в каком оно доступно клиентам, должно быть таким же, как и вывод команды hostname -f. Чтобы достичь этого необходимо поправить /etc/hosts или вручную создать новый сертификат как описано ниже.
С этой базовой конфигурацией, вместе с первоначальными настройками файлового сервера, мы можем запустить демон Puppetmaster с помощью его OpenRC init-скрипта:
root #
/etc/init.d/puppetmaster start
Во время первого запуска, Puppet генерирует SSL сертификат для хоста Puppetmaster и размещает его в каталоге, который указан в переменной ssldir, как было показано в конфигурации выше.
Он слушает порт 8140/TCP
; убедитесь, что настройки межсетевого экрана не запрещают доступ клиентам.
Простой манифест
В терминах Puppet, манифестом называются файлы, в которых указана конфигурация клиента. Документация содержит исчерпывающее руководство по языку разметки манифеста.
В качестве простого примера, давайте создадим файл с сообщением дня (message of the day, сокращенно motd) на клиенте. На puppetmaster, создайте файл внутри общего файлового ресурса files, созданного ранее:
Добро пожаловать на эту машину под управлением Puppet!
Затем, нам необходимо создать основной файл манифеста в каталоге manifests. Он называется site.pp:
node default {
file { '/etc/motd':
source => 'puppet:///puppet/files/motd'
}
}
Определение узла по умолчанию - default node (или, имя клиента), используется в случае, когда специальное объявление узла (node) отсутствует.
Мы используем общий файловый ресурс и хотим, чтобы файл /etc/motd содержал то же самое, что и файл на общем ресурсе files на хосте puppet
. Если сервер с puppetmaster доступен под другим именем хоста, то необходимо исправить source URI соответственно.
Конфигурация клиента
Клиент должен иметь те же самые главное и второстепенное число релиза как и Puppetmaster. Использование Puppetmaster 2.7.1 с клиентами 2.7.2 не запрещается, но использование 2.6 для сервера и 2.7 для клиентов может вызвать неожиданные проблемы в любой момент.
Если puppetmaster не доступен под
puppet
именем, то установите server=<имя хоста>
на действительное имя хоста в /etc/puppet/puppet.conf в разделе [main]
.Во время первого запуска Puppet agent, нужно подождать, пока сертификат будет подписан puppetmaster. Для того, чтобы запросить сертификат и выполнить первый проход конфигурации, запустите:
root@client #
puppet agent --test --waitforcert 60
info: Creating a new certificate request for client info: Creating a new SSL key at /var/lib/puppet/ssl/private_keys/client.pem notice: Did not receive certificate
Перед тем, как клиент сможет соединиться, необходимо авторизировать запрос сертификата на сервере. Клиент должен появиться в списке узлов, запрашивающих сертификат:
root@server #
puppet cert --list
Теперь, мы разрешаем запрос:
root@server #
puppet cert --sign client
Клиент будет проверять каждые 60 секунд, выпущен ли уже его сертификат. После этого, он продолжит первый проход конфигурации:
info: Caching catalog for client
info: Applying configuration version '1317317379'
notice: /Stage[main]//Node[default]/File[/etc/motd]/ensure: defined content as '{md5}30ed97991ad6f591b9995ad749b20b00'
notice: Finished catalog run in 0.05 seconds
Если это сообщение появляется, то все прошло хорошо. Теперь проверьте содержимое файла /etc/motd на клиенте:
user@client $
cat /etc/motd
OpenRC
Теперь, можно запустить puppet agent в качестве демона, и запускать его каждый раз при загрузке:
root@client #
/etc/init.d/puppet start
root@client #
rc-update add puppet default
Systemd
С другой стороны, при запущенном systemd:
root@client #
systemctl start puppet
root@client #
systemctl enable puppet
Другие темы
Генерирование сертификатов вручную
Для того, чтобы создать сертификат вручную можно использовать утилиту puppet cert. Она разместит все сгенерированные сертификаты в каталоге, который указан в переменной ssldir, так, как установлено в конфигурации puppet, и подпишет их ключом локального центра сертификации (CA).
Легким случаем является генерация сертификата с только одним именем сертификата - Common Name:
root #
puppet cert --generate host1
Если требуются множественные имена хоста, для которых этот сертификат действителен, используйте параметр --certdnsnames
и отделите дополнительные имена хоста двоеточием:
root #
puppet cert --generate --certdnsnames puppet:puppet.domain.invalid host1.domain.invalid
Этот пример сгенерирует сертификат, действительный для трех перечисленных имен хоста.
Обновление сертификата у агента
Это процесс обновления сертификата у агента.
- (on master)
root #
puppet cert clean ${AGENT_HOSTNAME}
- (on agent)
root #
rm /etc/puppet/ssl/{certs,certificate_requests}/${AGENT_HOSTNAME}.pem
- This will cause the Puppet agent to regenerate the CSR with the existing SSL key.
- The old certificate is no longer valid, as it was nuked on the master.
- When one of the above steps is forgotten, an error will pop up about the certificate mis-matching between agent and master.
- To replace the SSL keys (optional):
root #
rm /etc/puppet/ssl/{public,private}_keys/${AGENT_HOSTNAME}.pem
- (on agent)
root #
puppet agent --onetime --no-daemonize --verbose --test --waitforcert 30
- When using auto-signing, no further steps are needed.
- (on master)
root #
puppet cert list ${AGENT_HOSTNAME}
- Verify that the fingerprint listed in the previous two outputs matches
- (on master)
root #
puppet cert sign ${AGENT_HOSTNAME}
- (on agent)
root #
puppet agent --onetime --no-daemonize --verbose --test
Управление слотами с puppet
По умолчанию portage предоставляемый в puppet не поддерживает слоты, но существуют модули puppet, у которых есть данная функциональность.
For instance, with app-admin/puppet version 4.6.0 and higher, and/or app-admin/puppet-agent, the slot functionality is supported like to:
package { 'dev-lang/python:3.3': ensure => absent }
Дополнительные модули: