1. Вступ до ляльки
Системні адміністратори часто застрягають у низці повторюваних завдань: оновлення пакетів, керування конфігураційними файлами, системними сервісами, завданнями Cron, додавання нових конфігурацій, виправлення багів тощо. Ці завдання часто повторювані та неефективні, і перша реакція на їх вирішення — автоматизація їх, щоб з'явилися власні скрипти. Через складність середовища кастомні скрипти та додатки постійно розробляються, і їх важко вмістити на кілька платформ, а гнучкість і функціональність важко гарантувати, тому з'явилися автоматизовані інструменти управління конфігурацією, такі як Puppet.
У світі відкритого коду існує багато інструментів конфігурації на вибір, і деякі з ключових продуктів у цій сфері такі:
Puppet (http://puppet.reductivelabs.com/): Інструмент керування конфігурацією, написаний на Ruby, який використовує архітектуру C/S для налаштування клієнта декларативною мовою. Cfengine (http://www.cfengine.org): Один із перших відкритих інструментів конфігурації, випущений у 1993 році, також є архітектурою C/S, зазвичай використовується в навчальних закладах. LCFG(http://www.lcfg.org/): Інструмент управління конфігурацією для архітектур C/S, який використовує XML для визначення конфігурацій. Bcfg2: Інструмент управління конфігурацією для архітектури C/S, написаний на Python, який використовує специфікації та відповіді клієнтів для налаштування цільового хоста.
Цей документ присвячений опису того, як використовувати Puppet для керування вашим хостом, додатками, фоновими програмами та різними сервісами.
Про Puppet:
1. Для чого використовується Лялька?
Puppet — це відкритий інструмент управління конфігурацією систем на базі Ruby, який базується на архітектурі розгортання C/S. Головним розробником є Luke Kanies, який дотримується ліцензії на авторське право GPLv2. З 1997 року Каніс займається адмініструванням систем UNIX, і розробка Puppet виникла саме з цього досвіду. Не задоволений наявними інструментами конфігурації, Каніс почав розробляти інструменти в редуктивній лабораторії між 2001 і 2005 роками. Незабаром Reductive Labs випустили свій флагманський продукт Puppet.
2. Особливості Pupput
Багато інструментів управління конфігурацією систем працюють дуже схоже, наприклад cfengine. Що робить Puppet унікальним?
Синтаксис Puppet дозволяє створити окремий скрипт для створення користувача на всіх цільових хостах. Усі цільові хости по черзі інтерпретують і виконують модуль, використовуючи синтаксис, застосовний до локальної системи. Наприклад, якщо ця конфігурація виконується на сервері Red Hat, створіть користувача за допомогою команди useradd; Якщо ця конфігурація виконується на хості FreeBSD, використовується команда adduser.
Ще одним визначним аспектом Puppet є її гнучкість. Завдяки специфіці відкритого програмного забезпечення ви можете вільно отримати вихідний код Puppet, а якщо виникнуть проблеми і маєте таку можливість, можете змінювати або покращувати код Puppet відповідно до свого середовища. Крім того, розробники та донори спільноти продовжують покращувати можливості Puppet's. Велика спільнота розробників і користувачів також прагне надавати документацію та технічну підтримку Puppet.
Puppet також легко масштабуватися. Підтримка власних пакетів і конфігурації спеціальних системних середовищ можна швидко і легко додати до інсталятора Puppet.
3. Робочий режим ляльки
Puppet — це інструмент управління конфігурацією архітектури C/S, який встановлює пакет puppet-server (відомий як Puppet master) на центральний сервер. Встановіть клієнтське програмне забезпечення Puppet (яке називається Puppet Client) на цільовий хост, яким потрібно керувати. Коли клієнт підключається до Puppet Master, конфігураційний файл, визначений на Puppet Master, компілюється і запускається на клієнті. За замовчуванням кожен клієнт спілкується з сервером кожні півгодини, щоб підтвердити оновлення конфігураційної інформації. Якщо з'являється нова конфігураційна інформація або змінена інформація, конфігурація буде перекомпільована та опублікована кожному клієнту для виконання. Ви також можете активно запускати оновлення конфігураційної інформації на сервері, щоб змусити кожного клієнта її налаштовувати. Якщо інформація конфігурації клієнта змінюється, він може отримати оригінальну конфігурацію з сервера для її корекції.
Управління конфігурацією: Встановлення та використання ляльок (1)
4. Майбутнє Puppet
Нарешті, Puppet — це молодий інструмент, який ще перебуває у стадії розробки та розвитку. Спільнота Puppet швидко зростає, і багато нових ідей постійно впроваджується, що стимулює розробку, оновлення та презентацію модулів щодня.
2. Конфігурація та встановлення (інсталяція Puppet 2.6.4 CentOS 5.4):
Налаштуйте репозиторій на ляльковому сервері та клієнті: об/хв -Увх http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm [root@puppetmaster ~]# vi /etc/yum.repos.d/epel.repo Додати до: [епел-лялька] ім'я=лялька епеля baseurl=http://tmz.fedorapeople.org/repo/puppet/epel/5/$basearch/ увімкнено=0 gpgcheck=0
Додайте repository puppet.repo: [root@puppetmaster ~]# vi /etc/yum.repos.d/puppet.repo [лялькові лабораторії] name=Пакети Puppet Labs baseurl=http://yum.puppetlabs.com/base/ увімкнено=0 gpgcheck=0
Інсталяція ляльковода: [root@puppetmaster ~]# yum --enablerepo=epel,epel-puppet install puppet-server
Модифікуйте хости та додайте наступні два записи: [root@puppetmaster ~]# vi /etc/hosts 192.168.0.10 puppetmaster.leju.com лялька 192.168.0.100 puppetclient.leju.com
Конфігурація ляльки: [root@puppetmaster ~]# cd /etc/puppet/ [root@puppetmaster лялька]# vi puppet.conf
[головна] # Каталог журналу ляльок. # Значення за замовчуванням — '$vardir/log'. logdir = /var/log/puppet
# Де зберігаються PID-файли Puppet. # Значення за замовчуванням — '$vardir/run'. Rundir = /var/run/лялька
# Де зберігаються сертифікати SSL. # Значення за замовчуванням — '$confdir/ssl'. SSLDIR = $vardir/SSL
[агент] # Файл, у якому лялька зберігає список класів # пов'язана з отриманою конфігурацією. Можна завантажити # окремий виконуваний файл '''puppet'' за допомогою ''--loadclasses'' # варіант. # Значення за замовчуванням — '$confdir/classes.txt'. classfile = $vardir/classes.txt
# Де лялька кешує локальну конфігурацію. An # розширення, що вказує на формат кешу, додається автоматично. # Значення за замовчуванням — '$confdir/localconfig'. localconfig = $vardir/localconfig server = puppetmaster.leju.com звіт = правда слухати = правда
[майстер] ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY autosign = true звіти = сховище
[root@puppetmaster puppet]# vi fileserver.conf [файли] path /etc/puppet/files дозволити *
[модулі] дозволити *
[плагіни] дозволити *
[root@puppetmaster лялька]# mkdir /etc/puppet/files
[root@puppetmaster лялька]# CD Manifests/ Створіть site.pp, який є конфігураційним файлом запису ляльки: [root@puppetmaster manifests]# vi site.pp імпорт "modules.pp" імпорт "roles.pp" імпортувати "nodes.pp"
# Загальні налаштування для стандартних типів Exec { path => "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin" }
filebucket { main: server => "puppetmaster.leju.com" } File { backup => main }
Створіть modules.pp для імпорту модулів: [root@puppetmaster manifests]# vi modules.pp імпорт «тесту»
Створіть roles.pp для визначення ролей сервера: [root@puppetmaster маніфастіє]# vi roles.pp клас baseclass { Включити тест
}
Створіть nodes.pp для налаштування серверних вузлів: [root@puppetmaster manifests]# vi nodes.pp вузол 'basenode' { включити базовий клас
}
вузол 'puppetclient.leju.com' успадковує basenode { tag("тест")
}
вузол 'puppetmaster.leju.com' успадковує basenode { tag("тест")
}
[root@puppetmaster маніфест]# CD .. [root@puppetmaster puppet]# mkdir modules Створіть тестовий модуль: [root@puppetmaster модулі]# mkdir -p test/manifests/ [root@puppetmaster modules]# mkdir test/files/ [root@puppetmaster модулі]# CD-тест/файли/ [root@puppetmaster файли]# vi test.txt Тестова лінія! [root@puppetmaster файли]# CD .. /проявляється/ Створіть тестовий клас для доставки файлу клієнту: [root@puppetmaster проявляється]# vi init.pp Тест класу { file { "/tmp/test.txt": забезпечити => присутність, група => «корінь», власник => «корінь», режим => "0644", джерело => «puppet:///test/test.txt» }
}
Запуск Ляльковода: [root@puppetmaster проявляється]# /etc/init.d/puppetmaster початок Переконайтеся, що порт 8140 увімкнений.
Встановлення Puppet client: [root@puppetclient ~]# yum --enablerepo="epel,epel-puppet" встановити ляльку
Модифікуйте хости та додайте наступні два записи: [root@puppetclient ~]# vi /etc/hosts 192.168.0.10 puppetmaster.leju.com лялька 192.168.0.100 puppetclient.leju.com
Налаштування ляльки: [root@puppetclient ~]# cd /etc/puppet/ [root@puppetclient лялька]# vi puppet.conf [головна] # Каталог журналу ляльок. # Значення за замовчуванням — '$vardir/log'. logdir = /var/log/puppet
# Де зберігаються PID-файли Puppet. # Значення за замовчуванням — '$vardir/run'. Rundir = /var/run/лялька
# Де зберігаються сертифікати SSL. # Значення за замовчуванням — '$confdir/ssl'. SSLDIR = $vardir/SSL
[агент] # Файл, у якому лялька зберігає список класів # пов'язана з отриманою конфігурацією. Можна завантажити # окремий виконуваний файл '''puppet'' за допомогою ''--loadclasses'' # варіант. # Значення за замовчуванням — '$confdir/classes.txt'. classfile = $vardir/classes.txt
# Де лялька кешує локальну конфігурацію. An # розширення, що вказує на формат кешу, додається автоматично. # Значення за замовчуванням — '$confdir/localconfig'. localconfig = $vardir/localconfig
server = puppetmaster.leju.com звіт = правда слухати = правда
[root@puppetclient лялька]# vi namespaceauth.conf [лялькар] Дозвольте puppetmaster.leju.com дозволити *.leju.com
[root@puppetclient лялька]# vi auth.conf Додати allow * до останнього рядка ...... Шлях / Підтвердження будь-якого дозволити *
[root@puppetclient лялька]# CD Страти ляльку: [root@puppetclient ~]# лялька --noop --тест --trace --debug Якщо Puppet Master не встановлює: autosign=true, це потрібно виконати у Puppet Master: [root@puppetmaster ~]# Сертифікат ляльки -L puppetclient.leju.com [root@puppetmaster ~]# Сертифікат ляльки -S puppetclient.leju.com Підписуйте puppetclient.leju.com ось так. Потім повертайтеся до клієнта для виконання тут: [root@puppetclient ~]# лялька --noop --тест --trace --debug Join --noop, конфігурація насправді не буде застосована до клієнта, переважно використовується для тестування, щоб перевірити наявність помилок у друкованому виданні, і виконати без помилок: [root@puppetclient ~]# лялька --тест --trace --debug
Перегляньте документ: [root@puppetclient ~]# ll /tmp/ всього 8 -rw-r--r-- 1 кореневий корінь 11 лютого 25 22:35 test.txt Документ видано.
Також можна проштовхнути Puppet Master: [root@puppetmaster ~]# Puppet Kick -D --ведучий puppetclient.leju.com Тригерні puppetclient.leju.com Отримання статусу статус — це успіх puppetclient.leju.com закінчили з кодом виходу 0 Завершено Повернення 0 означає, що маріонетка на клієнті була успішно активована.
Встановіть ляльку на автоматичний старт: chkconfig --рівень 2345 puppet увімкнено
Модифікувати лялькаря для використання Passenger Passenger — це розширення Apache 2.x для запуску рейок або рейкових застосувань в Apache. puppetmaster використовує WEBrick для надання файлових сервісів за замовчуванням, якщо у вас багато puppet-клієнтів, продуктивність файлових сервісів Puppetmaster буде низькою, щоб зробити Puppetmaster більш надійним, тому використовуйте Apache для надання файлових сервісів.
Інсталяція: [root@puppetmaster ~]# yum install httpd httpd-devel ruby-devel rubygems Пасажирський 2.2.2 RHEL5 працює нормально. Add foreman.repo repository: [root@puppetmaster ~]# vi /etc/yum.repos.d/foreman.repo [бригадир] name=Репозиторій стабільності Foreman baseurl=http://yum.theforeman.org/stable gpgcheck=0 увімкнено=1 [root@puppetmaster ~]# yum install rubygem-passenger-2.2.2-1 [root@puppetmaster ~]# rubygem-rack-1.0.1-1 [root@puppetmaster ~]# passenger-install-apache2-module
Встановлення SSL-модуля Apache: [root@puppetmaster ~]# yum install mod_ssl
Щоб налаштувати додаток Puppet rack: mkdir -p /тощо/лялька/стійка/puppetmasterd/ mkdir /etc/puppet/rack/puppetmasterd/public /etc/puppet/rack/puppetmasterd/tmp cp /usr/share/puppet/ext/rack/files/apache2.conf /etc/httpd/conf.d/puppetmasterd.conf cp /usr/share/puppet/ext/rack/files/config.ru /etc/puppet/rack/puppetmasterd/ chown puppet /etc/puppet/rack/puppetmasterd/config.ru
[root@puppetmaster ~]# vi /etc/httpd/conf.d/passenger.conf LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.2/ext/apache2/mod_passenger.so PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.2 ПасажирRuby /usr/bin/ruby Пасажир MaxPoolSize 30 Пасажирський басейнБезповільний час 1500 Пасажир МаксПросить 1000 PassengerStatThrottleRate 120 RackAutoDetect вимкнено RailsAutoDetect Off
[root@puppetmaster ~]# vi /etc/httpd/conf.d/puppetmasterd.conf # Ви, мабуть, хочете налаштувати ці налаштування ПасажирВисокоПродуктивність увімкнена ПасажирMaxPoolРозмір 12 Пасажирський басейнБезповільний час 1500 # Пасажир МаксПросить 1000 PassengerStatThrottleRate 120 RackAutoDetect вимкнено RailsAutoDetect Off
Слухай 8140
<VirtualHost *:8140> SSLEngine увімкнено SSLProtocol -ALL +SSLv3 +TLSv1 SSLCipherSuite ВСІ:! ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP
SSLCertificateFile /var/lib/puppet/ssl/certs/puppetmaster.leju.com.pem SSLCertificateKeyFile /var/lib/puppet/ssl/private_keys/puppetmaster.leju.com.pem SSLCertificateChainFile /var/lib/puppet/ssl/ca/ca_crt.pem SSLCACertificateFile /var/lib/puppet/ssl/ca/ca_crt.pem # Якщо Apache скаржиться на недійсні підписи на CRL, можна спробувати вимкнути # Перевірка CRL, коментуючи наступний рядок, але це не рекомендується. SSLCARevocationFile /var/lib/puppet/ssl/ca/ca_crl.pem SSLVerifyClient опціональна SSLVerifyDepth 1 SSLOptions +StdEnvVars
# Наступні заголовки клієнтів дозволяють працювати з Pound однакову конфігурацію. RequestHeader set X-SSL-Subject %{SSL_CLIENT_S_DN}e RequestHeader set X-Client-DN %{SSL_CLIENT_S_DN}e RequestHeader set X-Client-Verify %{SSL_CLIENT_VERIFY}e
DocumentRoot /etc/puppet/rack/puppetmasterd/public/ RackBaseURI / <Каталог /тощо/лялька/стійка/ляльковий майстер/> Опції Відсутні ДозволятиПерезарайти Жодного Наказ дозволити, заборонити дозволяйте від усіх </Directory> </VirtualHost>
Змініть конфігураційний файл puppetmaster, додавши такі два рядки: [root@puppetmaster ~]# vi /etc/puppet/puppet.conf [майстер] ssl_client_header = SSL_CLIENT_S_DN ssl_client_verify_header = SSL_CLIENT_VERIFY
Модифікувати /etc/sysconfig/puppetmaster: [root@puppetmaster ~]# vi /etc/sysconfig/puppetmaster # Додайте наступний рядок наприкінці: PUPPETMASTER_EXTRA_OPTS="--сховище звітів" Якщо потрібно звітувати і перед майстром, і перед ляльковою панеллю, додайте наступний рядок: PUPPETMASTER_EXTRA_OPTS="--звітує магазин, майстер, puppet_dashboard"
Зупиніть службу ляльковода і розпочніть службу апачів: [root@puppetmaster ~]# /etc/init.d/puppetmaster stop [root@puppetmaster ~]# /etc/init.d/httpd start
Завантаження не запускає сервіс puppetmaster, завантаження запускає httpd-сервіс: [root@puppetmaster ~]# chkconfig --рівень 2345 Puppetmaster вимкнено [root@puppetmaster ~]# chkconfig --level 2345 httpd on
Переконайтеся, що порт 8140 увімкнений: [root@puppetmaster ~]# netstat -tunlp |grep 8140 tcp 0 0 :::8140 :::* СЛУХАТИ 9834/httpd
Перевірте на стороні клієнта, чи надруковано журнал помилок: [root@puppetclient ~]# лялька --тест --trace --debug |