Как да използвам куклени модули за автоматизация на ИТ инфраструктурата?



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

Преди това системните администратори използваха скриптове за черупки, за да стартират своите сървъри и този метод имаше нулева мащабируемост. Трудна задача е непрекъснатото модифициране на скриптове за стотици или хиляди непрекъснато променящи се сървъри и техните системни конфигурации.

В тази статия на куклени модули и манифести нека видим как бихме могли да използваме куклени модули за автоматизиране на настройката на сървъра, инсталирането на програмата и управлението на системата.





Този блог ще обхваща следните теми:

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

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



Куклен имасвой собствен език за конфигуриране, Куклен DSL . Както при другите програми на DevOps, Puppet автоматизира промените, елиминирайки ръчно направените от скрипта промени. Въпреки това, Puppet не е просто друг език на черупката, нито е чист език за програмиране, като PHP. Вместо това, Puppet използвада се декларативен подход, основан на модел към ИТ автоматизация. Това позволява на Puppet да дефинира инфраструктурата като код и да наложи системната конфигурация с програми.

Преди да продължим с демонстрацията, нека разгледаме няколко основни аспекта на куклено програмиране.

как да отворите aws cli -

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

Манифести

Извиква се куклена програма манифест и има име на файл с .pp удължаване. Основният манифест на Puppet е /etc/puppet/manifests/site.pp . (Това определяглобални системни конфигурации, като LDAP конфигурация, DNS сървъри или други конфигурации, които се прилагат за всеки възел).



Класове

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

Ресурси

Кукленият код е съставен предимно от декларации за ресурси. A ресурс описва специфичен елемент за желаното състояние на системата. Например може да включва, че трябва да съществува определен файл или да бъде инсталиран пакет.

Куклени модули

С изключение на основнотоsite.ppманифест,той съхранява манифестив модули .

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

Модулите съдържат Puppet класове, дефинирани типове, задачи, планове на задачи, капацитети, типове ресурси и приставки, например персонализирани типове или факти. Инсталирайте модули в Puppetмодул-път. Puppet зарежда цялото съдържание от всеки модул в пътя на модула, правейки този код достъпен за използване.

Модули - Куклено програмиране - EdurekaPuppetlabs има предварително определени модули, които можем да използваме незабавно, като ги изтеглим от PuppetForge . Можете също така да създадете персонализиран куклен модул, който да отговаря на вашите изисквания.

Работен процес на куклена програма

Ще използваме декларативния език на Puppet, за да опишем желаното състояние на системата във файлове, наречени манифести. Манифестите описват как трябва да конфигурирате вашата мрежа и ресурси на операционната система, като файлове, пакети и услуги.

Puppet компилира манифести в каталози и той прилага всеки каталог към съответния му възел, за да гарантира, че конфигурацията на tтой възел е правиленвъв вашата инфраструктура.

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

Тази статия за куклени модули е практическа, която ще покаже два начина за използване на куклен модул и ще ви научи как да автоматизирайте инсталирането на сървър, конфигуриран с тези два модула.

Като начало се уверете, че сте подготвили куклена инфраструктура, която да включва сървър на куклен майстор и 2 куклени агента.

  • Puppet Master: 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 -> за дефиниране на виртуалните хостове.

Този модул също ще използва Хиера (вградена система за търсене на данни за конфигурация ключ-стойност, използвана за отделяне на данни от куклен код) данни, за съхраняване на променливи за всеки възел.

Стъпка 1: Изтегляне на пакет Apache

Създайте клас init.pp

Сега ще създадемinit.ppфайл в директорията на манифести, за да съдържа пакета apache.
Тъй като имаме 2 различни ОС (ubuntu и CentOS7), които използват различни имена на пакети за Apache, ще трябва да използваме променлива$ apachename.

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

клас apache {пакет {'apache': name => $ apachename, осигурете => присъства,}}

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

В повечето случаи име на ресурса (апаш, по-горе) трябва да е името на пакета, който се управлява. Поради различните конвенции за именуване,наричаме действителното име на пакетаслед с име справка. Така име , извиква все още недефинираната променлива$ apachename.

осигурете справка гарантира, че пакетът еприсъства.

Създайте файл params.pp

Theparams.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.ppклас, всяко име на клас трябва да се разклонява отапаш. Ние наричаме този клас като apache :: params . Името след двойното двоеточие трябва да споделя име с файла. Anакоизраз се използва за дефиниране на параметрите, извличане от информацията, предоставена от Фактор , Puppet има по-бърза инсталация като част от самата инсталация. Тук Facter ще свали семейството на операционната система (osfamily), за да разберете дали е такачервена шапкаилиБазиран на Debian.

С окончателно дефинираните параметри трябва да извикаме params.pp файл и параметрите вinit.pp. За да направите това, трябва да добавим параметрите след името на класа, но преди отварящата се къдрава скоба({).

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

клас apache ($ apachename = $ :: apache :: params :: apachename,) наследява :: apache :: params {пакет {'apache': name => $ apachename, осигурете => присъства,}}

Низът на стойността $ :: apache :: params :: value казва на Puppet да изтегли стойностите от апаш модули, параметри клас, последвано от името на параметъра. Фрагментът наследява :: apache :: params позволяваinit.ppза да наследят тези стойности.

Стъпка 2: Управление на конфигурационните файлове

Конфигурационният файл на Apache ще бъде различен в зависимост от това дали работите на система, базирана на Red Hat или Debian.

В края на тази демонстрация можете да намерите следните файлове със зависимости:httpd.conf(Червена шапка),apache2.conf(Debian).

  • Копирайте съдържанието на httpd.conf иapache2.confв отделни файлове и ги запишете в файлове директорияв / etc / 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 master на файловете, създадени по-горе.

Отвориparams.ppфайл.

как да компилирам в java -

Ние определяме $ conffile и $ confsourceпроменливи вакоизявление:

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

ако $ :: 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 {...

Трябва да добавим параметрите в началото наапашдекларация на клас вinit.ppфайл, подобен на предишния пример.

Когато конфигурационният файл се промени, Apache трябва да се рестартира. За да автоматизираме това, можем да използваме ресурса на услугатав комбинация с уведомявам атрибут, който ще извика ресурса да се изпълнява при промяна на конфигурационния файл:

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

файл {'конфигурационен файл': път => $ conffile, осигурете => файл, източник => $ confsource, известяване => Услуга ['apache-услуга'],} услуга {'apache-услуга': име => $ apachename, hasrestart => true,}

обслужване ресурс използва вече създадения параметър, който дефинира името на Apache в системите Red Hat и Debian.
hasrestart атрибут се използва за задействане на рестартиране на дефинираната услуга.

Стъпка 3: Създайте файловете на виртуалния хост

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

  • Отвътреapache / манифести /директория, създайте и отворете avhosts.ppфайл. Добавете скелета наакоизявление:

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

клас apache :: vhosts {if $ :: osfamily == 'RedHat' {} elsif $ :: osfamily == 'Debian' {} else {}}

Местоположението на виртуалния хостов файл на нашия сървър CentOS 7 е/etc/httpd/conf.d/vhost.conf . Трябва да създадете файла като шаблон на Puppet master. Направете същото за файла на виртуалните хостове на Ubuntu, който се намира на/etc/apache2/sites-available/example.com.conf, заместващexample.comс FQDN на сървъра.

  • Придвижете се до шаблони файл в апаш модул и след това създайте два файла за вашите виртуални хостове:

За системи 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 комбинираниИзискване на всички предоставени

В тези файлове използваме само две променливи: административна поща и Име на сървъра . Ще ги дефинираме на база възел по възел в рамките наsite.ppфайл.

  • Върнете се вvhosts.ppфайл. Създадените шаблони вече могат да бъдат посочени в кода:

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

как да зададете път в java -
клас apache :: vhosts {if $ :: osfamily == 'RedHat' {файл {'/etc/httpd/conf.d/vhost.conf': осигурете => файл, съдържание => шаблон ('apache / vhosts-rh .conf.erb '),}} elsif $ :: osfamily ==' Debian '{файл {' /etc/apache2/sites-available/$servername.conf ': осигурете => файл, съдържание => шаблон (' apache /vhosts-deb.conf.erb '),}} else {неуспешно (' Това не се поддържа дистрибуция. ')}}

И двете семейства за разпределение се обаждат нафайлресурс и поемете заглавието на местоположението на виртуалния хост в съответната дистрибуция. За Debian това още веднъж означава позоваване на$ servernameстойност. Theсъдържаниеattribute извиква съответните шаблони.

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

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

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

Стъпка 4: Тествайте модула

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

sudo / opt / puppetlabs / bin / puppet parser валидира init.pp params.pp vhosts.pp

Трябва да се върне празно, без проблеми.

  • Придвижете се до примери директория вапашмодул. Създайте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 apply --noop init.pp

Той не трябва да връща грешки и да извежда, че ще задейства опресняване от събития. За да инсталирате и конфигурирате apache на Puppet master, стартирайте отново без–Не, ако е така желано.

  • Придвижете се обратно до главната куклена директория и след това допроявявапапка (нетози, който присъства в модула Apache).

cd / etc / puppetlabs / code / environment / production / manifests

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

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

възел 'puppet-agent-ubuntu.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'puppet.example.com' включва apache включва apache :: vhosts} възел 'puppet-agent-centos.example .com '{$ adminemail =' webmaster@example.com '$ servername =' puppet.example.com 'включва apache включва apache :: vhosts}

По подразбиране услугата Puppet agent на вашите управлявани възли автоматично ще проверява с главния веднъж на всеки 30 минути и ще прилага всички нови конфигурации от главния. Можете също така ръчно да извикате процеса на куклен агент между автоматичните изпълнения на агента. За да стартирате ръчно новия модул на вашите възли на агент, влезте в тях и изпълнете:

sudo / opt / puppetlabs / bin / куклен агент -t

След като научихме как да създаваме модул от нулата, нека се научим как да използваме съществуващ модул от кукленската ковачница на куклени лаборатории.

Използвайте модул от PuppetForge

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

Уверете се, че сте в / etc / puppetlabs / код / ​​среди / производство / модули директория и инсталирайте MySQL модул на Puppet Forge от PuppetLabs. Това също ще инсталира всички необходими модули.

cd / etc / puppetlabs / код / ​​среди / производство / модули

sudo / opt / puppetlabs / bin / куклен модул инсталирайте puppetlabs-mysql

Използвайте Hiera за създаване на бази данни

Преди да създадете конфигурационните файлове за модула MySQL, помислете, че може да не искате да използвате едни и същи стойности във всички възли на агента. За да предоставим на Puppet правилните данни за възел, използваме Hiera. Ще използвате различна коренна парола за възел, като по този начин създавате различни бази данни на MySQL.

  • Отидете до/ и т.н. / марионеткаи създайте конфигурационния файл на Hierahiera.yamlв главнотоКуклендиректория. Ще използвате стойностите по подразбиране на Hiera:

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

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

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

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

Ние използвамеобщ.ямлфайлкогато променлива не е дефинирана другаде. Това означава, че всички сървъри ще споделят една и съща парола на MySQL. Тези пароли могат да се хешират и за повишаване на сигурността.

  • За да използвате настройките по подразбиране на модула MySQL, можете да добавите включва ‘:: mysql :: server’ линия доsite.ppфайл. В този пример обаче ще замените някои от настройките по подразбиране на модула, за да създадете база данни за всеки от вашите възли.

Редактирайтеsite.ppфайл със следните стойности:

възел 'Puppetagent-ubuntu.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostname.example.com' включва apache включва apache :: vhosts включва mysql :: server mysql :: db {'mydb_ $ {fqdn} ': user =>' myuser ', парола =>' mypass ', dbname =>' mydb ', host => $ :: fqdn, grant => [' SELECT ',' UPDATE '], tag = > $ домейн,}} възел 'Puppetagent-centos.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostname.example.com' включва apache включва apache :: vhosts включва mysql :: сървър mysql :: db {'mydb _ $ {fqdn}': потребител => 'myuser', парола => 'mypass', dbname => 'mydb', хост => $ :: fqdn, grant => ['SELECT', ' АКТУАЛИЗАЦИЯ '], маркер => $ домейн,}}

Автоматизиране на инсталирането на куклени модули от куклен майстор до куклен агент

  • Можете да стартирате тези актуализации ръчно на всеки възел, като SSHing във всеки възел и издадете следната команда:

sudo / opt / puppetlabs / bin / куклен агент -t

  • В противен случай услугата Puppet agent на управляваните от вас възли автоматично ще проверява с главния веднъж на всеки 30 минути и ще прилага всички нови конфигурации от главния.

Каталогът е приложен успешно в агента на Ubuntu

Каталогът е приложен успешно за агент CentOS

По този начин цялата инсталация получава автоматизирани на възлите на агента, като просто приложите каталога.Кодовите файлове и зависимости, използвани за тази демонстрация, могат да бъдат намерени тук .

Надявам се, че тази демонстрация ви е помогнала да получите ясна представа за куклени модули и манифести и тяхното използване за автоматизиране на ИТ инфраструктурата.В този случай работата ви става толкова лесна, просто посочете конфигурациите в Puppet Master и агентите Puppet автоматично ще оценят основния манифест и ще приложат модула, който определя настройките на Apache и MySQL. Ако сте останали с някакви запитвания, моля не се колебайте да ги публикувате .

Ако сте намерили това Куклен урок подходящо, вижте от Edureka, доверена компания за онлайн обучение с мрежа от над 250 000 доволни учащи, разпространени по целия свят. Курсът за обучение за сертифициране Edureka DevOps помага на обучаващите се да придобият опит в различни процеси и инструменти на DevOps като Puppet, Jenkins, Nagios и GIT за автоматизиране на множество стъпки в SDLC.