Некоторое время назад список серверов у меня в закладках перевалил за отметку в 200. По мере увеличения количества серверов развертывание любой новой конфигурации или установка новых пакетов, приводит к трате огромного количества времени. Так я решил использовать puppet.
Puppet (англ. марионетка) — кроссплатформенное клиент-серверное приложение, которое позволяет централизованно управлять конфигурацией операционных систем и программ, установленных на нескольких компьютерах. Puppet написан на языке программирования Ruby.
Еще говорят, что puppet это система удаленного управления конфигурациями, наиболее известными представителями которых являются открытые системы Cfengine и Puppet.
Ознакомившись с отзывами я решил использовать puppet.
Puppet сервер установка и настройка:
Установка puppet-сервера:
Установим puppet-server на OpenSuSE 11.4:
Изменим имя сервера на puppet:
/etc/HOSTNAME:
DNS запись должна резолвиться на 127.0.0.2
cat /etc/hosts:
Дадим права для пользователя puppet:
Запустим сервис Puppet Master:
Добавим запуск puppet демона в автозагрузку:
Настройка puppet-сервера:
Определим директорию, где будут храниться файлы, которые puppet-server будет передавать на машины-клиенты в манифестах типа file.
path /etc/puppet/files
allow *
Создадим файл любого содержания для развертывания и тестирования на клиентах
Перезагрузим puppet сервер:
Puppet использует собственный язык описания конечного состояния операционной системы, с помощью которого сисадмин указывает то, к какому виду должны быть приведены компоненты ОС, чтобы она достигла желаемого состояния. Под состоянием может подразумеваться наличие определенного файла, папки, запущенных сервисов установленных пакетов, обновлений и другое. Все настройки состояний описываются в файлах или манифестах, которые расположены в каталоге: /etc/puppet/manifests. Эти файлы имею имена типа *.pp.
Создадим простейший манифест:
/etc/puppet/manifests/1.file.pp:
source => 'puppet:///files/puppettesting',
}
Для применения даннного манифеста:
puppet apply 1.file.pp
Установка и настройка клиента puppet:
Дадим права puppet пользователю:
Для установки связи с puppet-сервером puppet-клиент посылает запрос на подтверждение сертификата, после того, как на сервере будет подтвержден этот запрос, puppet клиент начнет использовать манифесты предназначенные для него. Пошлем запрос на подтверждение сертификата:
На сервере мы можем увидеть какие запросы на подтверждение ожидают:
Подтверждаем:
Самое время рассмотреть простейшие примеры создание манифестов:
создадим файл /etc/puppet/manifests/site.pp:
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 и если нет, то установить его.
Для проверки запустим на клиенте:
Как видим на клиенте был добавлен ntp в автозагрузку, запущен ntp демон, установлен пакет htop, а также скопирован файл puppettesting в директорию /tmp/
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