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
- Kľúčové pojmy v programovaní bábok
- Pracovný postup bábkového programu
- Demonštrácia: Automatizácia inštalácie Apache a MySQL
Ú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.pp
manifest,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.
Puppetlabs 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.pp
sú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.pp
súbor definuje potrebné premenné. Aj keď by sme mohli tieto premenné definovať v rámciinit.pp
súbor, pretože mimo samotného typu prostriedku bude potrebné použiť viac premenných pomocou aparams.pp
súbor umožňuje definovať premenné v systéme Windowsakvýkazy a používajú sa vo viacerých triedach.
Vytvorparams.pp
sú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.pp
triedy, 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úk
aleboZalož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.pp
ktoré 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.pp
dediť 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.conf
v 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é v
httpd.conf
spis. 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.pp
sú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.pp
spis.
Definujeme $ konzola
a $ confsource
premenné 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.pp
sú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.pp
triedy, ale obsahujúce skutočné zdroje Bábky.
- Z vnútraapache / manifesty /adresár, vytvorte a otvorte a
vhosts.pp
spis. 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.pp
spis.
- Vráťte sa do
vhosts.pp
spis. 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 servera
hodnotu. 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.conf
sú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 ikonu
apache / 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. Vytvorte
init.pp
súbor a zahrnúť vytvorené triedy. Nahraďte hodnoty pre$ názov servera
a$ adminemail
s 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.pp
pilník,a zahrnúť modul Apache pre každý uzol agenta. Zadajte tiež premenné preadminemail
a názov servera
parametre. Vášsite.pp
by 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ábka
a vytvorte Hierin konfiguračný súborhiera.yaml
v 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úbor
obyčajný.yaml
. Definuje predvolené nastavenie koreň heslo pre MySQL:
/etc/puppetlabs/code/environments/production/common.yaml
mysql :: server :: root_password: 'heslo'
Používameobyčajný.yaml
spiskeď 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 do
site.pp
spis. 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.pp
sú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.