Ako používať bábkové moduly na automatizáciu infraštruktúry IT?



Praktický bábkový tutoriál, ktorý hovorí o napísaní bábkového modulu a použití manifestu na automatizáciu a údržbu IT infraštruktúry organizácie.

Predtým správcovia systému na spustenie svojich serverov využívali shell skripty a táto metóda mala nulovú škálovateľnosť. Neodolateľnou úlohou je neustále upravovať skripty pre stovky alebo tisíce neustále sa meniacich serverov a ich systémových konfigurácií.

V tomto článku o bábkové moduly a manifesty Pozrime sa, ako by sme mohli použiť bábkové moduly na automatizáciu nastavenia servera, inštaláciu programu a správu systému.





Tento blog sa bude zaoberať nasledujúcimi témami:

Úvod do programovania bábok

Bábka je jeden z populárne používaných nástrojov DevOps, ktorý sa široko používa na správu konfigurácie. Používa sa na uskutočnenie dôslednosť v infraštruktúre. Puppet môže definovať infraštruktúru ako kód, spravovať viac serverov a vynucovať konfiguráciu systému, čo pomáha pri automatizácii procesu správy infraštruktúry.



Bábka mávlastný konfiguračný jazyk, Bábkové DSL . Rovnako ako v prípade iných programov DevOps, Puppet automatizuje zmeny a eliminuje manuálne zmeny riadené skriptom. Puppet však nie je iba ďalší shell jazyk, ani nejde o čistý programovací jazyk, napríklad PHP. Namiesto toho používa Puppetdo deklaratívny model založený na prístupe k automatizácii IT. To umožňuje spoločnosti Puppet definovať infraštruktúru ako kód a vynútiť konfiguráciu systému pomocou programov.

Predtým, ako sa pustíme do ukážky, pozrime sa na niekoľko základných aspektov bábkového programovania.

power bi vs tablo 2016

Kľúčové pojmy v programovaní bábok

Prejavy

Bábkový program sa nazýva prejav a má názov súboru s .pp predĺženie. Predvolený hlavný manifest bábky je /etc/puppet/manifests/site.pp . (Toto definujeglobálne konfigurácie systému, ako je konfigurácia LDAP, servery DNS alebo iné konfigurácie, ktoré sa vzťahujú na každý uzol).



Triedy

V rámci týchto manifestov sa nazývajú bloky kódu triedy môžu volať ďalšie moduly. Triedy konfigurujú veľké alebo stredne veľké bloky funkcií, ako sú všetky balíky, konfiguračné súbory a služby potrebné na spustenie aplikácie. Triedy uľahčujú opätovné použitie kódu bábky a zlepšujú čitateľnosť.

Zdroje

Bábkový kód je tvorený väčšinou z deklarácií zdrojov. A zdroj popisuje konkrétny prvok o požadovanom stave systému. Môže napríklad zahŕňať, že by mal existovať konkrétny súbor alebo mal by byť nainštalovaný balík.

Bábkové moduly

Okrem hlavnejsite.ppmanifest,ukladá manifestyv modulov .

Celý náš kód bábky je usporiadaný do modulov, ktoré sú základnými stavebnými kameňmi bábky, ktoré môžeme opakovane používať a zdieľať. Každý modul spravuje konkrétnu úlohu v infraštruktúre, napríklad inštaláciu a konfiguráciu softvéru.

Moduly obsahujú triedy bábok, definované typy, úlohy, plány úloh, kapacity, typy zdrojov a doplnky, napríklad vlastné typy alebo fakty. Nainštalujte moduly do bábkycesta modulu. Bábkové načítajú všetok obsah z každého modulu v ceste k modulu, čím sprístupňujú tento kód na použitie.

Moduly - Bábkové programovanie - EdurekaPuppetlabs má preddefinované moduly, ktoré môžeme okamžite použiť tak, že si ich stiahneme PuppetForge . Môžete tiež vytvoriť vlastný bábkový modul, ktorý vyhovie vašim požiadavkám.

Pracovný postup bábkového programu

Na označenie požadovaného stavu systému v súboroch nazývaných manifesty použijeme deklaratívny jazyk Puppet. Manifesty popisujú, ako by ste mali nakonfigurovať svoje sieťové a operačné systémy, ako sú súbory, balíky a služby.

Bábka sa zostavuje do katalógy a použije každý katalóg na jeho zodpovedajúci uzol, aby zabezpečil konfiguráciu tuzol je správnycez vašu infraštruktúru.

Ukážka: Automatizácia inštalácie Apache a MySQL

Tento článok o bábkových moduloch je praktický, ktorý ukazuje dva spôsoby použitia bábkového modulu a zároveň vás naučí, ako na to automatizovať inštalácia servera nakonfigurovaného s týmito dvoma modulmi.

Najskôr sa uistite, že máte pripravenú infraštruktúru bábok, ktorá obsahuje server majstra bábok a 2 agentov bábok.

  • Bábkar: Ubuntu 18.04
  • Agent 1: Ubuntu 18.04
  • Agent 2:CentOS7

Tu je náčrt toho, čo dosiahneme v tomto praktickom cvičení:


Začnime teda praktickým:

Vytvorenie modulu od nuly

V tomto bábkovom module sa budeme zaoberať úlohami, ako je stiahnutie balíka Apache, konfigurácia súborov a nastavenie virtuálnych hostiteľov.

  • V hre Puppet Master prejdite do adresára modulu Puppet a vytvorte adresár Apache:
    cd / etc / puppet / modules sudo mkdir apache
  • Z vnútra adresára apache vytvorte podadresáre: manifesty, šablóny, súbory a príklady.
    cd apache sudo mkdir {manifesty, šablóny, súbory, príklady}
  • Prejdite do adresára manifestov:
    cd manifesty
  • Od tejto chvíle modul rozdelíme do tried na základe cieľov tejto časti kódu.

init.pp -> na stiahnutie balíka Apache

params.pp -> definovať ľubovoľné premenné a parametre

config.pp -> na správu akýchkoľvek konfiguračných súborov pre službu Apache.

vhosts.pp -> definovať virtuálnych hostiteľov.

Tento modul bude tiež využívať Hiera (vstavaný vyhľadávací systém konfiguračných údajov kľúč - hodnota, ktorý sa používa na oddelenie údajov od údajov z Puppet kódu), na ukladanie premenných pre každý uzol.

Krok 1: Stiahnutie balíka Apache

Vytvorte triedu init.pp

Teraz vytvorímeinit.ppsúbor v adresári manifestov na uloženie balíka apache.
Pretože máme 2 rôzne OS (ubuntu a CentOS7), ktoré pre Apache používajú rôzne názvy balíkov, budeme musieť použiť premennú$ apachename.

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

trieda apache {balík {'apache': name => $ apachename, zabezpečiť => prítomný,}}

balíček prostriedok umožňuje správu balíka. Používa sa na pridanie, odstránenie alebo zaistenie prítomnosti balíka.

Vo väčšine prípadov názov zdroja (apache, vyššie) by mal byť názov spravovaného balíka. Z dôvodu rôznych konvencií pomenovanianazývame skutočný názov balíkas názov odkaz. Takže názov , požaduje zatiaľ nedefinovanú premennú$ apachename.

zaistiť odkaz zabezpečí, že balík jeprítomný.

Vytvorte súbor params.pp

Theparams.ppsúbor definuje potrebné premenné. Aj keď by sme mohli tieto premenné definovať v rámciinit.ppsúbor, pretože mimo samotného typu prostriedku bude potrebné použiť viac premenných pomocou aparams.ppsúbor umožňuje definovať premenné v systéme Windowsakvýkazy a používajú sa vo viacerých triedach.

Vytvorparams.ppsúbor a nasledujúci kód.

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

trieda apache :: params {if $ :: osfamily == 'RedHat' {$ apachename = 'httpd'} elsif $ :: osfamily == 'Debian' {$ apachename = 'apache2'} else {fail ('toto nie je podporovaná distribúcia. ')}}

Mimo originálu init.pptriedy, od ktorého sa musí oddeľovať každý názov triedyapache. Túto triedu nazývame ako apache :: params . Meno za dvojbodkou by malo zdieľať meno so súborom. Anakpríkaz sa používa na definovanie parametrov, vychádzajúc z informácií poskytnutých Faktor „Puppet má inštaláciu facter ako súčasť svojej vlastnej inštalácie. Facter tu stiahne rodinu operačných systémov (osfamily), aby sa zistilo, či ječervený klobúkaleboZaložené na Debiane.

Keď sú parametre konečne definované, musíme zavolať params.pp súbor a parametre doinit.pp. Aby sme to dosiahli, musíme pridať parametre za názov triedy, ale pred úvodnú zloženú zátvorku({).

Takžeinit.ppktoré sme vytvorili skôr, by mali vyzerať asi takto:

trieda apache ($ apachename = $ :: apache :: params :: apachename,) zdedí :: apache :: params {balíček {'apache': name => $ apachename, zabezpečiť => prítomný,}}

Reťazec hodnoty $ :: apache :: params :: value povie Puppet, aby vytiahla hodnoty z apache moduly, params triedy, za ktorým nasleduje názov parametra. Fragment dedí :: apache :: parametre umožňujeinit.ppdediť tieto hodnoty.

Krok 2: Správa konfiguračných súborov

Konfiguračný súbor Apache sa bude líšiť v závislosti od toho, či pracujete na systéme založenom na Red Hat alebo Debian.

Na konci tejto ukážky nájdete nasledujúce súbory závislostí:httpd.conf(Červený klobúk),apache2.conf(Debian).

  • Skopírujte obsah httpd.conf aapache2.confv samostatných súboroch a uložiť ich do priečinka súbory adresáro / etc / puppetlabs / code / prostredia / výroba / moduly / apache / súbory .
  • Upravte oba súbory na zakázať udržať nažive. Bude potrebné pridať riadok KeepAlive vypnuté vhttpd.confspis. Ak nechcete toto nastavenie meniť, mali by sme do ich hornej časti pridať komentárspis:
    /etc/puppetlabs/code/environments/production/modules/apache/files/httpd.conf
# Tento súbor spravuje bábka

Pridajte tieto súbory do priečinkainit.ppsúbor, takže Puppet bude poznať umiestnenie týchto súborov na uzloch hlavného servera aj agenta. K tomu používame spis zdroj.

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

súbor {'configuration-file': path => $ conffile, ensure => súbor, zdroj => $ confsource,}

Pretože máme konfiguračné súbory na dvoch rôznych miestach, poskytneme prostriedku všeobecný názov konfiguračný súbor so spisom cesta definované ako parameter scestaatribút.

zaistiť zaisťuje, že ide o súbor.

zdroj poskytuje umiestnenie súborov vytvorených vyššie na Puppet master.

Otvorparams.ppspis.

Definujeme $ konzola a $ confsourcepremenné v rámciakvyhlásenie:

/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 {...

Musíme pridať parametre na začiatokapachedeklarácia triedy vinit.ppsúbor, podobný predchádzajúcemu príkladu.

Keď sa zmení konfiguračný súbor, musí sa Apache reštartovať. Aby sme to automatizovali, môžeme použiť zdroj službyv kombinácii s oznámiť atribút, ktorý vyvolá spustenie prostriedku pri každej zmene konfiguračného súboru:

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

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

služby prostriedok používa už vytvorený parameter, ktorý definoval názov Apache v systémoch Red Hat a Debian.
hasrestart atribút sa používa na spustenie reštartu definovanej služby.

qlikview návod krok za krokom

Krok 3: Vytvorte súbory virtuálneho hostiteľa

V závislosti od distribúcie vášho systému budú súbory virtuálneho hostiteľa spravované odlišne. Z tohto dôvodu zapíšeme kód pre virtuálnych hostiteľov do súboruakvyhlásenie podobné príkazu použitému vparams.pptriedy, ale obsahujúce skutočné zdroje Bábky.

  • Z vnútraapache / manifesty /adresár, vytvorte a otvorte avhosts.ppspis. Pridajte kostruakvyhlásenie:

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

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

Umiestnenie súboru virtuálneho hostiteľa na našom serveri CentOS 7 je/etc/httpd/conf.d/vhost.conf . Súbor musíte vytvoriť ako šablónu na bábkovom majstrovi. To isté urobte pre súbor virtuálnych hostiteľov Ubuntu, ktorý sa nachádza na/etc/apache2/sites-available/example.com.conf, nahradzujúciexample.coms FQDN servera.

  • Prejdite na ikonu šablóny súbor v rámci apache modul a potom vytvorte dva súbory pre svojich virtuálnych hostiteľov:

Pre systémy 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 kombinované

Pre systémy 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 kombinovanéVyžadovať všetky udelené

V týchto súboroch používame iba dve premenné: adminemail a názov servera . Definujeme ich na uzle po uzle v rámcisite.ppspis.

  • Vráťte sa dovhosts.ppspis. Na vytvorené šablóny sa teraz dá odkazovať v kóde:

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

trieda apache :: vhosts {if $ :: osfamily == 'RedHat' {súbor {'/etc/httpd/conf.d/vhost.conf': zabezpečiť => súbor, obsah => šablóna ('apache / vhosts-rh .conf.erb '),}} elsif $ :: osfamily ==' Debian '{súbor {' /etc/apache2/sites-available/$servername.conf ': zaistiť => súbor, obsah => šablóna (' apache /vhosts-deb.conf.erb '),}} else {fail (' Toto nie je podporované distro. ')}}

Obe distribučné rodiny volajú dospiszdroj a prevziať názov umiestnenia virtuálneho hostiteľa v príslušnej distribúcii. Pre Debian to znamená ešte raz odkazovanie na$ názov serverahodnotu. Theobsahatribút zavolá príslušné šablóny.

  • Oba súbory virtuálneho hostiteľa odkazujú na dva adresáre. Predvolene nie sú v systémoch. Môžeme ich vytvoriť pomocou súboruspiszdroj, každý v rámciakvyhlásenie. Kompletnývhosts.confsúbor by mal pripomínať:

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

trieda apache :: vhosts {if $ :: osfamily == 'RedHat' {súbor {'/etc/httpd/conf.d/vhost.conf': zabezpečiť => súbor, obsah => šablóna ('apache / vhosts-rh .conf.erb '),} súbor {[' / var / www / $ servername ',' / var / www / $ servername / public_html ',' / var / www / $ servername / log ',]: zabezpečiť => adresár,}} elsif $ :: osfamily == 'Debian' {súbor {'/etc/apache2/sites-available/$servername.conf': zaistiť => súbor, obsah => šablóna ('apache / vhosts-deb. conf.erb '),} súbor {[' / var / www / $ servername ',' / var / www / $ servername / public_html ',' / var / www / $ servername / logs ',]: zabezpečiť => adresár ,}} else {fail ('Toto nie je podporované distro.')}}

Krok 4: Vyskúšajte modul

  • Prejdite na ikonuapache / manifesty /adresár, spustite analyzátor bábok na všetkých súboroch, aby bolo zaistené bezchybné kódovanie bábky:

sudo / opt / puppetlabs / bin / puppet parser overiť init.pp params.pp vhosts.pp

Mal by sa vrátiť prázdny a bez problémov.

  • Prejdite na ikonu príklady adresár v rámciapachemodul. Vytvorteinit.ppsúbor a zahrnúť vytvorené triedy. Nahraďte hodnoty pre$ názov serveraa$ adminemails vlastnými:

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

serveremail = 'webmaster@example.com' $ servername = 'puppet.example.com' zahrnúť apache zahrnúť apache :: vhosts
  • Otestujte modul spustením bábka s –Nie značka:
    sudo / opt / puppetlabs / bin / puppet apply --noop init.pp

Nemal by vracať žiadne chyby a výstup, ktorý spustí obnovenie z udalostí. Ak chcete nainštalovať a nakonfigurovať apache na Puppet master, spustite znovu bez–Nie, ak je to požadované.

  • Prejdite späť do hlavného adresára Puppet a potom doprejavujepriečinok (niemodul prítomný v module Apache).

cd / etc / puppetlabs / code / prostredia / výroba / manifesty

rozdiel medzi triedou a rozhraním

Vytvorsite.pppilník,a zahrnúť modul Apache pre každý uzol agenta. Zadajte tiež premenné preadminemail a názov serveraparametre. Vášsite.ppby malo pripomínať nasledovné:

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

uzol 'puppet-agent-ubuntu.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'puppet.example.com' zahrnúť apache zahrnúť apache :: vhosts} uzol 'puppet-agent-centos.example .com '{$ adminemail =' webmaster@example.com '$ servername =' puppet.example.com 'zahrnúť apache zahrnúť apache :: vhosts}

V predvolenom nastavení služba bábkového agenta na vašich spravovaných uzloch automaticky skontroluje s hlavným serverom každých 30 minút a použije všetky nové konfigurácie z hlavného servera. Proces bábkového agenta môžete tiež vyvolať medzi automatickými spusteniami agentov. Ak chcete nový modul manuálne spustiť vo svojich uzloch agenta, prihláste sa do uzlov a spustite:

sudo / opt / puppetlabs / bin / bábkový agent -t

Teraz, keď sme sa naučili, ako vytvoriť modul od nuly, poďme sa naučiť, ako používať už existujúci modul z kovárne bábok.

Použite modul z PuppetForge

Puppet Forge už má veľa modulov na spustenie servera. Môžeme ich nakonfigurovať rovnako rozsiahlo ako modul, ktorý ste vytvorili, a môžeme ušetriť čas, pretože modul nemusíme vytvárať úplne od začiatku.

Uistite sa, že ste v priečinku / etc / puppetlabs / code / prostredia / výroba / moduly adresár a nainštalovať Modul MySQL spoločnosti Puppet Forge autor: PuppetLabs. Týmto sa tiež nainštalujú všetky nevyhnutné moduly.

cd / etc / puppetlabs / code / prostredia / výroba / moduly

sudo / opt / puppetlabs / bin / puppet modul nainštalovať puppetlabs-mysql

Použite Hieru na vytváranie databáz

Pred vytvorením konfiguračných súborov pre modul MySQL zvážte, že možno nebudete chcieť používať rovnaké hodnoty vo všetkých uzloch agenta. Na dodanie správnych údajov Puppet pre každý uzol používame Hiera. Pre každý uzol budete používať iné heslo root, čím vytvoríte rôzne databázy MySQL.

  • Prejdite na/ atď / bábkaa vytvorte Hierin konfiguračný súborhiera.yamlv hlavnombábkaadresár. Použijete predvolené hodnoty Hiera:

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

--- verzia: 5 hierarchia: - názov: spoločná cesta: common.yaml predvolené: data_hash: yaml_data datadir: data
  • Vytvorte súborobyčajný.yaml. Definuje predvolené nastavenie koreň heslo pre MySQL:

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

mysql :: server :: root_password: 'heslo'

Používameobyčajný.yamlspiskeď premenná nie je inde definovaná. To znamená, že všetky servery budú zdieľať rovnaké heslo root root MySQL. Tieto heslá je tiež možné hašovať, aby sa zvýšila bezpečnosť.

  • Ak chcete použiť predvolené nastavenia modulu MySQL, môžete pridať zahrnúť „:: mysql :: server“ linka dosite.ppspis. V tomto príklade však prepíšete niektoré predvolené hodnoty modulu a vytvoríte databázu pre každý z vašich uzlov.

Upravtesite.ppsúbor s nasledujúcimi hodnotami:

uzol 'Puppetagent-ubuntu.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostname.example.com' zahrnúť apache zahrnúť apache :: vhosts zahrnúť mysql :: server mysql :: db {'mydb_ $ {fqdn} ': user =>' myuser ', heslo =>' mypass ', dbname =>' mydb ', host => $ :: fqdn, grant => [' SELECT ',' UPDATE '], tag = > $ doména,}} uzol 'Puppetagent-centos.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostname.example.com' zahrnúť apache zahrnúť apache :: vhosts zahrnúť mysql :: server mysql :: db {'mydb _ $ {fqdn}': user => 'myuser', heslo => 'mypass', dbname => 'mydb', hostiteľ>> $ :: fqdn, grant => ['SELECT', ' UPDATE '], značka => $ doména,}}

Automatizácia inštalácie bábkových modulov od bábkara po bábkového agenta

  • Tieto aktualizácie môžete spustiť manuálne na každom uzle pomocou SSHing do každého uzla a zadaním nasledujúceho príkazu:

sudo / opt / puppetlabs / bin / bábkový agent -t

  • V opačnom prípade služba bábkového agenta na vašich spravovaných uzloch automaticky skontroluje s hlavným serverom každých 30 minút a použije všetky nové konfigurácie z hlavného servera.

Katalóg sa úspešne použil na agenta Ubuntu

Katalóg bol úspešne použitý na agentovi CentOS

Takto sa získa celá inštalácia automatizované na uzloch agenta jednoduchým použitím katalógu.Súbory kódov a závislosti použité pre túto ukážku nájdete tu .

Dúfam, že vám táto ukážka pomohla získať jasnú predstavu o bábkových moduloch a manifestoch a ich použití na automatizáciu IT infraštruktúry.V takom prípade bude vaša práca taká ľahká, stačí zadať konfigurácie v Puppet Master a Puppet agenti automaticky vyhodnotia hlavný manifest a použijú modul, ktorý špecifikuje nastavenie Apache a MySQL. Ak narazíte na akékoľvek otázky, neváhajte ich uverejniť .

Ak ste to našli Výukový program pre bábky relevantné, pozrite sa na autor: Edureka, dôveryhodná online vzdelávacia spoločnosť so sieťou viac ako 250 000 spokojných študentov rozmiestnených po celom svete. Kurz certifikácie EdOkaka DevOps Certification Training pomáha študentom získať odborné znalosti v rôznych procesoch a nástrojoch DevOps, ako sú Puppet, Jenkins, Nagios a GIT na automatizáciu viacerých krokov v SDLC.