Как установить Puppet 4 в программе установки Master-Agent на CentOS 7

Вступление

Puppet из Puppet Labs - это инструмент управления конфигурацией, который помогает системным администраторам автоматизировать подготовку, настройку и управление инфраструктурой сервера. Заблаговременное планирование и использование инструментов управления конфигурациями, таких как Puppet, могут сократить время, затрачиваемое на повторение основных задач, и помочь обеспечить согласованность и точность ваших конфигураций в вашей инфраструктуре. Как только вы научитесь управлять своими серверами с помощью Puppet и других средств автоматизации, у вас будет больше свободного времени, которое можно использовать для улучшения других аспектов вашей настройки.

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

В этом уроке мы расскажем, как установить Puppet 4 с открытым исходным кодом в настройке агента / мастера на CentOS 7. В этой настройке главный сервер * Puppet *, на котором выполняется программное обеспечение сервера Puppet, может использоваться для управления всеми другими вашими серверами или узлами * агента Puppet *. Обратите внимание, что мы будем использовать пакет Puppet Server вместо Passenger или любой другой среды выполнения.

Предпосылки

Чтобы следовать этому руководству, вы должны иметь root или суперпользовательский доступ ко всем серверам, с которыми вы хотите использовать Puppet. * Вам также потребуется создать новый сервер CentOS 7, который будет выполнять роль главного сервера Puppet *. Если у вас нет существующей серверной инфраструктуры, не стесняйтесь воссоздать пример инфраструктуры (описанной ниже), следуя обязательному руководству по настройке DNS.

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

  • * Частная сеть DNS: * Необходимо настроить прямой и обратный DNS, и каждый сервер должен иметь уникальное имя хоста. Вот учебник по https://www.digitalocean.com/community/tutorials/how-to-configure-bind-as-a-private-network-dns-server-on-centos-7[configure своей собственной частной сети DNS-сервер. Если у вас не настроен DNS, вы должны использовать файл + hosts + для разрешения имен. Мы предполагаем, что вы будете использовать вашу частную сеть для связи в вашей инфраструктуре.

  • * Открытые порты брандмауэра: * Хозяин Puppet должен быть доступен на порту 8140. Если ваш брандмауэр слишком ограничен, ознакомьтесь с этим FirewallD Tutorial для Инструкция о том, как разрешить входящие запросы на порт 8140.

Пример инфраструктуры

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

Hostname Role Private FQDN

host1

Generic CentOS 7 server

host1.nyc3.example.com

host2

Generic CentOS 7 server

host2.nyc3.example.com

ns1

Primary nameserver

ns1.nyc3.example.com

ns2

Secondary nameserver

ns2.nyc3.example.com

Агент Puppet будет установлен на всех этих хостах. На эти хосты будут ссылаться их частные сетевые интерфейсы, которые сопоставляются с поддоменом «.nyc3.example.com» в DNS. Это та же инфраструктура, которая описана в обязательном учебном пособии: https://www.digitalocean.com/community/tutorials/how-to-configure-bind-as-a-private-network-dns-server-on-centos -7 [Как настроить BIND в качестве DNS-сервера частной сети в CentOS 7].

Когда у вас есть все необходимые условия, давайте перейдем к созданию главного сервера Puppet!

Создать главный сервер Puppet

Создайте новый * CentOS 7 * x64 сервер, используя «puppet» в качестве имени хоста. Требования к оборудованию зависят от того, сколько узлов агентов вы хотите управлять; два ядра ЦП и 1 ГБ памяти - это минимальное требование для управления несколькими узлами, но вам потребуется больше ресурсов, если ваша серверная инфраструктура больше. Сервер Puppet по умолчанию настроен на использование 2 ГБ оперативной памяти.

Hostname Role Private FQDN

puppet

Puppet master

puppet.nyc3.example.com

Если вы просто настроили свой DNS и не знаете, как включить новые хосты, обратитесь к https://www.digitalocean.com/community/tutorials/how-to-configure-bind-as-a-private-network-dns -server-on-centos-7 # maintenance-dns-records раздел [Ведение DNS-записей] учебного руководства по DNS. По сути, вам нужно добавить записи «A» и «PTR» и позволить новому хосту выполнять рекурсивные запросы. Кроме того, убедитесь, что вы настроили свой поисковый домен, чтобы ваши серверы могли использовать короткие имена хостов для поиска друг друга.

Установить NTP

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

Сначала посмотрите на доступные часовые пояса с этой командой:

timedatectl list-timezones

Это даст вам список часовых поясов, доступных для вашего сервера. Когда вы найдете настройку региона / часового пояса, подходящую для вашего сервера, установите ее с помощью этой команды (укажите предпочитаемый регион и часовой пояс):

sudo timedatectl set-timezone

Установите NTP через yum с помощью этой команды:

sudo yum -y install ntp

Выполните однократную временную синхронизацию с помощью команды + ntpdate +:

sudo ntpdate pool.ntp.org

Обычной практикой является обновление конфигурации NTP для использования «зон пулов», которые географически расположены ближе к вашему NTP-серверу. В веб-браузере перейдите на NTP Pool Project и найдите pool zone, которая географически закрывает используемый вами центр обработки данных. В нашем примере мы будем использовать пул Соединенных Штатов (http://www.pool.ntp.org/zone/us), поскольку наши серверы расположены в центре обработки данных в Нью-Йорке.

Откройте + ntp.conf + для редактирования:

sudo vi /etc/ntp.conf

Добавьте серверы времени со страницы проекта NTP Pool вверху файла (замените их серверами по вашему выбору):

/etc/ntp.conf выписка

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 Server - это программное обеспечение, которое работает на главном сервере Puppet. Это компонент, который передает конфигурации на другие ваши серверы, на которых будет работать программное обеспечение агента Puppet.

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

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

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

sudo yum -y install puppetserver

Теперь Puppet Server установлен на вашем главном сервере, но он еще не запущен.

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

По умолчанию Puppet Server настроен на использование 2 ГБ оперативной памяти. Вы должны настроить этот параметр в зависимости от того, сколько свободной памяти имеет ваш главный сервер и сколько узлов агента он будет управлять.

Сначала откройте + / etc / sysconfig / puppetserver + в вашем любимом текстовом редакторе. Мы будем использовать + vi +:

sudo vi /etc/sysconfig/puppetserver

Затем найдите строку + JAVA_ARGS + и используйте параметры + -Xms + и + -Xmx + для установки выделения памяти. Например, если вы хотите использовать 3 ГБ памяти, строка должна выглядеть следующим образом:

Выделение памяти

JAVA_ARGS="-Xms -Xmx"

Сохраните и выйдите, когда закончите.

Запустите Puppet Server

Теперь мы готовы запустить Puppet Server с помощью этой команды:

sudo systemctl start puppetserver

Затем включите Puppet Server, чтобы он запускался при загрузке вашего главного сервера:

sudo systemctl enable puppetserver

Puppet Server работает, но пока не управляет ни одним узлом агента. Давайте узнаем, как установить и добавить Puppet агентов!

Установите Puppet Agent

Программное обеспечение агента Puppet должно быть установлено на любом сервере, которым будет управлять мастер Puppet. В большинстве случаев это будет включать каждый сервер в вашей инфраструктуре. Как упоминалось во введении, агент Puppet может работать во всех основных дистрибутивах Linux, на некоторых платформах UNIX и Windows. Поскольку установка на каждой ОС немного отличается, мы рассмотрим установку только на серверах CentOS 7. Инструкции по установке агента Puppet на серверах Ubuntu 14.04 можно найти по адресу https://www.digitalocean.com/community/tutorials/how-to-install-puppet-4-in-a-master-agent-setup-on-ubuntu. -14-04 # установить-кукольный агент [здесь].

  • Выполните эти шаги на всех ваших агентских серверах. *

Включите официальный репозиторий 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 Master

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

Список текущих запросов сертификатов

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

sudo /opt/puppetlabs/bin/puppet cert list

Если вы просто настроили свой первый агентский узел, вы увидите один запрос. Это будет выглядеть примерно так, с именем узла агента:

Output:  "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 + с именем хоста сертификата, который вы хотите подписать. Например, чтобы подписать сертификат + host1.nyc3.example.com +, вы должны использовать следующую команду:

sudo /opt/puppetlabs/bin/puppet cert sign

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

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

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

Если вы хотите подписать все текущие запросы, используйте опцию + - all +, например:

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

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

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

sudo /opt/puppetlabs/bin/puppet cert clean

Связанные сертификаты указанного хоста будут удалены из Puppet.

Просмотреть все подписанные запросы

Если вы хотите просмотреть все запросы, подписанные и неподписанные, выполните следующую команду:

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

Вы увидите список всех запросов. Подписанным запросам предшествует `, а неподписанным запросам нет `.

Output:+ "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

Congrats! Теперь ваша инфраструктура готова к управлению Puppet!

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

Теперь, когда ваша инфраструктура настроена для управления с помощью Puppet, мы покажем вам, как использовать Puppet для выполнения нескольких основных задач.

Как собраны факты

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

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

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

/opt/puppetlabs/bin/facter

Основной файл манифеста

Puppet использует специфичный для домена язык для описания конфигураций системы, и эти описания сохраняются в файлах, называемых «манифестами», которые имеют расширение .pp. Основной файл манифеста по умолчанию находится * на вашем главном сервере Puppet * в + / etc / puppetlabs / code / environment / production / manifts / site.pp +. Давайте сейчас создадим файл-заполнитель:

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

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

Как выполняется главный манифест

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

Немедленное выполнение на конкретном агентском узле

Также можно инициировать проверку для конкретного узла агента вручную, выполнив следующую команду (для рассматриваемого узла агента):

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

Выполнение этого приведет к применению основного манифеста к агенту, выполняющему тест. Вы могли бы видеть вывод как следующее:

Output: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 + позволяет вам выполнять манифесты, не связанные с основным манифестом, по требованию. Он только применяет манифест к узлу, с которого вы запускаете apply. Вот пример:

sudo /opt/puppetlabs/bin/puppet apply

Запуск манифестов таким способом полезен, если вы хотите протестировать новый манифест на узле агента или если вы просто хотите запустить манифест один раз (например, инициализировать узел агента до желаемого состояния).

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

Как вы, возможно, помните, основной файл манифеста в мастере Puppet находится по адресу + / etc / puppetlabs / code / environment / production / manifest / site.pp +.

На главном сервере Puppet отредактируйте его сейчас:

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

Теперь добавьте следующие строки для описания файлового ресурса:

пример site.pp

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",  # note the ipaddress_eth0 fact
}

Теперь сохраните и выйдите. Встроенные комментарии должны объяснять ресурс, который мы определяем. Говоря простым языком, это гарантирует, что все узлы агентов будут иметь файл с разрешением + / tmp / example-ip + с разрешениями + + rw-r - r - + `, с содержимым, включающим публичный IP-адрес узла. ,

Вы можете либо подождать, пока агент автоматически зарегистрируется с мастером, либо запустить команду + puppet agent --test + (с одного из узлов вашего агента). Затем выполните следующую команду, чтобы напечатать файл:

cat /tmp/example-ip

Вы должны увидеть вывод, который выглядит следующим образом (с IP-адресом этого узла):

Output:Here is my Public IP Address: .

Укажите узел

Если вы хотите определить ресурс для определенных узлов, определите + узел в манифесте.

На мастере отредактируйте + site.pp +:

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

Теперь добавьте следующие строки:

пример 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

Сохранить и выйти.

Теперь Puppet будет гарантировать, что файл в + / tmp / dns + будет существовать в ns1 и ns2. Вы можете запустить команду + puppet agent --test (из ns1 или ns2), если вы не хотите ждать запланированного извлечения агента Puppet.

Обратите внимание, что если вы не определите ресурс, Puppet сделает все возможное, чтобы не трогать его. Поэтому, если вы удалите эти ресурсы из манифеста, Puppet не удалит созданные файлы. Если вы хотите, чтобы он удалял файлы, измените + sure + на + absent +.

Эти примеры не делают ничего полезного, но они доказывают, что Puppet работает правильно.

Использование модуля

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

На мастере Puppet установите модуль + puppetlabs-apache + из forgeapi:

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

Теперь отредактируйте + site.pp +:

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

Теперь добавьте следующие строки для установки Apache на host2:

пример site.pp

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

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

На * host2 * выполните следующую команду:

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

Вы должны увидеть кучу выходных данных, указывающих, что Apache устанавливается. По завершении откройте общедоступный IP-адрес host2 в веб-браузере. Вы должны увидеть страницу, которая обслуживается Apache.

Congrats! Вы использовали свой первый модуль Puppet!

Заключение

Теперь, когда у вас есть базовая установка агента / мастера Puppet, вы готовы узнать больше о том, как использовать Puppet для управления инфраструктурой вашего сервера. Ознакомьтесь со следующим учебником: Getting Started with Puppet Code: Manifests and Modules.

Related