Применяя Puppet для управления конфигурациями можно добиться следующего:
• автоматизировать процесс установки сервера
• глобального применения изменений на серверах
• поддержания целостного состояния серверов
Puppet может быть использован для автоматизации процесса установки программного обеспечения и конфигурирования при разворачивании серверов.
Такой инструмент, в частности, полезен, когда приходится устанавливать много серверов с похожей конфигурацией (например, файлы sudo, SSH-службы, веб-серверы и прочее).
Puppet также может быть полезен в ситуациях,когда нужно какой-либо скрипт или программу распространить на группу серверов. После этапа начального распространения, изменения в дальнейшем могут быть взяты с мастер-узла Puppet и применены к группам серверов с минимальными усилиями.
Частью работы системного администратора является проверка состояния сервера, в нужной ли он форме – как пример, SSH-сервис должен всегда спрашивать про публичные ключи, а парольная аутентификация должна быть отключена. Системному администратору придется персонализировать конфигурационные файлы на всех серверах и , при этом для соответствующих сервисов (например, SSH, NTP, named …) должна быть обеспечена возможность их непрерывной работы, а также рестарта, в случае,если у них меняется конфигурация.
Puppet написан на Ruby и лицензируется под лицензией Apache (начиная с версии 2.7.6, до этого была лицензия GPL). Утилита является форком от cfEngine, еще одного мощного инструмента по управлению конфигурацией. Разобраться с Puppet и начать использовать его достаточно просто вследствие его декларативного языка. Вместо чтения объемных руководств посвященных Puppet, эта статья предлагает вам пройтись по тем простым примерам,как установить серверную и клиентскую части Puppet.
После этого мы разберем типовые сценарии, чтобы понять, как на самом деле работает программа.
Общая картина
Серверы FreeBSD, участвующие в клиент-серверной модели Puppet должны быть настроены и выглядеть следующим образом:
• Puppet правильно установлен и сконфигурирован на “мастере” и “агенте”, в основном речь идет об их взаимодействии по каналу, подписанному SSL-сертификатом
• система портов настроена корректно – она потребуется для разворачивания конфигураций
sudo и SSH-сервиса для использования в агенте Puppet, после этого будет возможным
автоматическая настройка и конфигурация веб-сервера Apache.
Чтобы выполнить озвученные задачи, мы разобъем установку на логические части:
Часть I – установка мастер-узла Puppet и агента
1. установим Puppet и другие утилиты
2. выполним работу по редактирированию
конфигурационных файлов:
• /usr/local/etc/puppet/puppet.conf
• /usr/local/etc/puppet/fileserver.conf
• /usr/local/etc/puppet/manifests/site.pp
• /usr/local/etc/puppet/manifests/classes/*.pp
• /usr/local/etc/puppet/auth.conf
• /etc/rc.conf
3. подпишем сертификатом мастер-узел Puppet и агент
Часть II – различные сценарии развертывания
1. задействуем Puppet для конфигурации sudo на агенте
2. установим и сконфигурируем SSH-службу
3. установим и сконфигурируем веб-сервер Apache 2.2
Следующие серверы будут выполнять роли:
• puppet-master.example.com – этот сервер будет мастер-узлом/мастер-сервером Puppet. Он ответственен за распространение конфигураций на узлы-агенты.
• puppet-agent.example.com – собственно, сам агент. Он получает инструкции от мастер-узла и действует в соответствии с ними. В данном случае, разворачивает конфигурации для sudo, SSH-службы и веб-сервера.
Вы уже заметили, что для работы сервера требуется FQDN-имя. Мастер и агент будут называться, соответственно, как puppet-master.example.com” и “puppet-agent.example.com”.
Внимание: конфигурационные файлы, показанные в этой статье, являются необходимым минимумом
чтобы заработала связка мастер-агент, а также контролируемые сервисы. Примеры могут быть не предназначены для промышленного применения.
Используйте их на свой страх и риск!
Как работает Puppet
Puppet полагается на связь “мастер-агент” для контроля клиентских машин со стороны сервера.
На мастер-узле готовится какой-либо сценарий и отсылается агенту, который, в свою очередь, выполняет присланный сценарий.
Эти действия называются “ресурсы” (“resources”).
Они могут быть сгруппированы в “классы” (“classes”) для формирования более общих “функций” (“functions”).
“Ресурсы” затем выполняются на узлах, то есть агентах.
Как себя ведет Puppet:
• Использует SSL для обеспечения безопасной связи между мастером и агентом.
• Мастер-узел хранит разрешения на ресурсы в файле /usr/local/etc/puppet/auth.conf
• Мастер-узел хранит собственную конфигурацию в файле /usr/local/etc/puppet/puppet.conf
• На агентах не требуется присутствие файла /usr/local/etc/puppet/puppet.conf
• Сообщения об ошибках Puppet хранятся в /var/log/messages
Древовидная структура ниже показывает какие именно файлы и директории необходимы для
мастера-узла Puppet:
/
usr/local/etc/puppet
+— auth.conf
+— files
¦ +— httpd.conf
¦ +— sshd_config
¦ L— sudoers
+— fileserver.conf
+— manifests
¦ +— classes
¦ ¦ +— resource_group.pp
¦ ¦ L— something.pp
¦ L— site.pp
L— puppet.conf