Puppet

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Puppet and the translation is 73% complete.
Outdated translations are marked like this.
Other languages:
Resources

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

ФАЙЛ /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 }

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

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

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