Вступление
Puppet - это инструмент управления конфигурацией, который помогает системным администраторам автоматизировать предоставление, настройку и управление серверной инфраструктурой. Заблаговременное планирование и использование инструментов управления конфигурациями, таких как Puppet, могут сократить время, затрачиваемое на повторение основных задач, и помочь обеспечить согласованность и точность конфигураций в вашей инфраструктуре.
Puppet выпускается в двух вариантах: Puppet Enterprise и Puppet с открытым исходным кодом. Оба они работают в большинстве дистрибутивов Linux, на разных платформах UNIX и в Windows.
В этом руководстве мы покажем, как установить Puppet 4 с открытым исходным кодом в настройке master-agent в Ubuntu 16.04. В этой настройке главный сервер * Puppet *, на котором выполняется программное обеспечение сервера Puppet, может использоваться для управления всеми другими вашими серверами, называемыми узлами * агента Puppet *.
Предпосылки
Чтобы следовать этому руководству, вам понадобятся * три сервера Ubuntu 16.04 *, каждый с пользователем без полномочий root с привилегиями + sudo +
. Вы можете узнать больше о том, как настроить пользователя с привилегиями sudo, в нашей Initial Server Setup с Ubuntu 16.04 руководство.
Один кукловод
Один сервер будет * Хозяином Марионеток *. Мастер Puppet будет запускать Puppet Server, который требует значительных ресурсов и требует:
-
не менее 4 ГБ памяти
-
как минимум 2 ядра процессора
Для управления более крупными инфраструктурами мастеру Puppet потребуется больше ресурсов.
Два кукольных агента
Два других сервера будут * узлами агента Puppet *, управляемыми мастером Puppet. Мы назовем их + db1 +
и + web1 +
.
Когда эти три сервера на месте, вы готовы начать.
Шаг 1 - Настройка / etc / hosts
Главные серверы Puppet и узлы, которыми они управляют, должны иметь возможность взаимодействовать друг с другом. В большинстве случаев это будет достигнуто с помощью DNS, настроенного на внешнем размещенном сервисе или на автономных DNS-серверах, обслуживаемых как часть инфраструктуры.
DNS является собственной областью компетенции, однако, даже для размещенных сервисов, поэтому, чтобы сосредоточиться на основах самой Puppet и устранить потенциальную сложность в устранении неполадок во время обучения, в этом руководстве мы будем использовать `+ / etc / hosts + `вместо файла.
На каждой машине
На каждом компьютере отредактируйте файл + / etc / hosts +
. В конце файла укажите главный сервер Puppet следующим образом, заменив IP-адрес на your Мастер Puppet:
sudo nano /etc/hosts
/ и т.д. / хосты
. . .
puppet
. . .
Когда вы закончите, сохраните и выйдите.
Шаг 2 - Установка Puppet Server
Puppet Server - это программное обеспечение, которое передает конфигурацию от мастера Puppet к другим серверам. Он работает только на Хозяина Марионеток; другие хосты будут запускать Puppet Agent.
Мы включим официальный репозиторий Puppet Labs с помощью следующих команд:
curl -O https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
sudo dpkg -i puppetlabs-release-pc1-xenial.deb
sudo apt-get update
Когда + apt-get update
завершится, и мы будем извлекать данные из репозитория Puppet Labs, мы установим пакет` + puppet server`:
sudo apt-get install puppetserver
Нажмите + Y +
для продолжения. После завершения установки и до того, как мы запустим сервер, мы потратим немного времени на настройку памяти.
Настроить распределение памяти
По умолчанию Puppet Server настроен на использование 2 ГБ оперативной памяти. Вы можете настроить этот параметр в зависимости от того, сколько свободной памяти имеет главный сервер и сколько узлов агента он будет управлять.
Чтобы настроить его, откройте + / etc / default / puppetserver +
:
sudo nano /etc/default/puppetserver
Затем найдите строку + JAVA_ARGS +
и используйте параметры + -Xms +
и + -Xmx +
для установки выделения памяти. Мы увеличим наш до 3 гигабайт:
/ И т.д. / по умолчанию / puppetserver
JAVA_ARGS="-Xmsg -Xmxg -XX:MaxPermSize=256m"
Сохраните и выйдите, когда закончите.
Откройте брандмауэр
Когда мы запускаем Puppet Server, он будет использовать порт 8140 для связи, поэтому мы убедимся, что он открыт:
sudo ufw allow 8140
Далее мы запустим Puppet-сервер.
Запустите Puppet сервер
Мы будем использовать + systemctl +
для запуска сервера Puppet:
sudo systemctl start puppetserver
Это займет некоторое время, чтобы завершить.
Как только мы вернемся в командную строку, мы проверим, что мы преуспели, так как + systemctl +
не отображает результат всех команд управления службами:
sudo systemctl status puppetserver
Мы должны увидеть строку с надписью «active (running)», а последняя строка должна выглядеть примерно так:
OutputDec 07 16:27:33 puppet systemd[1]: Started puppetserver Service.
Теперь, когда мы убедились, что сервер работает, мы настроим его для запуска при загрузке:
sudo systemctl enable puppetserver
Теперь, когда сервер работает, мы готовы настроить Puppet Agent на двух наших агентских компьютерах: + db1 +
и + web1 +
.
Шаг 3 - Установка агента Puppet
Программное обеспечение агента Puppet должно быть установлено на любом сервере, которым будет управлять мастер Puppet. В большинстве случаев это будет включать каждый сервер в вашей инфраструктуре.
Включить официальный репозиторий Puppet Labs
Сначала мы включим официальный репозиторий Puppet Labs с помощью следующих команд:
wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
sudo dpkg -i puppetlabs-release-pc1-xenial.deb
sudo apt-get update
Установите пакет агента Puppet
Затем мы установим пакет + puppet-agent
:
sudo apt-get install puppet-agent
Мы запустим агент и включим его при загрузке:
sudo systemctl start puppet
sudo systemctl enable puppet
Наконец, мы повторим эти шаги для + web1 +
:
wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
sudo dpkg -i puppetlabs-release-pc1-xenial.deb
sudo apt-get update
sudo apt-get install puppet-agent
sudo systemctl enable puppet
sudo systemctl start puppet
Теперь, когда на обоих узлах агента запущено программное обеспечение агента Puppet, мы подпишем сертификаты на мастере Puppet.
Шаг 4 - Подписание сертификатов на Puppet Master
При первом запуске Puppet на узле агента он отправляет запрос на подпись сертификата мастеру Puppet. Прежде чем Puppet Server сможет взаимодействовать с узлом агента и контролировать его, он должен подписать сертификат этого конкретного узла агента.
Список текущих запросов сертификатов
Чтобы получить список всех неподписанных запросов на сертификат, выполните следующую команду на мастере Puppet:
sudo /opt/puppetlabs/bin/puppet cert list
Для каждого настроенного хоста должен быть один запрос, который выглядит примерно так:
Output: "db1.localdomain" (SHA256) 46:19:79:3F:70:19:0A:FB:DA:3D:C8:74:47:EF:C8:B0:05:8A:06:50:2B:40:B3:B9:26:35:F6:96:17:85:5E:7C
"web1.localdomain" (SHA256) 9D:49:DE:46:1C:0F:40:19:9B:55:FC:97:69:E9:2B:C4:93:D8:A6:3C:B8:AB:CB:DD:E6:F5:A0:9C:37:C8:66:A0
+
перед сертификатом указывает, что он был подписан. Отсутствие знака плюс означает, что наш новый сертификат еще не подписан.
Подписывать запросы
Чтобы подписать один запрос сертификата, используйте команду + puppet cert sign +
с именем хоста сертификата, которое отображается в запросе сертификата.
Например, чтобы подписать сертификат db1, вы должны использовать следующую команду:
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 может управлять инфраструктурой. Вы можете узнать больше об управлении сертификатами в How to Manage Puppet 4 Certificates шпаргалке.
Шаг 5 - Проверка установки
Puppet использует специфичный для домена язык для описания конфигураций системы, и эти описания сохраняются в файлах, называемых «манифестами», которые имеют расширение «+ .pp +». Вы можете узнать больше об этом в руководстве Getting Started with Puppet: Manifests and Modules, но сейчас мы создадим краткую директиву, чтобы убедиться, что Puppet Server может управлять агентами, как и ожидалось.
Начнем с создания манифеста по умолчанию + site.pp +
в расположении по умолчанию:
sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp
Мы будем использовать специфичный для домена язык Puppet для создания файла с именем + it_works.txt +
на узлах агента, расположенного в каталоге + tmp +
, который содержит публичный IP-адрес сервера агента и устанавливает разрешения для `+ -rw -r - т - + `:
пример site.pp
file {'/tmp/it_works.txt': # resource type file and filename
ensure => present, # make sure it exists
mode => '0644', # file permissions
content => "It works on ${ipaddress_eth0}!\n", # Print the eth0 IP fact
}
По умолчанию Puppet Server запускает команды в своих манифестах по умолчанию каждые 30 минут. Если файл будет удален, директива + sure +
приведет к его воссозданию. Директива + mode +
устанавливает права доступа к файлу, а директива + content +
добавляет контент в директиву.
Мы также можем протестировать манифест на одном узле, используя + puppet agent --test
. Обратите внимание, что + - test +
не является флагом для пробного запуска; в случае успеха он изменит конфигурацию агента.
Вместо того, чтобы ждать, пока мастер Puppet применит изменения, мы теперь применим манифест к + db1 +
:
sudo /opt/puppetlabs/bin/puppet agent --test
Вывод должен выглядеть примерно так:
OutputInfo: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for db1.localdomain
Info: Applying configuration version '1481131595'
Notice: /Stage[main]/Main/File[/tmp/it_works.txt]/ensure: defined content as '{md5}acfb1c7d032ed53c7638e9ed5e8173b0'
Notice: Applied catalog in 0.03 seconds
Когда это будет сделано, мы проверим содержимое файла:
cat /tmp/it_works.txt
Output It works on !
Повторите это для + web1 +
или, если хотите, вернитесь через полчаса или около того, чтобы убедиться, что мастер Puppet работает автоматически.
Поздравляем! Вы успешно установили Puppet в режиме Master / Agent.
Заключение
Теперь, когда у вас есть базовая установка агента / мастера Puppet, вы готовы узнать больше о том, как использовать Puppet для управления вашей серверной инфраструктурой. Ознакомьтесь со следующим учебником: Getting Started with Puppet Code: Manifests and Modules.