Как использовать Puppet Modules для автоматизации ИТ-инфраструктуры?



Практическое руководство по марионетке, в котором рассказывается о написании марионеточного модуля и использовании манифеста для автоматизации и обслуживания ИТ-инфраструктуры организации.

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

В этой статье о марионеточные модули и манифесты давайте посмотрим, как можно использовать марионеточные модули для автоматизации настройки сервера, установки программ и управления системой.





В этом блоге будут освещены следующие темы:

Введение в программирование марионеток

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



Марионетка имеетсобственный язык конфигурации, Марионетка DSL . Как и другие программы DevOps, Puppet автоматизирует изменения, исключая ручные изменения на основе сценария. Однако Puppet - это не просто еще один язык оболочки и не чистый язык программирования, такой как PHP. Вместо этого Puppet используетк декларативный модельный подход автоматизации ИТ. Это позволяет Puppet определять инфраструктуру как код и принудительно настраивать систему с помощью программ.

Прежде чем продолжить демонстрацию, давайте рассмотрим несколько основных аспектов марионеточного программирования.

программирование сокетов на примере java

Ключевые термины в марионеточном программировании

Манифесты

Кукольная программа называется манифест и имеет имя файла с .pp расширение. Основной манифест Puppet по умолчанию: /etc/puppet/manifests/site.pp . (Это определяетглобальные конфигурации системы, такие как конфигурация LDAP, DNS-серверы или другие конфигурации, применимые к каждому узлу).



Классы

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

Ресурсы

Код марионетки состоит в основном из объявлений ресурсов. А ресурс описывает конкретный элемент желаемого состояния системы. Например, он может указывать на то, что должен существовать определенный файл или должен быть установлен пакет.

Марионеточные модули

Кроме основногоsite.ppманифестон хранит манифестыв модули .

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

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

Модули - Марионеточное программирование - EdurekaВ Puppetlabs есть предопределенные модули, которые мы можем использовать мгновенно, загрузив их из PuppetForge . Вы также можете создать собственный модуль марионетки в соответствии с вашими требованиями.

Рабочий процесс марионеточной программы

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

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

Демонстрация: Автоматизация установки Apache и MySQL

Эта практическая статья о марионеточных модулях покажет два способа использования марионеточного модуля, а также научит вас, как автоматизировать установка сервера, сконфигурированного с этими двумя модулями.

Для начала убедитесь, что у вас есть готовая инфраструктура Puppet, которая будет включать главный сервер марионеток и 2 агента марионеток.

  • Хозяин Марионеток: Ubuntu 18.04
  • Агент 1: Ubuntu 18.04
  • Агент 2:CentOS7

Вот краткое описание того, чего мы добьемся в этом практическом занятии:


Итак, давайте начнем с практического:

Создание модуля с нуля

В этом модуле марионетки мы будем иметь дело с такими задачами, как загрузка пакета Apache, настройка файлов и настройка виртуальных хостов.

  • В Puppet Master перейдите в каталог модуля Puppet и создайте каталог Apache:
    cd / etc / puppet / modules sudo mkdir apache
  • Изнутри каталога apache создайте подкаталоги: манифесты, шаблоны, файлы и примеры.
    cd apache sudo mkdir {манифесты, шаблоны, файлы, примеры}
  • Перейдите в каталог манифестов:
    cd манифесты
  • Отсюда мы разделим модуль на классы в зависимости от целей этого раздела кода.

init.pp -> скачать пакет Apache

params.pp -> определять любые переменные и параметры

config.pp -> для управления любыми файлами конфигурации для службы Apache.

vhosts.pp -> для определения виртуальных хостов.

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

Шаг 1. Скачивание пакета Apache

Создать класс init.pp

Теперь создадимinit.ppфайл в каталоге манифестов для хранения пакета apache.
Поскольку у нас есть 2 разные ОС (ubuntu и CentOS7), которые используют разные имена пакетов для Apache, нам придется использовать переменную$ apachename.

/etc/puppetlabs/code/environments/production/modules/apache/manifests/init.pp

class apache {package {'apache': name => $ apachename, sure => present,}}

пакет ресурс позволяет управлять пакетом. Это используется для добавления, удаления или обеспечения наличия пакета.

В большинстве случаев имя ресурса (Apache, выше) должно быть именем управляемого пакета. Из-за различных соглашений об именахмы называем фактическое название пакетана с имя Справка. Так имя , вызывает еще неопределенную переменную$ apachename.

обеспечить ссылка гарантирует, что пакетподарок.

таблица как смешивать данные

Создать файл params.pp

Вparams.ppфайл определит необходимые переменные. Хотя мы могли определить эти переменные вinit.ppфайл, поскольку необходимо будет использовать больше переменных вне самого типа ресурса, используяparams.ppфайл позволяет определять переменные веслиоператоры и используются в нескольких классах.

Создатьparams.ppфайл и следующий код.

/etc/puppetlabs/code/environments/production/modules/apache/manifests/params.pp

class apache :: params {if $ :: osfamily == 'RedHat' {$ apachename = 'httpd'} elsif $ :: osfamily == 'Debian' {$ apachename = 'apache2'} else {fail ('это не поддерживаемый дистрибутив. ')}}

Вне оригинала init.ppclass, каждое имя класса должно ответвляться отApache. Мы называем этот класс apache :: params . Имя после двойного двоеточия должно совпадать с именем файла. Anеслиоператор используется для определения параметров на основе информации, предоставленной Фактор , Puppet имеет фасадную установку как часть самой установки. Здесь Facter загрузит семейство операционных систем (семья), чтобы узнать,Красная ШапкаилиНа основе Debian.

Когда параметры окончательно определены, нам нужно вызвать params.pp файл и параметры вinit.pp. Для этого нам нужно добавить параметры после имени класса, но перед открывающей фигурной скобкой({).

Так чтоinit.ppто, что мы создали ранее, должно выглядеть примерно так:

class apache ($ apachename = $ :: apache :: params :: apachename,) наследует :: apache :: params {package {'apache': name => $ apachename, sure => present,}}

Строка значения $ :: apache :: params :: значение сообщает Puppet, что нужно извлечь значения из Apache модули, параметры class, за которым следует имя параметра. Фрагмент наследует :: apache :: params позволяетinit.ppчтобы унаследовать эти значения.

Шаг 2. Управление файлами конфигурации

Файл конфигурации Apache будет отличаться в зависимости от того, работаете ли вы в системе на основе Red Hat или Debian.

Вы можете найти следующие файлы зависимостей в конце этой демонстрации:httpd.conf(Красная Шапка),apache2.conf(Debian).

  • Скопируйте содержимое httpd.conf иapache2.confв отдельные файлы и сохраните их в файлы каталогв / и т. д. / Puppetlabs / код / ​​среды / производство / модули / apache / файлы .
  • Отредактируйте оба файла на отключить поддерживать активность. Вам нужно будет добавить строку KeepAlive Off вhttpd.confфайл. Если вы не хотите изменять этот параметр, мы должны добавить комментарий вверху каждогофайл:
    /etc/puppetlabs/code/environments/production/modules/apache/files/httpd.conf
# Этот файл управляется марионеткой

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

/etc/puppetlabs/code/environments/production/modules/apache/manifests/init.pp

файл {'файл-конфигурации': путь => $ conffile, убедитесь => файл, источник => $ confsource,}

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

обеспечить гарантирует, что это файл.

источник предоставляет расположение на мастере Puppet файлов, созданных выше.

Откройparams.ppфайл.

Мы определяем $ conffile и $ confsourceпеременные внутриеслизаявление:

/etc/puppetlabs/code/environments/production/modules/apache/manifests/params.pp

if $ :: osfamily == 'RedHat' {... $ conffile = '/etc/httpd/conf/httpd.conf' $ confsource = 'puppet: ///modules/apache/httpd.conf'} elsif $: : osfamily == 'Debian' {... $ conffile = '/etc/apache2/apache2.conf' $ confsource = 'puppet: ///modules/apache/apache2.conf'} else {...

Нам нужно добавить параметры в началоApacheобъявление класса вinit.ppфайл, аналогичный предыдущему примеру.

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

/etc/puppetlabs/code/environments/production/modules/apache/manifests/init.pp

file {'configuration-file': path => $ conffile, sure => file, source => $ confsource, notify => Service ['apache-service'],} service {'apache-service': name => $ apachename, hasrestart => true,}

оказание услуг ресурс использует уже созданный параметр, определяющий имя Apache в системах Red Hat и Debian.
hasrestart Атрибут используется для запуска перезапуска определенной службы.

Шаг 3. Создайте файлы виртуального хоста

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

  • Изнутриapache / манифесты /каталог, создайте и откройтеvhosts.ppфайл. Добавьте скелетеслизаявление:

/etc/puppetlabs/code/environments/production/modules/apache/manifests/vhosts.pp

class apache :: vhosts {if $ :: osfamily == 'RedHat' {} elsif $ :: osfamily == 'Debian' {} else {}}

Расположение файла виртуального хоста на нашем сервере CentOS 7:/etc/httpd/conf.d/vhost.conf . Вам необходимо создать файл как шаблон на мастере Puppet. Сделайте то же самое для файла виртуальных хостов Ubuntu, который находится по адресу/etc/apache2/sites-available/example.com.conf, заменяяexample.comс полным доменным именем сервера.

  • Перейдите к шаблоны файл в Apache модуль, а затем создайте два файла для ваших виртуальных хостов:

Для систем Red Hat:
/etc/puppetlabs/code/environments/production/modules/apache/templates/vhosts-rh.conf.erb

ServerAdmin ServerName ServerAlias ​​www. DocumentRoot / var / www // public_html / ErrorLog /var/www//logs/error.log CustomLog /var/www//logs/access.log в сочетании

Для систем Debian:
/etc/puppet/modules/apache/templates/vhosts-deb.conf.erb

ServerAdmin ServerName ServerAlias ​​www. DocumentRoot / var / www / html // public_html / ErrorLog /var/www/html//logs/error.log CustomLog /var/www/html//logs/access.log вместеТребовать все предоставлено

В этих файлах мы используем только две переменные: adminemail и имя сервера . Мы будем определять их для каждого узла в рамкахsite.ppфайл.

  • Вернуться кvhosts.ppфайл. На созданные шаблоны теперь можно ссылаться в коде:

/etc/puppetlabs/code/environments/production/modules/apache/manifests/vhosts.pp

class apache :: vhosts {if $ :: osfamily == 'RedHat' {file {'/etc/httpd/conf.d/vhost.conf': sure => file, content => template ('apache / vhosts-rh .conf.erb '),}} elsif $ :: osfamily ==' Debian '{файл {' /etc/apache2/sites-available/$servername.conf ': sure => file, content => template (' apache /vhosts-deb.conf.erb '),}} else {fail (' Это не поддерживаемый дистрибутив. ')}}

Обе группы распределения обращаются кфайлресурс и возьмите название местоположения виртуального хоста в соответствующем дистрибутиве. Для Debian это еще раз означает ссылку на$ servernameценность. Всодержаниеатрибут вызывает соответствующие шаблоны.

  • Оба файла виртуального хоста ссылаются на два каталога. По умолчанию их нет в системе. Мы можем создать их с помощьюфайлресурс, каждый в пределахеслизаявление. Полныйvhosts.confфайл должен напоминать:

/etc/puppetlabs/code/environments/production/modules/apache/manifests/vhosts.pp

class apache :: vhosts {if $ :: osfamily == 'RedHat' {file {'/etc/httpd/conf.d/vhost.conf': sure => file, content => template ('apache / vhosts-rh .conf.erb '),} файл {[' / var / www / $ servername ',' / var / www / $ servername / public_html ',' / var / www / $ servername / log ',]: sure => каталог,}} elsif $ :: osfamily == 'Debian' {файл {'/etc/apache2/sites-available/$servername.conf': sure => file, content => template ('apache / vhosts-deb. conf.erb '),} файл {[' / var / www / $ servername ',' / var / www / $ servername / public_html ',' / var / www / $ servername / logs ',]: sure => directory ,}} else {fail ('Этот дистрибутив не поддерживается.')}}

Шаг 4. Протестируйте модуль

  • Перейдите кapache / манифесты /каталог, запустите марионеточный парсер для всех файлов, чтобы убедиться, что кодировка Puppet без ошибок:

sudo / opt / puppetlabs / bin / puppet parser проверить init.pp params.pp vhosts.pp

Он должен возвращаться пустым, без проблем.

  • Перейдите к Примеры каталог вApacheмодуль. Создатьinit.ppфайл и включите созданные классы. Заменить значения для$ servernameи$ adminemailсо своим:

/etc/puppetlabs/code/environments/production/modules/apache/examples/init.pp

serveremail = 'webmaster@example.com' $ servername = 'puppet.example.com' включить apache, включить apache :: vhosts
  • Протестируйте модуль, запустив марионетка применить с –Нуп тег:
    sudo / opt / puppetlabs / bin / puppet применить --noop init.pp

Он не должен возвращать ошибок и выводить, что он будет запускать обновления из событий. Чтобы установить и настроить apache на мастере Puppet, запустите снова без–Нуп, при желании.

  • Вернитесь в основной каталог Puppet, а затем впроявляетпапка (нетот, который присутствует в модуле Apache).

компакт-диск / и т. д. / puppetlabs / код / ​​среды / производство / манифесты

Создатьsite.ppфайл,и включить модуль Apache для каждого узла агента. Также введите переменные дляadminemail и имя серверапараметры. Вашsite.ppдолжен напоминать следующее:

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

узел 'puppet-agent-ubuntu.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'puppet.example.com' include apache include apache :: vhosts} узел 'puppet-agent-centos.example .com '{$ adminemail =' webmaster@example.com '$ servername =' puppet.example.com 'include apache include apache :: vhosts}

По умолчанию служба агента Puppet на ваших управляемых узлах будет автоматически проверять с мастером каждые 30 минут и применять любые новые конфигурации от мастера. Вы также можете вручную вызвать процесс агента Puppet между автоматическими запусками агента. Чтобы вручную запустить новый модуль на узлах агента, войдите на узлы и запустите:

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

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

Используйте модуль из PuppetForge

Марионеточная кузница уже есть много модулей для запуска сервера. Мы можем настроить их так же тщательно, как и созданный вами модуль, и сэкономить время, поскольку нам не нужно создавать модуль с нуля.

Убедитесь, что вы в / и т.д. / puppetlabs / код / ​​среды / производство / модули каталог и установите Модуль MySQL Puppet Forge пользователя PuppetLabs. Это также установит все необходимые модули.

компакт-диск / и т.д. / puppetlabs / код / ​​среды / производство / модули

sudo / opt / puppetlabs / bin / puppet module установить puppetlabs-mysql

Используйте Hiera для создания баз данных

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

  • Перейдите к/ и т.д. / марионеткаи создайте файл конфигурации Хиерыhiera.yamlв основномкукольныйкаталог. Вы будете использовать значения по умолчанию Hiera:

/etc/puppetlabs/code/environments/production/hiera.yaml

--- версия: 5 иерархия: - имя: Общий путь: common.yaml по умолчанию: data_hash: yaml_data datadir: data
  • Создайте файлcommon.yaml. Он определит значение по умолчанию корень пароль для MySQL:

/etc/puppetlabs/code/environments/production/common.yaml

mysql :: server :: root_password: 'пароль'

Мы используемcommon.yamlфайлкогда переменная нигде не определена. Это означает, что все серверы будут использовать один и тот же пароль root MySQL. Эти пароли также можно хешировать для повышения безопасности.

  • Чтобы использовать настройки модуля MySQL по умолчанию, вы можете добавить включить ‘:: mysql :: server’ линия кsite.ppфайл. Однако в этом примере вы переопределите некоторые значения модуля по умолчанию, чтобы создать базу данных для каждого из ваших узлов.

Отредактируйтеsite.ppфайл со следующими значениями:

перегрузка функций в c ++
node 'Puppetagent-ubuntu.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostname.example.com' include apache include apache :: vhosts include mysql :: server mysql :: db {'mydb_ $ {fqdn} ': user =>' myuser ', password =>' mypass ', dbname =>' mydb ', host => $ :: fqdn, grant => [' SELECT ',' UPDATE '], tag = > $ domain,}} node 'Puppetagent-centos.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostname.example.com' include apache include apache :: vhosts include mysql :: server mysql :: db {'mydb _ $ {fqdn}': user => 'myuser', password => 'mypass', dbname => 'mydb', host => $ :: fqdn, grant => ['SELECT', ' ОБНОВЛЕНИЕ '], tag => $ domain,}}

Автоматизация установки Puppet Modules от Puppet Master к Puppet Agent

  • Вы можете запустить эти обновления вручную на каждом узле, подключившись к каждому узлу по SSH и выполнив следующую команду:

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

  • В противном случае служба агента Puppet на ваших управляемых узлах будет автоматически проверять с мастером каждые 30 минут и применять любые новые конфигурации от мастера.

Каталог успешно применен к агенту Ubuntu

Каталог успешно применен к агенту CentOS

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

Я надеюсь, что эта демонстрация помогла вам получить четкое представление о марионеточных модулях и манифестах и ​​их использовании для автоматизации ИТ-инфраструктуры.В этом случае ваша работа становится настолько простой, просто укажите конфигурации в Puppet Master, и агенты Puppet автоматически оценят основной манифест и применит модуль, определяющий настройку Apache и MySQL. Если у вас возникли какие-либо вопросы, не стесняйтесь размещать их на .

Если вы нашли это Учебник по куклам соответствующие, проверить от Edureka, надежной компании по онлайн-обучению с сетью из более чем 250 000 довольных учащихся по всему миру. Курс Edureka DevOps Certification Training помогает учащимся получить опыт в различных процессах и инструментах DevOps, таких как Puppet, Jenkins, Nagios и GIT, для автоматизации нескольких этапов в SDLC.