Установка мастера и агента Puppet 4 в CentOS 7

Puppet – это инструмент для управления конфигурациями, который позволяет автоматизировать оркестровку, настройку и управление инфраструктурой серверов. Планирование конфигураций позволяет сэкономить много времени, поскольку инструмент берет на себя выполнение базовых задач.

Есть две версии Puppet: коммерческая Puppet Enterprise и Puppet с открытым исходным кодом. Puppet работает почти во всех дистрибутивах Linux, а также в UNIX и Windows.

Примечание: Аналогичное руководство для Ubuntu можно найти здесь.

Данное руководство поможет установить открытую версию Puppet 4 (агента и мастера) в CentOS 7. Мастер-сервер Puppet – это ведущий сервер, который управляет нодами – агентами Puppet.

Примечание: В руководстве используется пакет Puppet Server вместо Passenger (или любого другого runtime окружения).

Требования

  • Новый сервер CentOS 7 для мастера Puppet.
  • DNS частной сети (прямой и обратный).
  • Каждый сервер должен иметь уникальное имя хоста.
  • Настроенный брандмауэр: мастер Puppet должен быть доступен на порт 8140.

Инфраструктура имеет такой вид:

  • host1 – сервер CentOS 7
  • host2 – сервер CentOS 7
  • ns1 – первичный сервер имен
  • ns2 – вторичный сервер имен

Программное обеспечение агента нужно установить на все серверы.

Мастер-сервер Puppet

Настройка NTP

Мастер-сервер Puppet должен показывать правильное время, потому что он является ведущим сервером инфраструктуры, и во многом правильность настройки нод зависит от него. Для этого используйте NTP (Network Time Protocol).

Просмотрите доступные часовые пояса:

timedatectl list-timezones

На экране появится список доступных часовых поясов. Выберите нужный вам регион и часовой пояс, и установите эти данные с помощью этой команды:

sudo timedatectl set-timezone America/New_York

Примечание: Не забудьте заменить условные данные своими.

Установите NTP:

sudo yum -y install ntp

Синхронизируйте время с помощью команды ntpdate:

sudo ntpdate pool.ntp.org

Конфигурации NTP часто обновляют для поддержки пулов, которые географически ближе к NTP- серверу данного VPS. Откройте браузер и перейдите на NTP Pool Project. Выберите ближайший к вашему датацентру пул. В руководстве используется пул United States.

Откройте ntp.conf:

sudo vi /etc/ntp.conf

Добавьте серверы со страницы сайта NTP в начало файла, например:

server 0.us.pool.ntp.org
server 1.us.pool.ntp.org
server 2.us.pool.ntp.org
server 3.us.pool.ntp.org

Сохраните и закройте файл.

Перезапустите NTP:

sudo systemctl restart ntpd

Включите демон NTP:

sudo systemctl enable ntpd

Установка Puppet Server

Puppet Server – это программное обеспечение мастер-сервера Puppet.

Именно этот компонент передаёт настройки на ноды.

Включите официальный репозиторий Puppet Labs:

sudo rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm

Установите пакет puppetserver:

sudo yum -y install puppetserver

Настройка распределения памяти (опционально)

По умолчанию мастер Puppet использует 2 GB RAM. Этот параметр нужно настроить, учитывая объём свободной памяти мастер-сервера и количество нод в инфраструктуре.

Откройте /etc/sysconfig/puppetserver:

sudo vi /etc/sysconfig/puppetserver

Найдите строку JAVA_ARGS. Чтобы установить распределение памяти, используйте параметры -Xms и –Xmx. К примеру, чтобы установить 3 GB памяти, нужно изменить строку так:

JAVA_ARGS="-Xms3g -Xmx3g"

Сохраните и закройте файл.

Запуск Puppet Server

Запустите Puppet Server:

sudo systemctl start puppetserver

Включите сервис Puppet Server, чтобы программа автоматически загружалась вместе с сервером.

sudo systemctl enable puppetserver

Puppet Server работает, но пока не управляет нодами.

Установка агента Puppet

Puppet Agent – это программное обеспечение для нод, или агентов, которые будут подчиняться мастеру Puppet.

Примечание: Действия данного раздела нужно выполнить на всех серверах инфраструктуры.

Добавьте репозиторий Puppet Labs:

sudo rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm

Установите пакет puppet-agent:

sudo yum -y install puppet-agent

Запустите агент Puppet:

sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true

При первом запуске агент Puppet генерирует SSL-сертификат и отправляет запрос на подпись мастеру Puppet. После того как мастер подпишет этот сертификат, он сможет взаимодействовать и управлять данной нодой.

Примечание: Если это первый ваш агент Puppet, попробуйте подписать его сертификат, прежде чем добавлять остальные ноды, чтобы убедиться, что всё работает верно.

Подпись сертификата агента Puppet

Список запросов на подпись

Перейдите на мастер Puppet и запустите следующую команду, чтобы просмотреть список неподписанных сертификатов:

sudo /opt/puppetlabs/bin/puppet cert list

Если вы только что настроили первую ноду, в списке будет один запрос на подпись (имя хоста ноды будет отличаться):

"host1.nyc3.example.com" (SHA256) 15:90:C2:FB:ED:69:A4:F7:B1:87:0B:BF:F7:DD:B5:1C:33:F7:76:67:F3:F6:23:AE:07:4B:F6:E3:CC:04:11:4C

Если перед запросом нет символа +, значит, запрос не подписан.

Подпись сертификата

Чтобы подписать сертификат агента, используйте команду puppet cert sign и укажите имя хоста сертификата. Например:

sudo /opt/puppetlabs/bin/puppet cert sign host1.nyc3.example.com

Примечание: Вместо host1.nyc3.example.com укажите имя своего хоста.

Команда вернёт примерно такой вывод:

Notice: Signed certificate request for host1.nyc3.example.com
Notice: Removing file Puppet::SSL::CertificateRequest host1.nyc3.example.com at '/etc/puppetlabs/puppet/ssl/ca/requests/host1.nyc3.example.com.pem'

Теперь мастер Puppet может взаимодействовать и управлять нодой, чей сертификат он подписал.

Чтобы подписать все неподписанные сертификаты, используйте опцию –all:

sudo /opt/puppetlabs/bin/puppet cert sign --all

Отзыв сертификатов

Вы можете удалить ноду из инфраструктуры Puppet, или же пересобрать её, а затем снова добавить. Для этого нужно отозвать сертификат с мастера Puppet.

sudo /opt/puppetlabs/bin/puppet cert clean hostname

Примечание: Вместо hostname укажите имя хоста ноды, чей сертификат нужно отозвать.

Просмотр подписанных сертификатов

Чтобы просмотреть список всех подписанных и неподписанных сертификатов, введите:

sudo /opt/puppetlabs/bin/puppet cert list --all

Команда вернёт список, в котором подписанные сертификаты отмечены символом +.

+ "puppet"    (SHA256) 5A:71:E6:06:D8:0F:44:4D:70:F0:BE:51:72:15:97:68:D9:67:16:41:B0:38:9A:F2:B2:6C:BB:33:7E:0F:D4:53 (alt names: "DNS:puppet", "DNS:puppet.nyc3.example.com")
+ "host1.nyc3.example.com" (SHA256) F5:DC:68:24:63:E6:F1:9E:C5:FE:F5:1A:90:93:DF:19:F2:28:8B:D7:BD:D2:6A:83:07:BA:FE:24:11:24:54:6A
+ "host2.nyc3.example.com" (SHA256) CB:CB:CA:48:E0:DF:06:6A:7D:75:E6:CB:22:BE:35:5A:9A:B3:93:63:BF:F0:DB:F2:D8:E5:A6:27:10:71:78:DA
+ "ns2.nyc3.example.com" (SHA256) 58:47:79:8A:56:DD:06:39:52:1F:E3:A0:F0:16:ED:8D:40:17:40:76:C2:F0:4F:F3:0D:F9:B3:64:48:2E:F1:CF

Начало работы с Puppet

Данный раздел научит вас выполнять базовые операции Puppet.

Сбор фактов

Puppet собирает факты о нодах с помощью инструмента facter. Эта утилита по умолчанию собирает информацию, полезную для настройки системы (имена хостов, IP-адреса, ключи SSH и многое другое). Вы можете добавлять  пользовательские факты, которые не входят в набор по умолчанию.

Факты могут быть полезны во многих случаях. Например, можно разработать шаблон конфигурации сервера и автоматически добавлять соответствующий IP-адрес. Или же можно задать имя дистрибутива CentOS, и тогда система будет запускать сервис apache2 вместо httpd.

Чтобы просмотреть список фактов по умолчанию, введите:

/opt/puppetlabs/bin/facter

Главный манифест

Для описания конфигурации системы Puppet использует предметно-ориентированный язык, а эти описания сохраняет в так называемых манифестах (файлы с расширением .pp).

Главный манифест по умолчанию находится на мастере Puppet в /etc/puppetlabs/code/environments/production/manifests/site.pp. Замените этот файл:

sudo touch /etc/puppetlabs/code/environments/production/manifests/site.pp

Обратите внимание: на данный момент главный манифест пуст.

Выполнение главного манифеста

Агенты Puppet периодически (обычно – раз в 30 минут) сверяют настройки с мастером Puppet. При этом они отправляют мастеру свои факты, а также загружают текущий каталог – скомпилированный список ресурсов и желаемых состояний агента, которые определяются в главном манифесте. После этого нода попробует внести все необходимые изменения, чтобы достичь желаемого состояния. Этот цикл будет продолжаться до тех пор, пока мастер Puppet работает и может взаимодействовать с нодами.

Немедленная проверка агента

Кроме того, можно вручную инициировать проверку конкретного агента. Для этого запустите на необходимом агенте следующую команду:

/opt/puppetlabs/bin/puppet agent --test

Эта команда сверит текущие настройки агента с главным манифестом и вернёт примерно такой вывод:

Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
...
Info: Loading facts
Info: Caching catalog for host1
Info: Applying configuration version '1457389302'
Notice: /Stage[main]/Main/File[/tmp/example-ip]/ensure: defined content as '{md5}dd769ec60ea7d4f7146036670c6ac99f'
Notice: Applied catalog in 0.04 seconds

Разовые манифесты

Команда puppet apply позволяет выполнять манифесты, которые не имеют отношения к главному манифесту. Они применяются только к тому агенту, на котором была запущена команда. Например:

sudo /opt/puppetlabs/bin/puppet apply /path/to/your/manifest/init.pp

Это позволяет протестировать    новый манифест на одной ноде.

Пример манифеста

Откройте главный манифест. Перейдите на мастер и запустите:

sudo vi /etc/puppetlabs/code/environments/production/manifests/site.pp

Добавьте в него описание ресурса file:

file {'/tmp/example-ip':                                            # resource type file and filename

ensure  => present,                                               # make sure it exists
mode    => '0644',                                                # file permissions
content => "Here is my Public IP Address: ${ipaddress_eth0}.\n",  # ipaddress_eth0 fact

}

Сохраните и закройте файл.

Этот ресурс создаёт на всех нодах файл /tmp/example-ip с правами -rw-r–r– и добавляет в него внешний IP-адрес ноды.

Вы можете подождать, пока ноды проверят конфигурации на мастере, а можете инициировать проверку одной из нод  вручную с помощью команды puppet agent –test.

После этого запустите команду:

cat /tmp/example-ip

На экране появится:

Here is my Public IP Address: 128.131.192.11.

Объявление ноды

Чтобы определить ресурс для конкретных нод, добавьте в манифест node.

Отредактируйте site.pp на мастере:

sudo vi /etc/puppetlabs/code/environments/production/manifests/site.pp

Добавьте в файл:

node 'ns1', 'ns2' {    # applies to ns1 and ns2 nodes

file {'/tmp/dns':    # resource type file and filename

ensure => present, # make sure it exists
mode => '0644',
content => "Only DNS servers get this file.\n",

}

}
node default {}       # applies to nodes that aren't explicitly defined

Сохраните и закройте файл.

Теперь файл /tmp/dns будет создан на ns1 и ns2. Вы можете запустить тестирование этих нод с помощью puppet agent –test.

Если вы удалите ресурсы из манифеста, то созданные ранее файлы всё равно останутся. Чтобы Puppet удалял созданные файлы, замените ensure на absent.

Работа с модулями

Модули позволяют группировать задачи. Сообщество Puppet предлагает множество готовых модулей. Вы можете создавать и свои модули.

Попробуйте установить модуль puppetlabs-apache:

sudo /opt/puppetlabs/bin/puppet module install puppetlabs-apache

Важно! Не используйте этот модуль, если Apache уже установлен. Это повредит все настройки Apache, за которые не отвечает Puppet.

Отредактируйте  site.pp:

sudo vi /etc/puppetlabs/code/environments/production/manifests/site.pp

Добавьте в файл следующий код, чтобы установить Apache на host2:

node 'host2' {

class { 'apache': }             # use apache module
apache::vhost { 'example.com':  # define vhost resource

port    => '80',
docroot => '/var/www/html'

}

}
# node default {}       # uncomment this line if it doesn't already exist in your manifest

Сохраните и закройте файл. Во время следующей проверки конфигураций host2 Puppet установит пакет Apache, создаст виртуальный хост example.com, прослушивающий порт 80, и добавит корневой каталог /var/www/html.

Запустите команду на host2:

sudo /opt/puppetlabs/bin/puppet agent --test

После выполнения команды попробуйте открыть IP-адрес host2 в браузере. На экране должна появиться страница Apache.

Заключение

Теперь у вас есть базовая инфраструктура Puppet, которая состоит из мастера и нод.

Читайте также: Создание манифестов Puppet

Tags: , , ,

Добавить комментарий