FastNetMon

Tuesday 22 December 2009

Использование Puppet для управления конфигурациями

Сервер конфигураций

Подключаем Epel: http://phpsuxx.blogspot.com/2009/03/centos-rhel.html

Ставим пакет:
yum install -y puppet-server


Итого, сервер puppet имеет следующий набор конфигов:

ls /etc/puppet/
fileserver.conf manifests puppet.conf


Сразу можно оценить поистине ОГРОМНЫЙ набор конфигов:

ls -l /usr/lib/ruby/site_ruby/1.8/puppet/provider
augeas host naginator.rb selmodule
computer ldap.rb nameservice service
confine macauthorization nameservice.rb ssh_authorized_key
confine_collection.rb mailalias package sshkey
confine.rb maillist package.rb user
confiner.rb mcx parsedfile.rb zfs
cron mount port zone
group mount.rb selboolean zpool


Создаем стандартный конфиг (Now we'll create the site.pp manifest which is the master manifest. Puppet will search for a manifest by this name by default. ):
vi /etc/puppet/manifests/site.pp


А теперь сделаем финт ушами - будем ставить sudo посредством puppet. Для этого в выше указанынй файл забиваем следующее:

package {
sudo:
ensure => latest
}


Запускаем сервер (автоматически он в автозапуск не прописывается):

/etc/init.d/puppetmaster start


Добавляем сервер в автозапуск:

chkconfig puppetmaster on


Открываем в фаерволле доступ к Puppet:
iptables -A INPUT -p tcp --dport 8140 -j ACCEPT


Сохраняем настройки фаерволла:
/etc/init.d/iptables save


Кстати, если у Вас очень много машин, то не лишним будет запроксировать Puppet посредством Nginx, как это сделать, описывается здесь. А если хотите использовать Passenger / Mongrel, то прошу сюда: http://docs.puppetlabs.com/guides/scaling.html

Клиент

Подключаем Epel: http://phpsuxx.blogspot.com/2009/03/centos-rhel.html

yum install puppet -y


Либо, если клиентская машина на Debian:
apt-get install puppet -y


Далее в случае Debian необходимо убрать Puppet из автозагрузки:
update-rc.d -f puppet remove
/etc/init.d/puppet stop


Клиент имеет всего-лишь один конфиг-файл:

ls /etc/puppet/
puppet.conf


Открываем конфиг файл:

vi /etc/puppet/puppet.conf


Теперь в блок [puppetd] добавляем следующее (это адрес нашего puppet сервера):

server=puppet.server.ru


Теперь запускаем команду тестирования конфига:

puppetd --verbose --test
warning: peer certificate won't be verified in this SSL session
notice: Did not receive certificate
notice: Set to run 'one time'; exiting with no certificate


Есть еще вариант запуска без демонизации (в обычном случае puppet запускает своего демона, а onetime запрещает ему это делать):
puppetd --verbose --test --onetime


Теперь сертификат клиентской машинки будет отослан на сервер и нам необходимо сходить на сервер и посмотреть, что это произошло успешно:
puppetca --list
client.domain.ru


Теперь нам необходимо его подписать (опять же на сервере):

puppetca --sign client.domain.ru
Signed client.domain.ru


Возвращаемся на клиента:

puppetd --verbose --test


В ответ мы должны получить следующее:
warning: peer certificate won't be verified in this SSL session
notice: Got signed certificate
info: No classes to store
info: Caching catalog at /var/lib/puppet/localconfig.yaml
notice: Starting catalog run
notice: //Package[sudo]/ensure: created
notice: Finished catalog run in 10.89 seconds


Ну вот и все:
sudo был установлен:

rpm -qa | grep sudo
sudo-1.6.9p17-5.el5


Что еще сказать - это мегасупер штука, обеспечивающая ОГРОМНУЮ экономию времени на деплой систем :)

Вопросы

1. Можно ли использовать Puppet клиент на сервере, где установлен Puppet сервер? Да, можно, все будет отлично работать.

Основано на: http://habrahabr.ru/blogs/linux/68532/ а вот и список всех "контроллеров" (для управления различными частями ОС) и их возможностей: http://reductivelabs.com/trac/puppet/wiki/TypeReference#package

No comments :

Post a Comment

Note: only a member of this blog may post a comment.