WWW.APPSERVGRID.COM https://www.art2dec.co/fort/ |
|
Puppet on FreeBSD. https://www.art2dec.co/fort/viewtopic.php?f=34&t=7387 |
Page 1 of 1 |
Author: | admin [ Sat May 11, 2013 12:46 am ] |
Post subject: | Puppet on FreeBSD. |
Puppet Configuration. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Puppet на FreeBSD Эта статься преследует целью придания импульса системного администратору о том, как использовать Puppet (инструмент для настройки управления), для управления конфигурациями серверов, особенно на FreeBSD. Что вы будете знать… Что такое puppet Как разворачивать серверы используя Puppet Различные сценарии в развертывании серверов используя Puppet Что вы должны знать… Основы сетевой конфигурации в FreeBSD Основные знания о системе портов в FreeBSD Использование Puppet для управления конфигурациями серверов имеет следующие преимущества: Автоматическая инсталляция сервера Массовое развертывание изменений на серверах Обеспечить согласованность состояния сервера Puppet может быть использован для автоматической инсталляции ПО и конфигурации при развертывании серверов. Это особенно полезно при развертывании нескольких серверов с аналогичными конфигурациями службы (например, sudoers, ssh daemon, web службы и другие). Puppet также полезен в ситуациях где скрипт или программа должна быть развернута на группе серверов. После первоначального развертывания, изменения могут также быть вытолкнуты из Puppet мастера на эту группу серверов с минимальными усилиями. Часть работы системного администратора это быть уверенным, что сервер находится в состоянии желаемой формы; например ssh демон должен всегда спрашивать публичные ключи, а аутентификация по паролю должна быть отключена. Системный администратор должен настроить конфигурационные файлы и установить окружение соответственно на всех серверах, а службы (например, ssh, ntp, named…) должны быть всегда запущены или должны перезапускаться при загрузке изменений. Puppet написан на Ruby и лицензирован Apache (с 2.7.6 предыдущие были под лицензией GPL). Это ответвление cfEngine, другого мощного инструмента управления конфигурацией. Puppet относительно легко поднять и начать использовать из-за его декларативного языка. Вместо чтения типичных длинных руководств по языку или учебнику по изучению Puppet, эта статься проведет нас через основные шаги того, как установить клиент/серверную модель Puppet. Затем мы расскажем о наиболее распространенных сценариях, чтобы получить представление о том, как Puppet работает. Картина В этом разделе, FreeBSD сервера, участвующие в клиент/серверной модели Puppet должны выглядеть (быть установлены) так: Инсталляция и конфигурация Puppet на мастере и агенте. Это всего лишь о SSL сертификате подписи между puppet мастером и его агентом. Инсталляция портов использует систему портов FreeBSD, чтобы развернуть последовательную конфигурацию sudoers и ssh демона puppet агентом. Затем установить и настроить веб-сервер Apache, автоматически. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Листинг 1. Инсталляция Puppet # cd /usr/ports/sysutils/puppet # make install clean xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Для достижения того, что описано выше, мы разобьем установку на следующие части: Часть I: установка Puppet мастера и агента Инсталляция puppet и других утилит Настройка конфигурационных файлов puppet: • /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 Подпись сертификата puppet мастера и агента Часть II:различные сценарии развертывания Использование puppet для настройки конфигурации sudoers агента Настройка и конфигурирование ssh демона Настройка и конфигурирование веб сервера Apache 2.2 Эти серверы будут выполнять следующие роли: Puppet-master.example.com – это сервер будет puppet мастером. Он будет ответственным за выталкивание конфигураций в puppet агента. Puppet-agent.example.com – puppet агент. Он будет получать инструкции от мастера puppet и соответствующим образом их разворачивать. В данном случае, развертывание sudoers конфигураций, ssh демона и веб сервера Apache. К этому моменту вы должны были заметить, что сервер требует полного доменного имени. Puppet мастер будет назван как puppet-master.example.com и puppet-agent.example.com. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Листинг 2. скелет создания файлов # mkdir -p /usr/local/etc/puppet/manifests/classes # mkdir -p /usr/local/etc/puppet/files # touch /usr/local/etc/puppet/files/sudoers # touch /usr/local/etc/puppet/files/sshd_config # touch /usr/local/etc/puppet/files/httpd.conf # touch /usr/local/etc/puppet/manifests/classes/resource_group.pp # touch /usr/local/etc/puppet/fileserver.conf # touch /usr/local/etc/puppet/manifests/site.pp # touch /usr/local/etc/puppet/manifests/classes/resource_group.pp xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Отказ от ответственности: конфигурационные файлы, включенные в этой статье, минимум, для того, чтобы вызвать puppet мастера/агента и это контролируемые службы, они могут быть непригодны для производства. Используйте на свой страх и риск! Как puppet работает Puppet использует отношения мастера и агента, чтобы контролировать своих клиентов с сервера. Puppet мастер будет выталкивать инструкции в агента, а агент будет затем исполнять их. Эти действия называются ресурсами. Ресурсы могут быть группой в классах для формирования более управляемых функций. Эти ресурсы затем выполняются на узле или агенте. Существуют различные типы ресурсов, например, ресурсы файлов, ресурсы пакетов, пользовательские ресурсы и многое другое. Поведение puppet: Puppet использует SSL, чтобы обезопасить соединения между мастером и агентом. Разрешение Puppet мастера ресурса определено в файле /usr/local/etc/puppet/auth.conf. Puppet мастер конфигурационный файл /usr/local/etc/puppet/puppet.conf. Puppet агенту не нужен /usr/local/etc/puppet/puppet.conf для правильной работы. Puppet сообщения об ошибках отсортированы в /var/log/messages. Структура дерева, показанная ниже, какие файлы и каталоги необходимы для puppet мастера для функционирования: /usr/local/etc/puppet 1. auth.conf 2. files 2.1 httpd.conf 2.2 sshd_config 2.3 sudoers 3. fileserver.conf 4. manifests 4.1 classes 4.1.1 resource_group.pp 4.1.2 something.pp 4.1.3 site.pp 5. puppet.conf Часть I: настройка puppet мастера и агента Подготовка puppet-master.example.com: Листинг 1. Настройка и конфигурирование: Листинг 2. настройка puppet мастера: Листинг 3 Измените следующие параметры /usr/local/etc/puppet/puppet.conf: factsource = puppet://puppet-master.example.com/facts/ pluginsource = puppet://puppet-master.example.com/plugins Создайте следующие файлы с этим содержимым: Листинг 4 и Листинг 5. И наконец, запустите puppet мастер для прослушивания запросов на подпись сертификата, чтобы он мог вытолкнуть инструкции puppet агенту. В листинге 5, определены puppet агенты различных хостов и указаны какие ресурсы будут вытолкнуты. В этой начальной настройке, нет ничего. Мы вернемся к этому разделу снова, когда будут выполняться различные сценарии. Подготовка puppet-agent.example.com: листинг 7-9. Начало сессии на подпись сертификата от puppet агента к puppet мастеру: # puppet agent -v --server puppet-master.example.com --waitforcert 60 --test Листинг 3. Конфигурация puppet мастера # puppet master --genconfig /usr/local/etc/puppet/puppet.conf # cp /usr/local/etc/puppet/auth.conf-dist /usr/local/etc/puppet/auth.conf xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Листинг 4 /usr/local/etc/puppet/fileserver.conf [files] path /usr/local/etc/puppet/files allow *.example.com xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Листинг 5. /usr/local/etc/puppet/manifests/site.pp import "classes/*.pp" filebucket { main: server => puppet-master.example.com } File { backup => main } Exec { path => /usr/bin:/usr/sbin/:/bin:/sbin } node puppet-agent.example.com { } xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Листинг 6. запуск puppet мастера # echo 'puppetmaster_enable="YES"' >> /etc/rc.conf # /usr/local/etc/rc.d/puppetmaster start xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Пока это происходит, подписывается сертификат в puppet-master.example.com: Листинг 10. Когда сертификат подписан, сессия подписания сертификата puppet агента будет завершена. Подождите, для того, чтобы завершиться. Запустите puppet агент в puppet-agent.example.com добавив следующее в /etc/rc.conf: Листинг 11. Запустите puppet агент для того, чтобы он смог опросить инструкции от puppet мастера: # /usr/local/etc/rc.d/puppet start Теперь, когда puppet мастер и агент более или менее установлены, убедитесь, что не произошло никаких ошибок в /var/log/messages. Часть II: Различные сценарии развертывания В puppet-master.example.com, создается собственный файл sudoer, который в конечном итоге будет размещен в puppet агенте: Листинг 12. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Листинг 7. Установка puppet агента и некоторых зависимостей # cd /usr/ports/sysutils/puppet # make install clean # cd /usr/ports/ports-mgmt/portupgrade # make install clean xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Листинг 8. установка и настройка puppet агента # hostname puppet-agent.example.com xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Листинг 9. /usr/local/etc/puppet/auth.conf path /run method save allow puppet-master.example.com xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Листинг 10. подписывание сертификата в puppet мастере # puppet cert --list --all # puppet cert --sign puppet-agent.example.com xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Листинг 11. /etc/rc.conf puppet_enable="YES" puppet_flags="-v --listen --server puppet-master.example.com" xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Создание класса, группирование этих ресурсов: листинг 13. Включите этот ресурс (в классе) в узле (puppet агент), так что puppet мастер может вытолкнуть это puppet агенту: листинг 14. Активировать эти изменения puppet агенту. Он затем получит каталог и выполнит необходимые действия на агенту: # puppet kick puppet-agent.example.com Как только puppet агент обновляет эти конфигурации, настроенный файл sudoers должен быть загружен в /usr/local/etc/sudoers и посмотреть идентичен ли он тому, который мы создаем в puppet-master.example.com. Этот сценарий демонстрирует, что puppet способен вытолкнуть конфигурационные файлы из puppet мастера в его агента. В листинге 13, файлы типа ресурсов включает в класс с именем sudoers. Всякий раз, когда узлу нужно использовать этот ресурс, мы можем использовать синтаксис включенный в класс sudoers. Этот же ресурс мы используем множество раз на другом узле. Также ключевое слово источник указывает источник файла, который будет в месте в /usr/local/etc/sudoers. Этот URL адрес должен быть абсолютным, параметр [файлы] в листинге 4. Для более подробной информации о типах ресурсов, посмотрите http://docs.puppetlabs.com/references/stable/type.html. Сценарий 2: установка и конфигурирование ssh демона Кроме того, сервисы и конфигурационные файлы могут быть управляемыми с puppet мастера. Это как для развертывания настроенного демона ssh с файлом конфигурации, и вытолкнуть его в puppet агент. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Листинг 12 /usr/local/etc/puppet/files/sudoers root ALL=(ALL) ALL bob ALL=(ALL) NOPASSWD: ALL joe ALL=(ALL) NOPASSWD: ALL xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Листинг 13. /usr/local/etc/puppet/manifests/classes/resource_group.pp class sudoers { file { "/usr/local/etc/sudoers": ensure => file, owner => root, group => wheel, mode => 440, source => "puppet:///files/sudoers", } } xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Листинг 14. /usr/local/etc/puppet/manifests/site.pp node 'puppet-agent.example.com' { include sudoers } xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Листинг 15. /usr/local/etc/puppet/files/sshd_config PermitRootLogin no StrictModes yes PubkeyAuthentication yes PermitEmptyPasswords no xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Листинг 16. /usr/local/etc/puppet/manifests/classes/resource_group.pp class sshd { owner => root, group => wheel, mode => 0644, source => "puppet:///files/sshd_config", } service { 'sshd_services': ensure => running, name => "sshd", enable => true, hasrestart => true, hasstatus => true, subscribe => File['/etc/ssh/sshd_config'], } } xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Листинг 17. /usr/local/etc/puppet/manifests/site.pp node 'puppet-agent.example.com' { include sudoers include sshd } xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Листинг 18. /usr/local/etc/puppet/files/httpd.conf ServerRoot "/usr/local" Listen 80 LoadModule authz_host_module libexec/apache22/mod_authz_host.so LoadModule include_module libexec/apache22/mod_include.so LoadModule log_config_module libexec/apache22/mod_log_config.so LoadModule mime_module libexec/apache22/mod_mime.so LoadModule dir_module libexec/apache22/mod_dir.so User www Group www ServerAdmin webmaster@example.com ServerName example.com:80 DocumentRoot "/usr/local/www/apache22/data" <Directory /> AllowOverride None Order deny,allow Deny from all </Directory> <Directory "/usr/local/www/apache22/data"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> <IfModule dir_module> DirectoryIndex index.php index.htm index.html </IfModule> ErrorLog "/var/log/httpd-error.log" LogLevel warn DefaultType text/plain <IfModule mime_module> TypesConfig etc/apache22/mime.types AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddType application/x-httpd-php .php .aspx AddType application/x-httpd-php-source .phps </IfModule> Include etc/apache22/extra/httpd-default.conf Include etc/apache22/Includes/*.conf xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Листинг 19. /usr/local/etc/puppet/manifests/classes/resource_ group.pp class apache22 { package { www/apache22: ensure => installed, provider => ports, } file { "/usr/local/etc/apache22/httpd.conf": owner => root, group => wheel, mode => 0640, source => "puppet:///files/httpd.conf", require => Package['www/apache22'], } service { 'apache22_service': ensure => running, name => 'apache22', enable => true, hasrestart => true, hasstatus => true, subscribe => File['/usr/local/etc/apache22/ httpd.conf'], } } xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Листинг 20. /usr/local/etc/puppet/manifests/site.pp node 'puppet-agent.example.com' { include apache22 include sudoers include sshd xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Затем ssh демон в puppet агенте будет перезапущен, чтобы изменения вступили в силу. В puppet-master.example.com создается индивидуальный конфигурационный файл демона ssh: листинг 15. Обновление файла класса puppet так, что этот ресурс может быть использован позже: листинг 16. Точно также, включен этот ресурс в узел, так, что puppet мастер может вытолкнуть его: листинг 17. Воздействие на puppet агента для того, чтобы обновить свой каталог: # /usr/local/etc/rc.d/puppet restart После того как puppet агент обновлен, конфигурационный файл ssh демона должен быть загружены в puppet-agent.example.com и ssh демон перезапущен. В сервисе тип ресурса в соответствии с классом sshd, параметр гарантирует, убедитесь в этом, что сервис sshd запущен. Также убедитесь, что параметр подписывается всякий раз когда файл /etc/sshd/sshd_config изменяется, он будет перезапускать службу. Для более полной информации по другим доступным параметра посетите http://docs.puppetlabs.com/references/2 ... meter.html. Для сервисов поддерживаемых в FreeBSD посетите http://docs.puppetlabs.com/references/2 ... ml#service. Сценарий 3: установка и конфигурирование веб сервера apache 2.2 В этом сценарии, puppet мастер будет инструктировать агента по инсталляции apache 2.2 и скачает желаемый настроенный httpd.conf в puppet агент. Затем apache 2.2 веб сервис будет перезапущен, чтобы новые параметры вступили в силу. В puppet-master.example.com, создастся индивидуальный конфигурационный файл apache (Листинг 18). Еще раз, создается ресурс в файле класса: листинг 19. Точно так же, включает этот ресурс так, что puppet мастер может вытолкнуть его в puppet агента: листинг 20. Отдадим puppet агенту: # /usr/local/etc/rc.d/puppet restart После того, как puppet агент обновится, apache 2.2 должен быть установлен, с конфигурационными файлами загруженными в узел puppet-agent.example.com и перезапущенным сервисом apache 2.2. Это, вероятно, займет некоторое время, как только нужно будет скачать необходимые файлы и запустить установку через систему портов FreeBSD. В этом сценарии мы охватываем два новых параметра для типов ресурсов, а именно поставщика и потребителя. Параметр поставщик говорит puppet использовать порты (источник), а не пакеты, чтобы установить ПО. Что же касается потребителя, то он говорит агенту puppet что ПО apache 2.2 должен быть установлен прежде, чем применить /usr/local/etc/apache22/httpd.conf и перезапустить веб-сервис apache 2.2. В приведенном выше примере настройки и сценарии, puppet продемонстрировал, что способен развернуть файлы конфигурации и сервисы. Puppet может быть использован в большинстве случаев, чтобы облегчить работу системного администратора при развертывании новой установки, выталкивая конфигурационные файлы и действия на серверы, а также упорядочения политики между серверами. После прочтения этой статьи, я надеюсь, что вы получите представление о том, как puppet может помочь в управлении конфигурацией также хорошо, как и управлении серверами FreeBSD. В сети: • http://docs.puppetlabs.com/ – Документация Puppet Labs, • http://docs.puppetlabs.com/learning/ – Изучение Puppet. Эдвард Тан Изо дня в день администрирует кучу серверов, работающих на FreeBSD. В свободное время он ведет технические блоги на http://psybermonkey.net, изучает Perl и думает о том, как внести свой вклад в сообщество FreeBSD. 01/2012 BSD Magazine |
Page 1 of 1 | All times are UTC + 2 hours [ DST ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |