Как установить и настроить 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.dmosk.local 192.168.166.156 puppet-cl.dmosk.local |
Также зададим имя нашего сервера:
# vi /etc/hostname |
puppet-srv.dmosk.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 Puppet\n", 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.dmosk.local |
Также зададим имя клиента:
# vi /etc/hostname |
puppet-cl.dmosk.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.dmosk.local certname=puppet-cl.dmosk.local ... |
Запускаем puppet:
# systemctl start puppet.service |
Проверяем подключение клиента к серверу:
# puppet agent --server=puppet-srv.dmosk.local --test --debug |
Если вы все правильно настроили, результатом выполнения данной команды будет создание файла /tmp/hello-file
Удаление сертификатов
Иногда необходимо удалить сертификат. Для этого сначала выполняем команду на сервере:
# puppet cert clean puppet-cl.dmosk.local |
Затем на клиенте:
# rm -rf /var/lib/puppet/ssl/* |
Примеры манифестов
Задает права и владельца для файла /etc/passwd:
file { "/etc/passwd": owner => "root", group => "wheel", mode => 664, }
|
Устанавливает последнюю версию пакета samba:
package { "samba": ensure => latest }
|