Как установить и настроить Puppet на CentOS
В качестве примера используется Linux CentOS 7.
Подготовка сервера
Заходим в систему под суперпользователем:
$ sudo su |
Обновляем список пакетов:
# yum update -y |
Устанавливаем ntp для возможности синхронизировать время:
# yum install ntp -y |
Устанавливаем часовой пояс (у меня московское время) и синхронизируем его с сервером времени:
# cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime; ntpdate ru.pool.ntp.org |
Создаем задание в cron для автоматической синхронизации времени каждый день в 00:00:
# mkdir -p /var/cron/tabs && echo ‘0 0 * * * /usr/sbin/ntpdate ru.pool.ntp.org ‘ >> /var/cron/tabs/crontab && crontab /var/cron/tabs/crontab && crontab -l |
Задаем сетевой интерфейс для доверенной зоны брандмауэра:
# firewall-cmd —zone=trusted —change-interface=ens32 |
* ens32 — имя сетевого интерфейса (список доступен командой ip addr ).
Устанавливаем доверенную зону брандмауэра по умолчанию:
# firewall-cmd —set-default-zone=trusted |
Puppet чувствителен к именам узлов, поэтому задаем имена сервера и тестового клиента в файле hosts:
# vi /etc/hosts |
192.168.166.155 puppet-srv.remontka.local 192.168.166.156 puppet-cl.remontka.local |
Также зададим имя нашего сервера:
# vi /etc/hostname |
puppet-srv.remontka.local |
Установка и настройка Puppet
Подключаем репозиторий:
# rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm |
Устанавливаем Puppet:
# yum install -y puppet-server |
Разрешаем автозапуск puppet-сервера:
# systemctl enable puppetmaster.service |
По умолчанию, puppet настроен для оптимальной работы. Единственное, что мы сделаем, включим автоматическое подтверждение сертификатов от клиентов:
# vi /etc/puppet/puppet.conf |
[main] … autosign = true … |
Конфигурационные файлы правил в puppet называются манифестами. Удобнее делить правила по различным файлам. Для этого отредактируем основной манифест-файл:
# vi /etc/puppet/manifests/site.pp |
import ‘nodes/*.pp’ |
* Данная строчка означает, что мы будем подгружать все файлы с расширением .pp из каталога /etc/puppet/manifests/nodes
Создаем каталог nodes:
# mkdir /etc/puppet/manifests/nodes |
В качестве теста, создадим первое правило:
# vi /etc/puppet/manifests/nodes/files.pp |
file { «/tmp/hello-file»: replace => «no», owner => «root», group => «wheel», ensure => «present», content => «From Puppetn», mode => 644, } |
* Правило создаст файл hello-file, если его нет, в каталоге /tmp. Задаст ему владельца root и группу-владельца wheel. Добавит в него текст «From Puppet» и задаст права 644.
Запускаем службу puppet:
# systemctl start puppetmaster.service |
Установка агентов
CentOS 7
Заходим в систему под суперпользователем:
$ sudo su |
Обновляем список пакетов:
# yum update -y |
Устанавливаем ntp для возможности синхронизировать время:
# yum install ntp -y |
Устанавливаем часовой пояс (у меня московское время) и синхронизируем его с сервером времени:
# cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime; ntpdate ru.pool.ntp.org |
Задаем имя сервера puppet в файле hosts:
# vi /etc/hosts |
192.168.166.155 puppet-srv.remontka.local |
Также зададим имя клиента:
# vi /etc/hostname |
puppet-cl.remontka.local |
Подключаем репозиторий:
# rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm |
Устанавливаем puppet:
# yum install -y puppet |
Редактируем конфигурационный файл puppet:
# vi /etc/puppet/puppet.conf |
[agent] … server=puppet-srv.remontka.local certname=puppet-cl.remontka.local … |
Запускаем puppet:
# systemctl start puppet.service |
Проверяем подключение клиента к серверу:
# puppet agent —server=puppet-srv.remontka.local —test —debug |
Если вы все правильно настроили, результатом выполнения данной команды будет создание файла /tmp/hello-file
Удаление сертификатов
Иногда необходимо удалить сертификат. Для этого сначала выполняем команду на сервере:
# puppet cert clean puppet-cl.remontka.local |
Затем на клиенте:
# rm -rf /var/lib/puppet/ssl/* |
Примеры манифестов
Задает права и владельца для файла /etc/passwd:
file { «/etc/passwd»: owner => «root», group => «wheel», mode => 664, } |
Устанавливает последнюю версию пакета samba:
package { «samba»: ensure => latest } |