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

Вступление

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

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

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

Предпосылки

Чтобы следовать этому руководству, вы должны иметь root или суперпользовательский доступ ко всем серверам, с которыми вы хотите использовать Puppet. You will also be required to create a new Ubuntu 14.04 server to act as the Puppet master server. Если у вас нет существующей серверной инфраструктуры, смело воссоздайте пример инфраструктуры (описанной ниже), следуя обязательному руководству по настройке DNS.

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

  • Private Network DNS: Необходимо настроить прямой и обратный DNS, и каждый сервер должен иметь уникальное имя хоста. Вот руководство поconfigure your own private network DNS server. Если у вас не настроен DNS, вы должны использовать файлhosts для разрешения имен. Мы предполагаем, что вы будете использовать вашу частную сеть для связи в вашей инфраструктуре.

  • Firewall Open Ports: Мастер Puppet должен быть доступен через порт 8140. Если ваш брандмауэр слишком строгий, ознакомьтесь с этимUFW tutorial, чтобы узнать, как разрешить входящие запросы на порт 8140.

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

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

Hostname Role Частное полное доменное имя

host1

Общий сервер Ubuntu 14.04

host1.nyc3.example.com

host2

Общий сервер Ubuntu 14.04

host2.nyc3.example.com

ns1

Первичный сервер имен

ns1.nyc3.example.com

ns2

Вторичный сервер имен

ns2.nyc3.example.com

Агент Puppet будет установлен на всех этих хостах. На эти хосты будут ссылаться их частные сетевые интерфейсы, которые сопоставляются с поддоменом «.nyc3.example.com» в DNS. Это та же инфраструктура, которая описана в предварительном руководстве:How To Configure BIND as a Private Network DNS Server on Ubuntu 14.04.

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

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

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

Добавьте свою частную сеть в свой DNS со следующими данными:

Hostname Role Частное полное доменное имя

кукольный

Кукловод

puppet.nyc3.example.com

Если вы только что настроили DNS и не знаете, как включить новые хосты, обратитесь к разделуMaintaining DNS Records руководства по DNS. По сути, вам нужно добавить записи «A» и «PTR» и позволить новому хосту выполнять рекурсивные запросы. Кроме того, убедитесь, что вы настроили свой поисковый домен, чтобы ваши серверы могли использовать короткие имена хостов для поиска друг друга.

[.Примечание]##

Note: В этом руководстве предполагается, что имя хоста вашего хозяина Puppet - «puppet». Если вы используете другое имя, вам нужно будет сделать несколько отклонений от этого урока. В частности, вы должны указать имя хоста вашего мастера Puppet в файлах конфигурации узлов вашего агента Puppet, и вы должны заново сгенерировать SSL-сертификат вашего мастера Puppet, прежде чем подписывать какие-либо сертификаты агента. В противном случае вы получите эту ошибку:Error: Could not request certificate: The certificate retrieved from the master does not match the agent's private key..

Настройка этого параметра не рассматривается в этом руководстве.

Установить NTP

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

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

timedatectl list-timezones

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

sudo timedatectl set-timezone America/New_York

Установите NTP через apt-get с помощью этих команд:

sudo apt-get update
sudo apt-get -y install ntp

Обычной практикой является обновление конфигурации 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 excerpt

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 service ntp restart

Теперь, когда наш сервер показывает точное время, давайте установим программное обеспечение Puppet Server.

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

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

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

cd ~ && wget https://apt.puppetlabs.com/puppetlabs-release-pc1-trusty.deb
sudo dpkg -i puppetlabs-release-pc1-trusty.deb
sudo apt-get update

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

sudo apt-get -y install puppetserver

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

Настроить распределение памяти

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

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

sudo vi /etc/default/puppetserver

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

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

JAVA_ARGS="-Xms3g -Xmx3g"

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

Запустите Puppet Server

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

sudo service puppetserver restart

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

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

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

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

Программное обеспечение агента Puppet должно быть установлено на любом сервере, которым будет управлять мастер Puppet. В большинстве случаев это будет включать каждый сервер в вашей инфраструктуре. Как упоминалось во введении, агент Puppet может работать во всех основных дистрибутивах Linux, на некоторых платформах UNIX и Windows. Поскольку установка на каждой ОС несколько отличается, мы рассмотрим установку только на серверах Ubuntu 14.04. Инструкции по установке агента Puppet на серверах CentOS 7 можно найти вhere.

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

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

cd ~ && wget https://apt.puppetlabs.com/puppetlabs-release-pc1-trusty.deb
sudo dpkg -i puppetlabs-release-pc1-trusty.deb

Затем установите пакетpuppet-agent:

sudo apt-get update
sudo apt-get install puppet-agent

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

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

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

Не забудьте повторить этот раздел для всех ваших узлов агента Puppet.

[.note] #Note: Если это ваш первый агент 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 host1.nyc3.example.com

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

Output: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. В этом случае вы захотите отозвать сертификат хоста у мастера Puppet. Для этого вы можете использовать действиеclean:

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

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

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

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

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

Вы увидите список всех запросов. Подписанным запросам предшествует` and unsigned requests do not have the `.

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-адреса для определенного виртуального хоста. Или вы можете определить, что дистрибутив вашего сервера - «Ubuntu», поэтому вам следует запустить службуapache2 вместоhttpd. Это базовые примеры, но они должны дать вам представление о том, как можно использовать факты.

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

/opt/puppetlabs/bin/facter

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

Puppet использует специфичный для домена язык для описания конфигураций системы, и эти описания сохраняются в файлах, называемых «манифестами», которые имеют расширение .pp. Основной файл манифеста по умолчанию находитсяon your Puppet master server в/etc/puppetlabs/code/environments/production/manifests/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 /path/to/your/manifest/init.pp

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

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

Как вы помните, главный файл манифеста на мастере Puppet расположен в/etc/puppetlabs/code/environments/production/manifests/site.pp.

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

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

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

site.pp example

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: 128.131.192.11.

Укажите узел

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

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

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

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

site.pp example

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 не удалит созданные файлы. Если вы хотите, чтобы он удалял файлы, изменитеensure наabsent.

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

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

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

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

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

[.warning] #Warning: не используйте этот модуль в существующей установке Apache. Он очистит все конфигурации Apache, которые не управляются Puppet.
#

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

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

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

site.pp example

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