Puppet сервер установка и настройка

2 июня, 2013 | от | gnu/linux, opensuse

Июн
02

Некоторое время назад список серверов у меня в закладках перевалил за отметку в 200. По мере увеличения количества серверов развертывание любой новой конфигурации или установка новых пакетов, приводит к трате огромного количества времени. Так я решил использовать puppet.
Puppet (англ. марионетка) — кроссплатформенное клиент-серверное приложение, которое позволяет централизованно управлять конфигурацией операционных систем и программ, установленных на нескольких компьютерах. Puppet написан на языке программирования Ruby.

Еще говорят, что puppet это система удаленного управления конфигурациями, наиболее известными представителями которых являются открытые системы Cfengine и Puppet.

Ознакомившись с отзывами я решил использовать puppet.

Puppet сервер установка и настройка:
Установка puppet-сервера:
Установим puppet-server на OpenSuSE 11.4:

zypper in puppet-server

Изменим имя сервера на puppet:
/etc/HOSTNAME:

puppet
hostname puppet

DNS запись должна резолвиться на 127.0.0.2
cat /etc/hosts:

127.0.0.2 puppet.site puppet

Дадим права для пользователя puppet:

chown -R puppet.puppet /var/lib/puppet/

Запустим сервис Puppet Master:

rcpuppetmasterd start

Добавим запуск puppet демона в автозагрузку:

chkconfig -a puppetmasterd

Настройка puppet-сервера:
Определим директорию, где будут храниться файлы, которые puppet-server будет передавать на машины-клиенты в манифестах типа file.

vim /etc/puppet/fileserver
[files]
path /etc/puppet/files
allow *
mkdir /etc/puppet/files
chown -R puppet:puppet /etc/puppet/files

Создадим файл любого содержания для развертывания и тестирования на клиентах

touch /etc/puppet/files/puppettesting

Перезагрузим puppet сервер:

rcpuppetmasterd restart

Puppet использует собственный язык описания конечного состояния операционной системы, с помощью которого сисадмин указывает то, к какому виду должны быть приведены компоненты ОС, чтобы она достигла желаемого состояния. Под состоянием может подразумеваться наличие определенного файла, папки, запущенных сервисов установленных пакетов, обновлений и другое. Все настройки состояний описываются в файлах или манифестах, которые расположены в каталоге: /etc/puppet/manifests. Эти файлы имею имена типа *.pp.

Создадим простейший манифест:
/etc/puppet/manifests/1.file.pp:

file { '/tmp/puppettesting' :
source => 'puppet:///files/puppettesting',
}

Для применения даннного манифеста:
puppet apply 1.file.pp

Установка и настройка клиента puppet:

zypper in puppet

Дадим права puppet пользователю:

chown -R puppet.puppet /var/lib/puppet/

Для установки связи с puppet-сервером puppet-клиент посылает запрос на подтверждение сертификата, после того, как на сервере будет подтвержден этот запрос, puppet клиент начнет использовать манифесты предназначенные для него. Пошлем запрос на подтверждение сертификата:

puppetd --test

На сервере мы можем увидеть какие запросы на подтверждение ожидают:

puppetca --list
"puppet-client.localdomain" (B5:12:69:63:DE:19:E9:75:32:2B:AA:74:06:F6:8E:8A)

Подтверждаем:

puppetca --sign "puppet-client.localdomain"

Самое время рассмотреть простейшие примеры создание манифестов:
создадим файл /etc/puppet/manifests/site.pp:

node default {
        file { '/tmp/puppettesting' :
                source => 'puppet:///files/puppettesting',
                }
        service { 'ntp' :
                ensure => running,
                enable => true,
                }
        package { 'htop' :
                ensure => installed,
        }
}

default - применять для всех клиентов
file - эта секция говорит создать или перезаписать файл /tmp/puppettesting который находится на сервере в каталоге /etc/puppet/files
service: проверить запущен ли сервис, если не запущен, то запустить его, а также добавить в автозагрузку
package: проверить установлен ли на клиенте пакет htop и если нет, то установить его.

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

puppetd --test

Как видим на клиенте был добавлен ntp в автозагрузку, запущен ntp демон, установлен пакет htop, а также скопирован файл puppettesting в директорию /tmp/

info: Caching catalog for puppet-client.localdomain
info: Applying configuration version '1370163660'
notice: /Stage[main]//Node[default]/Service[ntp]/ensure: ensure changed 'stopped' to 'running'
notice: /Stage[main]//Node[default]/Package[htop]/ensure: created
notice: /Stage[main]//Node[default]/File[/tmp/puppettesting]/ensure: defined content as '{md5}f2171ac69ba86781bea2b7c95d1c8e67'
notice: Finished catalog run in 3.95 seconds

В следующей статье я опишу более сложные примеры создания манифестов и web-интерфейс puppet-dashboard.

Популярные типы ресурсов Puppet
cron — управление заданиями cron
exec — запуск скриптов и команд
file — управление файлами
filebucket — резервное копирование файлов
group — управление группами
host — управление записями в файле /etc/hosts
interface — конфигурирование сетевых интерфейсов
mount — монтирование файловых систем
notify — посылка сообщения в лог-файл Puppet
package — управление пакетами
service — управление сервисами
sshkey — управление ключами SSH
tidy — удаление файлов в зависимости от условий
user — управление пользователями
zones — управление зонами Solaris

Об авторе

Оставить комментарий