Puppet: в шкуре кукловода. Часть 1
К моему глубочайшему удивлению, такая отличная и полезная система как Puppet, практически не описана в русскоязычном Интернете. Те статьи что имеются(см. в конце поста) не заходят дальше поверхностного описания установки Puppet и настройки прав на файлы /etc/passwd, /etc/sudoers. Я вижу, что с помощью Puppet я и мои коллеги смогут сэкономить себе кучу времени при установке софта или переносе инфраструктуры на новое железо, поэтому хочу поделиться опытом и описать КАК я это сделаю
.
Что это?

Puppet – это система управления конфигурациями, инструмент который позволяет автоматизировать настройку и управление большим парком машин, систем, сервисов. Его магия состоит в том что вам достаточно один раз написать «рецепт» по настройке какого-то ПО или опции системы, и вы уже можете тиражировать эти изменения на сколь угодно большое количество серверов, для этого достаточно установить на целевой машине Puppet и произвести маленькую настройку.
Как это работает?

Есть центральный демон, так называемый pupetmaster(кукловод), у него хранятся данные о настройке сервисов, файлах, шаблонах конфигурации и т.д.
На сервера и рабочие станции под управлением Linux, *BSD, MacOS ставиться puppet(марионетка/кукла), раз в 30 минут этот сервис забирает данные о конфигурации ПО и системы у puppetmaster`а.
Конфигурировать можно практически все: установленные программы, репозитории ПО, права на файлы и папки, пользователей системы, файлы конфигурации, сервисы в системе и т.д. Также функциональность puppet`а можно расширять при помощи модулей или достаточно легко подключаемых плагинов к Facter и самому Puppet.
Устанновка PuppetMaster из репозитория (CentOS/Fedora)
Этот способ установки наиболее предпочтителен, т.к. позволяет в дальнейшем достаточно просто обновляться до новых версий.
Для установки puppetmaster в систему нужно добавить репозиторий EPEL
Создаем файл /etc/yum.repos.d/epel.repo*:
[epel] name=Extra Packages for Enterprise Linux 5 - $basearch mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch failovermethod=priority enabled=1 gpgcheck=1 gpgkey=http://download.fedora.redhat.com/pub/epel/RPM-GPG-KEY-EPEL includepkgs=ruby*,puppet*,facter*,augeas* |
Далее ставим пакет puppet-server.noarch:
yum install 'puppet*' |
Вот и все, просто как палка
. Далее можно переходить к конфигурированию и проверке работы puppet (см. ниже)
Установка PuppetMaster через Gem
Для установки Puppet нужно установить Ruby и Ruby gems (здесь уже на ваш выбор как
).
Для установки Puppet и Puppetmaster`а нужно установить gem puppet:
gem install puppet |
Вместе с puppet будет установлено еще несколько gem`ов по зависимостям.
Теперь нужно прописать puppet в системе, для этого заходим в папку с gem`ом puppet(по идее /opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/puppet-0.25.5, точное расположение папки ruby может быть другим, ставил из сорцов) и выполняем следующие команды по интеграции в систему:
confdir='conf/redhat/' cp $confdir/client.sysconfig /etc/sysconfig/puppet cp $confdir/client.init /etc/init.d/puppet cp $confdir/server.sysconfig /etc/sysconfig/puppetmaster cp $confdir/server.init /etc/init.d/puppetmaster cp $confdir/fileserver.conf /etc/puppet/fileserver.conf cp $confdir/puppet.conf /etc/puppet/puppet.conf cp $confdir/logrotate /etc/logrotate.d/puppet |
Редактируем файл /etc/init.d/puppetmaster:
... PUPPETMASTER=/opt/ruby-enterprise-1.8.7-2010.01/bin/$prog ...
Редактируем файл /etc/init.d/puppet:
... puppetd='/opt/ruby-enterprise-1.8.7-2010.01/bin/puppetd' ... |
Как видите этот способ установки более длинный и муторный.
Первоначальное конфигурирование puppetmaster (проверка работоспособности)
Создаем тестовый манифест для проверки работоспособности Puppet:
# Создаем файл для проверки touch /tmp/tmp chown ftp:ftp /tmp/tmp chmod 777 /tmp/tmp # Создаем файл манифест vim /etc/puppet/manifests/site.pp |
Забиваем в site.pp следующие данные:
file { "/tmp/tmp": owner => root, group => root, mode => 440 } |
Далее запускаем команду:
puppetmaster --verbose --no-daemonize |
Мы запускам puppet не как демон, а в полу-интерактивном режиме, с выводом всех происходящих действий в терминал. Должна появиться строчка:
notice: Starting Puppet server version 0.25.5 |
И на этом все. Теперь открываем еще один терминал к серверу (терминал с puppetmaster`ом не закрываем) и набираем команду
puppetd --verbose --waitforcert 60 --no-daemonize |
Таким образом мы запускаем puppet на нашем сервере, в интерактивном режиме как и puppetmaster.
После запуска должны появиться следующие строчки:
notice: Starting Puppet client version 0.25.5 info: Caching catalog for mail.rulimony.ru info: Applying configuration version '1274869753' notice: //File[/tmp/tmp]/owner: owner changed 'ftp' to 'root' notice: //File[/tmp/tmp]/group: group changed 'ftp' to 'root' notice: //File[/tmp/tmp]/mode: mode changed '777' to '440' notice: Finished catalog run in 0.02 seconds |
Это говорит о том что конфигурация удачно передалась с puppetmaster`а клиенту.
Останавливаем puppetmaster и puppet через Ctrl+c.
Все, puppetmaster и puppet можно запускать:
chkconfig puppetmaster on chkconfig puppet on service puppetmaster start service puppet start |
Что это было?
Мы установили Puppet и Puppetmaster на один сервер, создали тестовый манифест (site.pp) который изменяет владельца и права на файл /tmp/tmp.
Дальше нужно ставить puppet на другие сервера (ноды) и создавать настройки конфигурации.
Об этом постараюсь написать в течении недели. А пока советую приглядеться к следующим ресурсам:
Puppet, система управления конфигурациями. Часть I
Puppet, система управления конфигурациями. Часть II
Puppet против Chef: 10 причин, из-за которых выигрывает Puppet
Puppet Docs
Спасибо большое за статью! И за ссылки тоже
Не за что.
Тебе спасибо за комментарий, а то я решил что мои посты читать перестали
Интересная система, подскажите, а уживется она вместе с линукс calculate на одном сервере?
Изивини за неграмотность, но я не знаю что такое «линукс calculate»
Вообще говоря конфликтов у этой программы быть не должно.
что-то вроде gentoo. Машина раздает инет по классам. Я хочу установить на всех машинах (их около 30-ти) линукс. Но персонально устанавливать на каждой – это по крайней мере затратно по времени. Поэтому возлагаю большие надежды на систему описанную вами
К сожалению я не знаком ни с Calculate ни с Gentoo, поэтому ничего конкретного посоветовать не могу.
.
В списке поддерживаемых платформ фигурирует Gentoo, не знаю насколько ваш дистрибутив совместим с ним.
Я бы советовал вам попробовать, экономит кучу времени
Если в вашем репозитории этого пакета нет, то я уверен что есть Ruby и Ruby gems, и вы можете поставить себе Puppet как это описано выше.
Плохо я читал ваш комментрарий
, Puppet не поможет вам установить на все машины Linux, но поможет их потом одинаково сконфигурировать.
Если машины одинаковые то я бы посоветовал поставить Linux на одну машину, а на остальные разлить образ с помощью Acronis.
Возможно, но придется бегать с диском или флэшкой по всем машинам, дабы запустить acronis. А образ можно и по сетке разбросать. Главный вопрос: а можно ли видеть что десктоп каждой машины?
С флешкой бегать не обязательно если использовать PXE.
А как puppet по сравнению cfengine3?
К сожалению мне нечего вам ответить т.к. cfengine я не знаком, на LOR`е началось какое-то обсуждение
http://www.linux.org.ru/news/doc/4953619#comment-4964863
поэтому вопросы видимо лучше туда
Вариант такой: у всех есть xorg.conf, но у всех разный. Как с помощью sed и awk вставить нужную строку в нужную секцию я знаю. Возможно ли запустить некий сценарий (bash) на всех «подопытных» машинах посредством этого кукловода ? Разумеется этого сценария изначально на машинах нет, только на сервере. Или подобная задача решается как-то иначе ?
Решается иначе
Puppet может управлять конфигурационными файлами, и создавать их на основе темплейтов: http://docs.puppetlabs.com/guides/templating.html
Можно и так тоже
Мы часто запускаем скрипты, с параметрами, заданными в переменных puppet
Отказались мы от puppet-a хотя и проработали с ним 1.5 года. Слишком сложно писать конфигурации и очень много функций приходится писать на шеле. Проще всё написать на шеле. И ещё сказываются проблемы с производительностью и утечками памяти.
А в целом пришли к выводу что все эти системы конфигурации – фуфло!
>И ещё сказываются проблемы с производительностью и утечками памяти.
Да, была пара проблемных версий. 0.24.8, 0.24.9 все ОК, на сколько я знаю, и в 25-ой ветке тоже или все ОК, или по-большей части ОК
>Слишком сложно писать конфигурации и очень много функций приходится писать на шеле
Вообще-то, предполагается писать свои типы и функции на ruby! Как-то не так Вы его использовали
( смотрите документацию Custom Facts and Types.
В общем, если сами не осилили, не смущайте, пожалуйста, новеньких юзеров. Все работает, и работает превосходно. А если что-то не работает, можно спросить в irc/листе рассылки, завести баг.
P.S. по поводу производительности, тоже не смущайте: используйте более совершенный файл-сервер, чем встроенный, например, через Nginx (есть примеры в официальной документации) если нагрузка большая.
Мне больше всего не нравится только одно: невозможность переназначения уже обозначенных переменных, но с этим можно жить.