How-to Інсталяція Puppet на CentOS

Привіт.
Хочу написати про чудовий продук Puppet.
З wikipedia :
" Puppet is an open source configuration management tool. It is written in Ruby and released under the GPL until version 2.7.0 and the Apache 2.0 license after that.[1]


Puppet is a tool designed to manage the configuration of Unix-like and Microsoft Windows systems declaratively. In the Puppet manifests, the user describes system resource and resource state either in Puppet or Ruby DSL (domain-specific language). Puppet discovers the system information via Facter and compiles the Puppet manifests into system specific catalog containing resources and resource dependency which is applied against the target systems and any actions taken to remediate the system to the desired state will be reported..."

Наразі працюю з ним і пишу деякі маніфести, зустрівся з ним уже проінстальованим, а коли а на днях захотів поставити для себе - отримати сервер  "Все в одному"



Почнемо:
Система: CentOS, x86
Hostname puppet
Інсталяція клієнтської  (puppet ) і  серверної частини (puppetmaster) на одному і тому ж пк.

Крок 1:
Інсталяція самої системи та потрібних вам додатків.
Крок 2:
Створення  додатково конфіга для  yum :
#/etc/yum.repos.d/dlutter.repo
#http://people.redhat.com/dlutter/yum/dlutter.repo
#
#
[dlutter-rhel5]
name=Unsupported RHEL5 packages (lutter)
baseurl=http://people.redhat.com/dlutter/yum/rhel/5/$basearch/
enabled=0
gpgcheck=0

[dlutter-rhel4]
name=Unsupported RHEL4 packages (lutter)
baseurl=http://people.redhat.com/dlutter/yum/rhel/4/$basearch/
enabled=0
gpgcheck=0

[dlutter-fedora]
name=Additional Fedora packages (lutter)
baseurl=http://people.redhat.com/dlutter/yum/fedora/$releasever/$basearch/
enabled=0
gpgcheck=0

[dlutter-fedora-development]
name=Additional Fedora packages (lutter)
baseurl=http://people.redhat.com/dlutter/yum/fedora/development/$basearch/
enabled=0
gpgcheck=0

[dlutter-source]
name=Sources for additional test packages (lutter)
baseurl=http://people.redhat.com/dlutter/yum/SRPMS/
enabled=0
gpgcheck=0
Варто звернути увагу на такі опції
enabled=0;-- ввиключено/включено
gpgcheck=0 -- неперевіряти / перевіряти

Крок 3:
Інсталяція потрібних пакетів:
Серверну частину:
yum install puppet-server ruby-rdoc
Клієнтську:
yum install puppet ruby-rdoc

Крок 4:
Запуск серверної частини puppetmaster
/etc/init.d/puppetmaster start

Та добавлення його до австарту
chkconfig 345 on puppetmaster on

Крок 5:
Налаштування конфігураційних файлів (використання модулів):

/etc/puppet/
|-- fileserver.conf
|-- manifests
|   |-- modules.pp
|   |-- nodes.pp
|   `-- site.pp
|-- modules
|   |-- arch
|   |   |-- files
|   |   |   `-- sudoers
|   |   `-- manifests
|   |       `-- init.pp
|   |-- httpd
|   |   |-- files
|   |   |   `-- sudoers
|   |   `-- manifests
|   |       `-- init.pp
|   |-- mc
|   |   |-- files
|   |   |   `-- sudoers
|   |   `-- manifests
|   |       `-- init.pp
|   `-- sudo
|       |-- files
|       |   `-- sudoers
|       `-- manifests
|           `-- init.pp
|-- puppet.conf
|-- puppetca.conf -> puppet.conf
`-- puppetmasterd.conf -> puppet.conf



/etc/puppet/puppet.conf
#/etc/puppet/puppet.conf
#
[main] 

vardir = /var/lib/puppet
logdir = /var/log/puppet
rundir = /var/run/puppet
ssldir = $vardir/ssl


[puppetd]
server = puppet
classfile = $vardir/classes.txt
localconfig = $vardir/localconfig


[puppetmasterd]
autosign = true



Важлива опція autosign = true автоматичне підлючення клієнтських puppet.

/etc/puppet/manifests/modules.pp
#/etc/puppet/manifests/modules.pp
#
import "sudo"
import "httpd"
import "mc"


/etc/puppet/manifests/nodes.pp
#/etc/puppet/manifests/nodes.pp
#
node basenode {
  include sudo
  include mc
  include arch
}

node 'lamp' {
  include sudo
}


node 'lamp.dolenet.com' {
    include sudo
    include httpd
    include arch
}



/etc/puppet/manifests/site.pp
#/etc/puppet/manifests/site.pp
#
$server = "puppet"


import "modules"
import "nodes"


node default {
  include sudo
  include mc
  include arch
}

Та й сама модулна  схема  така:
|-- modules

|   |-- arch

|   |   |-- files

|   |   |   `-- sudoers

|   |   `-- manifests

|   |       `-- init.pp

Та зразок манфісту по інсталяціїї архіваторів:
#/etc/puppet/modules/arch/manifests/init.pp 
#
class arch {
  package { "arch":
  name   => ["unrar","unzip","rar","zip","p7zip","p7zip-plugins"],
  ensure => installed;
  }
}

Якщо прослідкувати по ключовуму слову "arch", можна зрозуміти до кінця всю схему.

І решта маніфестів:
#/etc/puppet/modules/httpd/manifests/init.pp 
#
class httpd {
    package { "httpd":
        ensure => installed,
  }
  
  service { "httpd":
  ensure => running,
  enable => true,
  require  => Package["httpd"],
   }
}

puppet-client
Основний момент, що  puppet-client має працювати дивлячись від ваишх задач (початкова інсталляція софта: puppet-client - вимкнутий і запущений вам разово або постійне підтримання сервера тобто він добавлений в автозагрузку)

Тестування маніфестів:
puppetd  --server puppet  --verbose --debug --onetime --no-daemonize  --waitforcert  60 --noop --test 
puppet test.pp

Проблеми і рішення
* При роботі з puppet  можлива проблема з сертифікатами, рішення наступні:
1) Видалити сертифікати у puppet-client з /var/lib/puppet/ssl.
2) Або в puppetmaster:

puppetca --list --all
puppetca --clean YOUSERVERNAME

* Коли сервер - кліент не резолвяться через ДНС, варто добавити їх імена у /etc/hostна обидва пк.

Решту можливостей puppet  ви можете отримати з офф. сайту
Перших кілька днів, я до нього ставився стримано, тепер подобається.

Надіюсь і вам теж адже за витрачених 1-2 дня на маніфест ви потім отримуєте необмежену кількість серверів, які піднімаються за хвилини.






Коментарі