Puppet

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Puppet and the translation is 96% complete.

Other languages:
English • ‎Türkçe • ‎français • ‎polski • ‎русский • ‎日本語 • ‎한국어
Resources

Puppet - это система управления конфигурациями, написанная на языке программирования Ruby. Она может использоваться для автоматизации развертывания системы на новых машинах.

Установка

Puppet предоставляется пакетом Gentoo app-admin/puppet.

На данный момент, не существует разницы между клиентом и сервером, поэтому основная процедура установки для них одна и та же.

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, части, относящиеся к серверу выглядят следующим образом:

Файл /etc/puppet/puppet.confКонфигурация по умолчанию, относящаяся к серверу
[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. По умолчанию, туда не включено ни одного файла.

Файл /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, созданного ранее:

Файл /var/lib/puppet/files/motdMOTD-файл на сервере
Добро пожаловать на эту машину под управлением Puppet!

Затем, нам необходимо создать основной файл манифеста в каталоге manifests. Он называется site.pp:

Файл /etc/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
client

Теперь, мы разрешаем запрос:

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
Добро пожаловать на эту машину под управлением Puppet!

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

Этот пример сгенерирует сертификат, действительный для трех перечисленных имен хоста.

Обновление сертификата у агента

Это процесс обновления сертификата у агента.

  1. (on master)
    root #puppet cert clean ${AGENT_HOSTNAME}
  2. (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
  3. (on agent)
    root #puppet agent --onetime --no-daemonize --verbose --test --waitforcert 30
    • When using auto-signing, no further steps are needed.
  4. (on master)
    root #puppet cert list ${AGENT_HOSTNAME}
  5. Verify that the fingerprint listed in the previous two outputs matches
  6. (on master)
    root #puppet cert sign ${AGENT_HOSTNAME}
  7. (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:

Код Defining an absent slotted package
package { 'dev-lang/python:3.3': ensure => absent }

Дополнительные модули:

Смотрите также

Внешние ресурсы