Posts tagged ‘puppet’

Боль и ненависть в Puppet.

risovach.ru
Коротко, когда-то я много пользовался Puppet (_1, _2), сейчас уже пол года только и делаю что пишу для Chef. Пару дней назад наткнулся на статью Что нового в Puppet 4 и прослезился…
Моя статья от 2010 (sic!) года – _1 и _2

P.S.

Скоро попрут статьи про Opscode Chef.

Puppet: в шкуре кукловода. Часть 1

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

Что это?

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

Как это работает?

Pupet - system diagram

Есть центральный демон, так называемый 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

Нужен ли Вам Puppet, “За” и “Против”

Есть у меня хороший друг, который давеча сказал, что не может определиться нужен ему Puppet или нет.
Прочитав утром, что именно я ему написал в ответ, считаю что этим нужно поделится с общественностью 🙂

Вопрос о том использовать/не использовать софт (делать/не делать что-то), я всегда свожу к трем вопросам:

  • Кто это будет поддерживать после меня (хватит ли знаний)?
  • Сколько это будет стоить (реализация и поддержка)?
  • Каков будет реальный эффект (повысили производительность на X%, сэкономили Y денег и т.д.)?

Итак Pro и Contra о Puppet, пост не ставит своей целью сравнение Puppet с другими CMS (CfEngine, Chef, Capistrano etc.), только Puppet сам по себе.

За:

  • Статичная конфигурация инфраструктуры, набор приложений и настройки определены, обновлений не предвидится
  • Нужно обновлять конфигурации на большом кол-ве серверов разом
  • Авто-конфигурация Nagios, на основе данных из Puppet (“ах, FTP ставим! Добавляем проверку FTP в Nagios”)
  • Нужно контролировать конфиги ПО от изменения

Против:

  • Нужно уметь пользоваться Puppet (мозги нужно правильно вывернуть)
  • Нужно заставить себя и оружающих делать изменения только в Puppet
  • Те кто придут после тебя (если Puppet используешь только ты) в кратчайшие сроки откажутся от Puppet, если сами его не использовали
  • Большие конфигурации разношерстных серверов (>30 разнообразных шаблонов), становиться трудно поддерживать т.к. конфиги расплываются на части, в них пропадает единообразие
  • Жрет память, особенно на крупных конфиг-файлах (Ruby, что тут скажешь)

Предлагаем свои доводы за и против.

P.S.

Если вы не знаете что-такое Puppet или не понимаете зачем он нужен загляните в Оглавление

Книга “Pro Puppet” (скачать)

Если кто помнит, я уже писал про одну книгу по Puppet: Pulling Strings with Puppet: Configuration Management Made Easy.

Уважаемый sardigital подкинул мне еще одну классную книгу по Puppet, которая так и называется “Pro Puppet”:

Сама книга в PDF: Pro Puppet.pdf

Pro Puppet

  About the Authors.............................................................. xiii
  About the Technical Reviewer .................................................. xiv
  Acknowledgments ............................................................... xv
  Introduction .................................................................. xvi
  Chapter 1: Getting Started with Puppet .........................................1
  Chapter 2: Building Hosts with Puppet ..........................................29
  Chapter 3: Working with Environments ...........................................65
  Chapter 4: Puppet Scalability ..................................................89
  Chapter 5: Externalizing Puppet Configuration...................................119
  Chapter 6: Exporting and Storing Configuration..................................133
  Chapter 7: Puppet Consoles: Puppet Dashboard and The Foreman....................159
  Chapter 8: Tools and Integration ...............................................189
  Chapter 9: Reporting with Puppet ...............................................231
  Chapter 10: Extending Facter and Puppet ........................................241
  Chapter 11: Marionette Collective ..............................................265
  Appendix A: Working with Puppet ................................................289
  Index ..........................................................................293

На вскидку книга куда более полная чем “Pulling strings…”, более подробно и полно описаны:

  • Намного больше примеров, например настройка Postfix и MySQL
  • Масштабирование Puppet
  • Интеграция с LDAP
  • Как правильно и красиво хранить конфиги
  • Подробно рассказано про Dashboard и Foreman
  • Описано как правильно работать с модулями Puppet (НАКОНЕЦ-ТО!)
  • Составление отчетов с помощью Puppet

И много-многое другое 🙂
Советую к прочтению всем кто пользуется Puppet.

Сама книга в PDF: Pro Puppet.pdf