Узнайте, как установить сервер и агент Puppet и настроить их, чтобы они могли общаться друг с другом.
Puppet — один из наиболее популярных инструментов управления конфигурациями в мире DevOps. Как инженер DevOps, вы должны знать, как настроить марионетку в вашей системе.
Но прежде чем мы начнем, позвольте мне сказать вам, что установка марионетки – это совсем непростая задача. Если вы пропустите один шаг или измените последовательность шагов, упомянутых в этом руководстве, даже в одном месте, вы можете целый день ломать голову над множеством ошибок, но ваша настройка будет неполной. Поэтому очень внимательно выполняйте каждый шаг.
Puppet имеет клиент-серверную архитектуру, которая состоит из мастера Puppet (сервера) и агентов Puppet (клиента). Puppet Master имеет все конфигурации, он компилирует и передает конфигурации агентам Puppet. Агенты Марионеток через определенные промежутки времени отправляют факты хозяину Марионеток, запрашивающему каталоги. Хозяин Марионеток отправляет обратно запрошенный каталог агенту Марионеток. Затем агент Puppet применяет этот каталог на узле и отправляет отчет мастеру.
Теперь, когда у вас есть базовое представление о Puppet, давайте начнем и настроим Puppet Master и Puppet Agent.
Если вы абсолютный новичок, возможно, вам захочется пройти этот онлайн-видеокурс.
Детали окружающей среды
Я использую 2 машины с Ubuntu 18.04. Один будет выступать в роли кукловода, а другой – в роли кукловода. Ниже приведены детали машин:
Хозяин Марионеток (Сервер)
- Имя хоста: puppet, puppet.geekflate.com
- IP-адрес: 192.168.0.108
Марионеточный агент (Клиент)
- Имя хоста: puppetagent
- IP-адрес: 192.168.0.107
Установка Puppet-сервера
Прежде чем начать установку, мне нужно отредактировать файл /etc/hosts как на главном компьютере, так и на агенте, чтобы они могли разрешать друг друга.
На главном узле
geekflare@puppet-master:~$ sudo gedit /etc/hosts [sudo] пароль для geekflare: 127.0.0.1 localhost 127.0.1.1 geekflare 192.168.0.108 puppet puppet.geekflare.com
На агентском узле
geekflare@puppet-agent:~$ sudo gedit /etc/hosts 127.0.0.1 localhost 127.0.1.1 geekflare 192.168.0.107 puppetagent 192.168.0.108 puppet puppet.geekflare.com
Теперь мне нужно получить репозиторий марионеток на моем главном узле и обновить его.
Загрузите репозиторий марионеток.
geekflare@puppet-master:~$ wget https://apt.puppetlabs.com/puppet6-release-bionic.deb —2019-10-15 15:41:34— https://apt.puppetlabs.com/ puppet6-release-bionic.deb Разрешение apt.puppetlabs.com (apt.puppetlabs.com)… 99.86.19.107, 99.86.19.59, 99.86.19.2, … Подключение к apt.puppetlabs.com (apt.puppetlabs. com)|99.86.19.107|:443… подключено. HTTP-запрос отправлен, ожидается ответ… 200 OK Длина: 11736 (11 КБ) [application/x-debian-package] Сохранение в: 'puppet6-release-bionic.deb' puppet6-release-bio 100%[==== ===============>] 11,46K —.-КБ/с за 0 с 2019-10-15 15:41:34 (236 МБ/с) — 'puppet6-release- bionic.deb сохранен [11736/11736]
Добавьте и настройте репозиторий Puppet 6.
geekflare@puppet-master:~$ sudo dpkg -i puppet6-release-bionic.deb Выбор ранее не выбранного пакета puppet6-release. (Чтение базы данных… На данный момент установлено 187041 файлов и каталогов.) Подготовка к распаковке puppet6-release-bionic.deb… Распаковка puppet6-release (6.0.0-5bionic)… Настройка puppet6-release (6.0.0) -5бионический)…
Обновите список репозиториев.
geekflare@puppet-master:~$ sudo apt update Обращение: 1 https://download.docker.com/linux/ubuntu bionic Обращение InRelease: 2 http://security.ubuntu.com/ubuntu cosmic-security Обращение InRelease: 3 http://ppa.launchpad.net/ansible/ansible/ubuntu cosmic InRelease Get:4 http://download.virtualbox.org/virtualbox/debian cosmic InRelease [4,429 B] Get:5 http://apt.puppetlabs. com bionic InRelease [85,3 КБ] Обращение: 6 http://us.archive.ubuntu.com/ubuntu cosmic InRelease Обращение: 7 http://us.archive.ubuntu.com/ubuntu cosmic-updates InRelease Get: 8 http: //download.virtualbox.org/virtualbox/debian cosmic/contrib amd64 Пакеты [1,466 Б] Получить: 9 http://apt.puppetlabs.com bionic/puppet6 все пакеты [13,5 КБ] Обращение: 10 http://us. archive.ubuntu.com/ubuntu cosmic-backports InRelease Получить: 11 http://apt.puppetlabs.com bionic/puppet6 Пакеты i386 [13,5 КБ] Получить: 12 http://apt.puppetlabs.com bionic/puppet6 amd64 Пакеты [ 32,3 КБ] Получено 151 КБ за 2 с (61,9 КБ/с) Чтение списков пакетов… Готово Построение дерева зависимостей Чтение информации о состоянии… Готово Можно обновить 234 пакета. Запустите «apt list —upgradable», чтобы увидеть их.
Установка Puppet-сервера
Давайте выполним приведенную ниже команду на главном узле, чтобы установить на него марионеточный сервер.
geekflare@puppet-master:~$ sudo apt install -y puppetserver Чтение списков пакетов… Готово Построение дерева зависимостей Чтение информации о состоянии… Готово Будут установлены следующие дополнительные пакеты: ca-certificates-java java-common openjdk-8 -jre-headless puppet-agent Предлагаемые пакеты: default-jre fonts-dejavu-extra fonts-ipafont-gothic fonts-ipafont-mincho fonts-wqy-microhei fonts-wqy-zenhei Будут установлены следующие НОВЫЕ пакеты: ca-certificates- java java-common openjdk-8-jre-headless puppet-agent puppetserver 0 обновлено, 5 вновь установлено, 0 нужно удалить и 234 не обновлено. Нужно получить 109 Мб архива. После этой операции будет использовано 287 МБ дополнительного дискового пространства. Получить: 1 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 java-common all 0.68ubuntu1 [6,988 B] Получить: 2 http://apt.puppetlabs.com bionic/puppet6 amd64 puppet-agent amd64 6.10.1-1bionic [19,9 МБ] Получить:3 http://us.archive.ubuntu.com/ubuntu cosmic-updates/universe amd64 openjdk-8-jre-headless amd64 8u212-b03-0ubuntu1.18.10.1 [27.2 МБ] Получить: 4 http://apt.puppetlabs.com bionic/puppet6 amd64 puppetserver all 6.7.1-1bionic [61,5 МБ] Получить: 5 http://us.archive.ubuntu.com/ubuntu cosmic/main amd64 ca -certificates-java all 20180516ubuntu1 [12,3 КБ] Получено 109 МБ за 1 минуту 41 с (1072 КБ/с) Распаковка puppetserver (6.7.1-1bionic) … Настройка puppet-agent (6.10.1-1bionic) … Создано символическая ссылка /etc/systemd/system/multi-user.target.wants/puppet.service → /lib/systemd/system/puppet.service. Создана символическая ссылка /etc/systemd/system/multi-user.target.wants/pxp-agent.service → /lib/systemd/system/pxp-agent.service. Удален файл /etc/systemd/system/multi-user.target.wants/pxp-agent.service. Настройка java-common (0.68ubuntu1)… Обработка триггеров для libc-bin (2.28-0ubuntu1)… Обработка триггеров для systemd (239-7ubuntu10.12)… Обработка триггеров для man-db (2.8.4) -2) … Обработка триггеров для ca-сертификатов (20180409) … Обновление сертификатов в /etc/ssl/certs… 0 добавлено, 0 удалено; сделанный. Запуск перехватчиков в /etc/ca-certificates/update.d… готово. Настройка ca-certificates-java (20180516ubuntu1) … head: невозможно открыть «/etc/ssl/certs/java/cacerts» для чтения: такого файла или каталога нет. Добавление debian:SSL.com_EV_Root_Certification_Authority_ECC.pem Добавление debian:ssl- cert-snakeoil.pem Добавление debian:SwissSign_Gold_CA_-_G2.pem Добавление debian:SZAFIR_ROOT_CA2.pem Добавление debian:OpenTrust_Root_CA_G3.pem Добавление debian:TWCA_Root_Certification_Authority.pem Добавление debian:QuoVadis_Root_CA_2_G3.pem Добавление debian:DST_Root_CA_X3.pem Добавление debian:SecureSign_RootCA11.pem Добавление debian:QuoVadis_Root_CA_1_G3.pem Добавление debian:T-TeleSec_GlobalRoot_Class_3.pem Добавление debian:Go_Daddy_Root_Certificate_Authority_-_G2.pem Добавление debian:Actalis_Authentication_Root_CA.pem Добавление debian:Chambers_of_Commerce_Root_-_200 8.Пем готово. Триггеры обработки для ca-сертификатов (20180409)… Обновление сертификатов в /etc/ssl/certs… 0 добавлено, 0 удалено; сделанный. Запуск перехватчиков в /etc/ca-certificates/update.d… готово. сделанный. Настройка openjdk-8-jre-headless:amd64 (8u212-b03-0ubuntu1.18.10.1) … Настройка puppetserver (6.7.1-1bionic) … usermod: без изменений Обработка триггеров для systemd (239-7ubuntu10) .12) …
Настройка Puppet-сервера
Отредактируйте файл puppetserver, как показано ниже. Это для настройки JVM марионеточного сервера.
geekflare@puppet-master:~$ sudo gedit /etc/default/puppetserver # Измените это, если хотите изменить распределение памяти, включить JMX и т. д. JAVA_ARGS=»-Xms512m -Xmx512m -Djruby.logger.class=com. puppetlabs.jruby_utils.jruby.Slf4jLogger»
Отредактируйте файл конфигурации Puppet, чтобы изменить настройки сервера Puppet.
geekflare@puppet-master:~$ sudo gedit /etc/puppetlabs/puppet/puppet.conf # Этот файл можно использовать для переопределения настроек марионетки по умолчанию. # Для получения более подробной информации о доступных настройках см. следующие ссылки: # — https://puppet.com/docs/puppet/latest/config_important_settings.html # — https://puppet.com/docs/puppet/latest/config_about_settings .html # – https://puppet.com/docs/puppet/latest/config_file_main.html # – https://puppet.com/docs/puppet/latest/configuration.html [master] vardir = /opt/puppetlabs/ server/data/puppetserver logdir = /var/log/puppetlabs/puppetserver rundir = /var/run/puppetlabs/puppetserver pidfile = /var/run/puppetlabs/puppetserver/puppetserver.pid codedir = /etc/puppetlabs/code dns_alt_names = марионетка ,puppet.geekflare.com [main] имя сертификата = puppet.geekflare.com сервер = puppet.geekflare.com среда = производственный интервал запуска = 15 м
Puppet Server необходимо создать корневую и промежуточную подпись CA.
geekflare@puppet-master:~$ sudo /opt/puppetlabs/bin/puppetserver ca setup Генерация выполнена успешно. Найдите свои файлы в /etc/puppetlabs/puppet/ssl/ca.
Запустите и включите службу сервера марионеток.
geekflare@puppet-master:~$ sudo systemctl start puppetserver geekflare@puppet-master:~$ sudo systemctl Enable puppetserver Синхронизация состояния puppetserver.service со сценарием службы SysV с помощью /lib/systemd/systemd-sysv-install. Выполнение: /lib/systemd/systemd-sysv-install включить puppetserver
Установка агента Puppet
Выполните следующие шаги на узле агента, как вы это делали для главной системы. Репозиторий Puppet должен присутствовать на всех узлах агента.
geekflare@puppet-agent:~$ wget https://apt.puppetlabs.com/puppet6-release-bionic.deb geekflare@puppet-agent:~$ sudo dpkg -i puppet6-release-bionic.deb geekflare@puppet-agent :~$ обновление sudo apt
Запустите приведенную ниже команду на узле агента, чтобы установить марионеточный агент.
geekflare@puppet-agent:~$ sudo apt install -y puppet-agent Чтение списков пакетов… Готово Построение дерева зависимостей Чтение информации о состоянии… Готово Будут установлены следующие НОВЫЕ пакеты: puppet-agent 0 обновлен, 1 новый установлен , 0 для удаления и 233 не обновлено. Нужно получить 19,9 МБ архива. После этой операции будет использовано 115 МБ дополнительного дискового пространства. Получить: 1 http://apt.puppetlabs.com bionic/puppet6 amd64 puppet-agent amd64 6.10.1-1bionic [19,9 МБ] Извлечено 19,9 МБ за 2 с (8488 кБ/с) Выбор ранее не выбранного пакета puppet-agent. (Чтение базы данных… На данный момент установлено 185786 файлов и каталогов.) Подготовка к распаковке…/puppet-agent_6.10.1-1bionic_amd64.deb… Распаковка puppet-agent (6.10.1-1bionic)… Настройка puppet -agent (6.10.1-1bionic) … Создана символическая ссылка /etc/systemd/system/multi-user.target.wants/puppet.service → /lib/systemd/system/puppet.service. Создана символическая ссылка /etc/systemd/system/multi-user.target.wants/pxp-agent.service → /lib/systemd/system/pxp-agent.service. Удален файл /etc/systemd/system/multi-user.target.wants/pxp-agent.service. Обработка триггеров для libc-bin (2.28-0ubuntu1)…
Настройка агента Puppet
Отредактируйте файл конфигурации марионетки на узле агента.
geekflare@puppet-agent:~$ sudo gedit /etc/puppetlabs/puppet/puppet.conf [main] имя сертификата = сервер puppetagent = puppet.geekflare.com среда = производственный интервал выполнения = 15 м
Выполните приведенную ниже команду, чтобы запустить службу марионеток. Эта команда также запустится автоматически после загрузки.
geekflare@puppet-agent:~$ sudo /opt/puppetlabs/bin/puppet служба ресурсов puppet обеспечения=работает Enable=true service { 'марионетка': обеспечения => 'работает', включить => 'истина', }
Генерация и подписание сертификатов
Когда агент запускается в первый раз, он отправляет запрос на подпись сертификата мастеру Puppet. Мастеру необходимо проверить и подписать этот сертификат. После этого агент будет получать каталоги от мастера и регулярно применять их к узлам агента.
Теперь, когда агент марионетки запущен, выполните приведенную ниже команду на главном узле, чтобы проверить, получил ли он какой-либо запрос на подпись сертификата.
На главном узле
geekflare@puppet-master:~$ sudo /opt/puppetlabs/bin/puppetserver ca list [sudo] пароль для geekflare: Запрошенные сертификаты: puppetagent (SHA256) EA:68:23:B5:C3:71:2C:E6:4A :6A:3B:2F:24:F5:B8:5B:50:F7:3F:12:89:DE:B1:EB:D1:0A:74:3E:48:C3:D7:35
Подпишите сертификат, отправленный агентом.
geekflare@puppet-master:~$ sudo /opt/puppetlabs/bin/puppetserver ca list [sudo] пароль для geekflare: Запрошенные сертификаты: puppetagent (SHA256) EA:68:23:B5:C3:71:2C:E6:4A :6A:3B:2F:24:F5:B8:5B:50:F7:3F:12:89:DE:B1:EB:D1:0A:74:3E:48:C3:D7:35
Запустите команду ниже, чтобы проверить весь список сертификатов. Один сертификат уже существует, это сертификат главного узла по умолчанию, а другой — от узла агента.
geekflare@puppet-master:~$ sudo /opt/puppetlabs/bin/puppetserver ca list —all Подписанные сертификаты: puppetagent (SHA256) EA:68:23:B5:C3:71:2C:E6:4A:6A:3B :2F:24:F5:B8:5B:50:F7:3F:12:89:DE:B1:EB:D1:0A:74:3E:48:C3:D7:35 puppet.geekflare.com (SHA256) 71:30:5B:C8:C5:CE:28:A0:60:5C:4F:39:26:D0:FC:DA:DF:0A:0F:4D:ED:D4:B1:9C:05: 1A:38:2F:D6:5F:9C:06 альтернативные имена: [«DNS:puppet.geekflare.com», «DNS:puppet», «DNS:puppet.geekflare.com»]
На агентском узле
Теперь запустите эту команду, чтобы проверить, установлено ли соединение между главным и агентским узлами, и все ли работает нормально.
geekflare@puppet-agent:~$ sudo /opt/puppetlabs/bin/puppet Agent —test Информация: Использование настроенной среды «производство» Информация: Получение фактов о плагине Информация: Получение информации о плагине: Получение локалей Информация: Каталог кэширования для информации о puppet-agent : Применение версии конфигурации «1571171191». Примечание. Каталог применен за 0,02 секунды.
Пример примера куклы
Давайте рассмотрим простой пример с марионеткой. Я создам простой марионеточный манифест, который создает каталог с определенным разрешением.
На главном узле:
geekflare@puppet-master:~$ sudo gedit /etc/puppetlabs/code/environments/production/manifests/site.pp
Поместите приведенный ниже контент.
node 'puppetagent' { # Применяется только к указанному узлу. Если ничего не упомянуто, это относится ко всем. file { '/home/test': # Файл типа ресурса обеспечения => 'каталог', # Создание владельца каталога => 'root', # Группа владения => 'root', # Режим имени группы => '0755', # разрешения каталога } }
Теперь запустите приведенную ниже команду, чтобы агент связался с мастером и получил конфигурации. После выполнения этой команды этот каталог должен быть создан на узле агента.
На агентском узле
geekflare@puppet-agent:~$ sudo /opt/puppetlabs/bin/puppet Agent —test [sudo] пароль для geekflare: Информация: Использование настроенной среды «производство» Информация: Получение информации о плагине: Получение информации о плагине: Получение локалей Информация: Каталог кэширования для puppetagent. Информация: применение версии конфигурации «1571333010». Примечание: /Stage[main]/Main/Node[puppetagent]/File[/home/test]/ensure: создано. Примечание: каталог применен через 0,05 секунды.
Запустите команду ls, чтобы проверить, успешно ли создан директор.
geekflare@puppet-agent:~$ ls -l /home/ всего 32 drwxr-xr-x 13 geekflare geekflare 4096 19 июля 08:06 geekflare drwx—— 2 root root 16384 23 октября 2018 г. потерян+найден drwxr- xr-x 23 geekflare geekflare 4096 17 октября 11:02 geekflare drwxr-xr-x 2 root root 4096 17 октября 13:23 test drwxr-xr-x 2 имя пользователя имя пользователя 4096 29 июня 09:38 имя пользователя
Вот и все!
Заключение
Это был простой пример, демонстрирующий его работу. Но представьте себе более масштабный сценарий, в котором вам нужно установить или применить определенную конфигурацию на сотнях серверов. Puppet поможет вам добиться этого за считанные минуты.
Если вы занимаетесь автоматизацией и хотите узнать больше, вы можете проверить этот курс Udemy, в котором рассказывается об Ansible, Puppet и Salt.