Kako koristiti lutkarske module za automatizaciju IT infrastrukture?

Praktični lutkarski vodič koji govori o pisanju lutkarskog modula i korištenju manifesta za automatizaciju i održavanje IT infrastrukture organizacije.

Prije su sistemski administratori koristili ljuske skripte za pokretanje svojih poslužitelja, a ova metoda nije imala skalabilnost. Zastrašujući je zadatak neprestano mijenjati skripte za stotine ili tisuće poslužitelja koji se stalno mijenjaju i njihove konfiguracije sustava.



U ovom članku o lutkarski moduli i manifesti pogledajmo kako bismo mogli koristiti lutkarske module za automatizaciju postavljanja poslužitelja, instalacije programa i upravljanja sustavom.



Ovaj će blog pokrivati ​​sljedeće teme:

Uvod u lutkarsko programiranje

Lutka jedan je od popularno korištenih alata DevOps koji se široko koristi za upravljanje konfiguracijom. Koristi se za postizanje dosljednost u Infrastrukturi. Lutka može definirati infrastrukturu kao kod, upravljati s više poslužitelja i provoditi konfiguraciju sustava, pomažući tako u automatizaciji procesa upravljanja infrastrukturom.



Lutka imavlastiti jezik konfiguracije, Lutkarski DSL . Kao i kod ostalih programa DevOps, Lutka automatizira promjene, uklanjajući ručne promjene vođene skriptama. Međutim, Lutka nije samo drugi jezik ljuske, niti je čisti programski jezik, kao što je PHP. Umjesto toga, Lutka koristido pristup zasnovan na deklarativnom modelu do IT automatizacije. To omogućuje Puppetu da definira infrastrukturu kao kod i provodi konfiguraciju sustava s programima.

Prije nego što nastavimo s demonstracijom, pogledajmo nekoliko osnovnih aspekata lutkarskog programiranja.

kako instalirati chef server -

Ključni pojmovi u lutkarskom programiranju

Manifesti

Nazvan je lutkarski program očitovati i ima naziv datoteke sa .pp produženje. Lutkov zadani glavni manifest je /etc/puppet/manifests/site.pp . (Ovo definiraglobalne konfiguracije sustava, poput LDAP konfiguracije, DNS poslužitelja ili drugih konfiguracija koje se primjenjuju na svaki čvor).



Nastava

Unutar ovih manifesta nalaze se kodni blokovi razreda drugi moduli mogu nazvati. Klase konfiguriraju velike ili srednje velike dijelove funkcionalnosti, kao što su svi paketi, konfiguracijske datoteke i usluge potrebne za pokretanje aplikacije. Klase olakšavaju ponovnu upotrebu lutkarskog koda i poboljšavaju čitljivost.

Resursi

Lutkarski kod sastoji se uglavnom od deklaracija resursa. A resurs opisuje određeni element o željenom stanju sustava. Na primjer, može uključivati ​​da treba postojati određena datoteka ili da se instalira paket.

Lutkarski moduli

Osim glavnogsite.ppmanifest,pohranjuje manifestau modula .

Sav naš Lutkarski kôd organiziran je u module koji su osnovni gradivni elementi lutke koje možemo ponovno koristiti i dijeliti. Svaki modul upravlja određenim zadatkom u infrastrukturi, poput instaliranja i konfiguriranja dijela softvera.

Moduli sadrže lutkarske razrede, definirane vrste, zadatke, planove zadataka, kapacitete, vrste resursa i dodatke, na primjer prilagođene vrste ili činjenice. Instalirajte module u Lutkumodul-put. Lutka učitava sav sadržaj iz svakog modula na putu modula, čineći ovaj kod dostupnim za upotrebu.

Moduli - Lutkarsko programiranje - EdurekaPuppetlabs ima unaprijed definirane module koje možemo odmah koristiti preuzimanjem s njih Lutkarska kovačnica . Možete stvoriti i prilagođeni lutkarski modul koji odgovara vašim zahtjevima.

Tok rada lutkarskog programa

Upotrijebit ćemo Puppetov deklarativni jezik za opisivanje željenog stanja sustava u datotekama koje se nazivaju manifesti. Manifesti opisuju kako biste trebali konfigurirati mrežu i resurse operativnog sustava, kao što su datoteke, paketi i usluge.

Lutka sastavlja manifeste u katalozi i primjenjuje svaki katalog na njegov odgovarajući čvor kako bi osigurao da je konfiguracija ton je čvor ispravanpreko vaše infrastrukture.

Demonstracija: Automatizacija instalacije Apache & MySQL

Ovaj je članak o lutkarskim modulima praktičan, koji će pokazati dva načina korištenja lutkarskog modula, a također će vas naučiti kako automatizirati instalacija poslužitelja konfiguriranog s ova dva modula.

Za početak osigurajte da imate pripremljenu lutkarsku infrastrukturu koja će sadržavati lutkarski poslužitelj i 2 lutkarska agenta.

  • Lutkar: Ubuntu 18.04
  • Agent 1: Ubuntu 18.04
  • Agent 2:CentOS7

Evo opisa onoga što ćemo postići u ovom praktičnom radu:


Pa započnimo s praktičnim:

Izrada modula od nule

U ovom lutkarskom modulu bavit ćemo se zadacima poput preuzimanja paketa Apache, konfiguriranja datoteka i postavljanja virtualnih hostova.

  • Iz Puppet Master-a dođite do direktorija Lutkinih modula i stvorite Apache direktorij:
    cd / etc / puppet / modules sudo mkdir apache
  • Iznutra u direktoriju apache izradite poddirektorijume: manifesta, predloške, datoteke i primjere.
    cd apache sudo mkdir {manifesti, predlošci, datoteke, primjeri}
  • Idite do direktorija manifesta:
    cd manifesti
  • Odavde ćemo modul razdvojiti u razrede na temelju ciljeva tog odjeljka koda.

init.pp -> za preuzimanje paketa Apache

params.pp -> za definiranje bilo kakvih varijabli i parametara

config.pp -> za upravljanje bilo kojim konfiguracijskim datotekama za uslugu Apache.

vhosts.pp -> za definiranje virtualnih hostova.

Ovaj modul će također koristiti Hiera (ugrađeni sustav pretraživanja podataka konfiguracije ključ / vrijednost, koji se koristi za odvajanje podataka od podataka lutkarskog koda, za pohranu varijabli za svaki čvor.

Korak 1: Preuzimanje paketa Apache

Izradite klasu init.pp

Sada ćemo stvoritiinit.ppdatoteka u direktoriju manifesta koji sadrži paket apache.
Kako imamo 2 različita OS-a (ubuntu i CentOS7) koji koriste različita imena paketa za Apache, morat ćemo koristiti varijablu$ apachename.

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

klasa apache {paket {'apache': name => $ apachename, osigurati => prisutan,}}

paket resurs omogućuje upravljanje paketom. To se koristi za dodavanje, uklanjanje ili osiguravanje prisutnosti paketa.

U većini slučajeva, Ime resursa (apache, gore) trebalo bi biti ime paketa kojim se upravlja. Zbog različitih konvencija imenovanja,nazivamo stvarni naziv paketanakon s Ime referenca. Tako Ime , poziva na još nedefiniranu varijablu$ apachename.

osigurati referenca osigurava da je paketpredstaviti.

Stvorite datoteku params.pp

Theparams.ppdatoteka definirat će potrebne varijable. Iako bismo te varijable mogli definirati unutarinit.ppdatoteku, jer će više varijabli trebati koristiti izvan same vrste resursa, koristećiparams.ppdatoteka omogućuje definiranje varijabli uakoizjave i koriste se u više klasa.

Stvoritiparams.ppdatoteku i sljedeći kod.

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

klasa apache :: params {if $ :: osfamily == 'RedHat' {$ apachename = 'httpd'} elsif $ :: osfamily == 'Debian' {$ apachename = 'apache2'} else {fail ('ovo nije podržani distro. ')}}

Izvan originala init.ppklase, svaki naziv klase mora se odvojiti odapache. Ovu klasu nazivamo kao apache :: params . Ime nakon dvostruke dvotačke trebalo bi dijeliti ime s datotekom. AnakoIzjava se koristi za definiranje parametara, povlačeći se iz podataka koje pruža Faktor , Lutka ima bržu instalaciju kao dio same svoje instalacije. Ovdje će Facter srušiti obitelj operativnog sustava (osminska obitelj), raspoznati je licrveni šeširiliZasnovan na Debianu.

S konačno definiranim parametrima, moramo nazvati params.pp datoteku i parametre uinit.pp. Da bismo to učinili, parametre moramo dodati nakon naziva klase, ali prije otvaranja kovrčave zagrade({).

Dakleinit.ppšto smo stvorili ranije trebalo bi izgledati otprilike ovako:

klasa apache ($ apachename = $ :: apache :: params :: apachename,) nasljeđuje :: apache :: params {paket {'apache': name => $ apachename, osigurati => prisutan,}}

Niz vrijednosti $ :: apache :: params :: value govori Lutci da izvuče vrijednosti iz apache moduli, parametarima klase, nakon čega slijedi naziv parametra. Ulomak nasljeđuje :: apache :: params omogućujeinit.ppda naslijede ove vrijednosti.

Korak 2: Upravljanje konfiguracijskim datotekama

Datoteka za konfiguraciju Apache bit će različita, ovisno o tome radite li na sustavu koji se temelji na Red Hat-u ili Debianu.

Na kraju ove demonstracije možete pronaći sljedeće datoteke ovisnosti:httpd.conf(Crveni šešir),apache2.conf(Debian).

  • Kopirajte sadržaj httpd.conf iapache2.confu zasebne datoteke i spremite ih u datoteke imenikna / etc / puppetlabs / code / environment / production / modules / apache / files .
  • Uredite obje datoteke u onemogućiti držati na životu. Morat ćete dodati redak KeepAlive Off uhttpd.confdatoteka. Ako ne želite promijeniti ovu postavku, trebali bismo dodati komentar na vrh svakedatoteka:
    /etc/puppetlabs/code/environments/production/modules/apache/files/httpd.conf
# Ovom datotekom upravlja lutka

Dodajte ove datoteke uinit.ppdatoteku, tako da će Lutka znati mjesto tih datoteka i na glavnom poslužitelju i na čvorovima agenta. Da bismo to učinili, koristimo datoteka resurs.

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

datoteka {'configuration-file': path => $ conffile, sure => file, source => $ confsource,}

Budući da imamo konfiguracijske datoteke na dva različita mjesta, resursu dajemo generičko ime konfiguracijska datoteka s dosjeom staza definiran kao parametar sstazaatribut.

osigurati osigurava da je riječ o datoteci.

izvor pruža mjesto na Puppet masteru gore stvorenih datoteka.

Otvoriparams.ppdatoteka.

Mi definiramo $ conffile i $ confsourcevarijable unutarakoizjava:

aws pokreće instancu iz snimke

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

ako $ :: 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 {...

Moramo dodati parametre na početakapachedeklaracija klase uinit.ppdatoteku, slično kao u prethodnom primjeru.

Kada se konfiguracijska datoteka promijeni, Apache se mora ponovno pokrenuti. Da bismo to automatizirali, možemo koristiti resurs uslugeu kombinaciji s obavijestiti atribut, koji će pozvati resurs da se pokrene kad god se promijeni konfiguracijska datoteka:

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

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

servis resurs koristi već stvoreni parametar koji je definirao ime Apache na sustavima Red Hat i Debian.
hasrestart atribut koristi se za pokretanje ponovnog pokretanja definirane usluge.

Korak 3: Stvorite datoteke virtualnog hosta

Ovisno o distribuciji vašeg sustava, datotekama virtualnog hosta upravljat će se drugačije. Zbog toga ćemo kôd za virtualne hostove staviti uakoizjava, slična onoj koja se koristi uparams.ppklase, ali koja sadrži stvarne lutkarske resurse.

  • Iznutraapache / manifesti /direktorij, stvorite i otvorite avhosts.ppdatoteka. Dodajte kosturakoizjava:

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

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

Datoteka virtualnog hosta na našem CentOS 7 poslužitelju je/etc/httpd/conf.d/vhost.conf . Datoteku morate stvoriti kao predložak na Puppet masteru. Učinite isto za datoteku virtualnih hostova Ubuntu koja se nalazi na/etc/apache2/sites-available/example.com.conf, zamjenjujućiprimjer.coms FQDN-om poslužitelja.

  • Idite na predlošci datoteka unutar apache modul, a zatim stvorite dvije datoteke za svoje virtualne hostove:

Za Red Hat sustave:
/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 kombinirano

Za Debian sustave:
/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 kombiniranoZahtijevaj sve odobrene

U ovim datotekama koristimo samo dvije varijable: administratorska pošta i ime poslužitelja . Mi ćemo ih definirati od čvora do čvora, unutarsite.ppdatoteka.

  • Povratak navhosts.ppdatoteka. Na stvorene predloške sada se može pozivati ​​u kodu:

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

klasa apache :: vhosts {if $ :: osfamily == 'RedHat' {datoteka {'/etc/httpd/conf.d/vhost.conf': osigurati => datoteka, sadržaj => predložak ('apache / vhosts-rh .conf.erb '),}} elsif $ :: osfamily ==' Debian '{datoteka {' /etc/apache2/sites-available/$servername.conf ': osigurati => datoteka, sadržaj => predložak (' apache /vhosts-deb.conf.erb '),}} else {neuspjeh (' Ovo nije podržana distribucija. ')}}

Obje distribucijske obitelji pozivaju nadatotekaresursa i preuzmite naslov lokacije virtualnog domaćina na odgovarajućoj distribuciji. Za Debian ovo još jednom znači pozivanje na$ servernamevrijednost. Thesadržajatribut poziva odgovarajuće predloške.

  • Obje datoteke virtualnog hosta upućuju na dva direktorija. Oni nisu na sustavima prema zadanim postavkama. Možemo ih stvoriti pomoćudatotekaresursa, svaki unutarakoizjava. Kompletnavhosts.confdatoteka bi trebala nalikovati:

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

klasa apache :: vhosts {if $ :: osfamily == 'RedHat' {datoteka {'/etc/httpd/conf.d/vhost.conf': osigurati => datoteka, sadržaj => predložak ('apache / vhosts-rh .conf.erb '),} datoteka {[' / var / www / $ servername ',' / var / www / $ servername / public_html ',' / var / www / $ servername / log ',]: sure => direktorij,}} elsif $ :: osfamily == 'Debian' {datoteka {'/etc/apache2/sites-available/$servername.conf': osigurati => datoteka, sadržaj => predložak ('apache / vhosts-deb. conf.erb '),} datoteka {[' / var / www / $ servername ',' / var / www / $ servername / public_html ',' / var / www / $ servername / logs ',]: sure => direktorij ,}} else {fail ('Ovo nije podržana distribucija.')}}

Korak 4: Testirajte modul

  • Idite naapache / manifesti /direktorij, pokrenite lutkarski parser na svim datotekama kako bi se osiguralo da je lutkarsko kodiranje bez pogreške:

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

Trebao bi se vratiti prazan, bez problema.

  • Idite na primjeri imenik unutarapachemodul. Izraditeinit.ppdatoteku i uključuju stvorene razrede. Zamijenite vrijednosti za$ servernamei$ adminemailsa svojim:

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

serveremail = 'webmaster@example.com' $ servername = 'puppet.example.com' uključuju apache uključuju apache :: vhosts
  • Testirajte modul trčanjem lutka primijeniti s –Ne označiti:
    sudo / opt / puppetlabs / bin / puppet apply --noop init.pp

Ne bi trebao vraćati pogreške i izlaz da će pokrenuti osvježavanja iz događaja. Da biste instalirali i konfigurirali apache na Puppet masteru, pokrenite ponovo bez–Ne, ako se tako želi.

  • Vratite se natrag u glavni imenik lutaka, a zatim namanifestiramapa (neona prisutna u modulu Apache).

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

Stvoritisite.ppdatoteka,i uključuju modul Apache za svaki čvor agenta. Također unesite varijable zaadministratorska pošta i ime poslužiteljaparametri. Vašsite.pptreba sličiti sljedećem:

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

čvor 'puppet-agent-ubuntu.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'puppet.example.com' uključuje apache uključuju apache :: vhosts} čvor 'puppet-agent-centos.example .com '{$ adminemail =' webmaster@example.com '$ servername =' puppet.example.com 'uključuju apache uključuju apache :: vhosts}

Prema zadanim postavkama, usluga Puppet agent na vašim upravljanim čvorovima automatski će provjeravati s masterom svakih 30 minuta i primijeniti sve nove konfiguracije mastera. Također možete ručno pozvati postupak lutkarskog agenta između automatskih pokretanja agenta. Da biste ručno pokrenuli novi modul na čvorovima agenta, prijavite se na čvorove i pokrenite:

sudo / opt / puppetlabs / bin / agent za lutke -t

Sad kad smo naučili kako stvoriti modul od nule, naučimo kako koristiti već postojeći modul iz lutkarske kovačnice lutkarskih laboratorija.

Koristite modul iz PuppetForge

Lutkarska kovačnica već ima mnogo modula za pokretanje poslužitelja. Možemo ih konfigurirati jednako opsežno kao modul koji ste stvorili i možemo uštedjeti vrijeme jer modul ne moramo stvarati od nule.

Provjerite jeste li u / etc / puppetlabs / code / okoliši / proizvodnja / moduli direktorij i instalirajte MySQL modul tvrtke Puppet Forge od strane PuppetLabs. Ovo će također instalirati sve preduvjetne module.

cd / etc / puppetlabs / code / okoliši / produkcija / moduli

pretvoriti dvostruko u cjelobrojni java
sudo / opt / puppetlabs / bin / puppet module instalirati puppetlabs-mysql

Koristite Hiera za stvaranje baza podataka

Prije izrade konfiguracijskih datoteka za MySQL modul, uzmite u obzir da možda ne želite koristiti iste vrijednosti u svim čvorovima agenta. Za opskrbu Lutke točnim podacima po čvoru koristimo Hieru. Koristit ćete različitu root lozinku po čvoru, stvarajući tako različite MySQL baze podataka.

  • Dođite do/ itd / lutkai stvorite Hierinu konfiguracijsku datotekuhiera.yamlu glavnomlutkaimenik. Upotrijebit ćete zadane vrijednosti Hiere:

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

--- inačica: 5 hijerarhija: - ime: Uobičajena staza: zadane postavke common.yaml: data_hash: yaml_data datadir: data
  • Stvorite datotekuzajednički.yaml. Definirat će zadane vrijednosti korijen lozinka za MySQL:

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

mysql :: server :: root_password: 'lozinka'

Koristimozajednički.yamldatotekakada varijabla nije definirana negdje drugdje. To znači da će svi poslužitelji dijeliti istu MySQL root lozinku. Te se lozinke također mogu raspršiti za povećanje sigurnosti.

  • Da biste koristili zadane postavke MySQL modula, možete dodati uključuju ':: mysql :: server' linija dosite.ppdatoteka. Međutim, u ovom ćete primjeru nadjačati neke zadane vrijednosti modula kako biste stvorili bazu podataka za svaki vaš čvor.

Ureditesite.ppdatoteka sa sljedećim vrijednostima:

čvor 'Puppetagent-ubuntu.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostname.example.com' uključuju apache uključuju apache :: vhosts uključuju mysql :: server mysql :: db {'mydb_ $ {fqdn} ': user =>' myuser ', lozinka =>' mypass ', dbname =>' mydb ', host => $ :: fqdn, grant => [' SELECT ',' UPDATE '], tag = > $ domena,}} čvor 'Puppetagent-centos.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostname.example.com' uključuju apache uključuju apache :: vhosts uključuju mysql :: server mysql :: db {'mydb _ $ {fqdn}': user => 'myuser', lozinka => 'mypass', dbname => 'mydb', host => $ :: fqdn, grant => ['SELECT', ' UPDATE '], tag => $ domena,}}

Automatizacija instalacije lutkarskih modula od lutkara do lutkarskog agenta

  • Ova ažuriranja možete pokrenuti ručno na svakom čvoru SSHingom u svaki čvor i izdavanjem sljedeće naredbe:

sudo / opt / puppetlabs / bin / agent za lutke -t

  • U suprotnom, usluga Puppet agent na vašim upravljanim čvorovima automatski će provjeravati s glavnim upravljačem jednom u 30 minuta i primijeniti sve nove konfiguracije glavnog računala.

Katalog je uspješno primijenjen na Ubuntu agentu

Katalog je uspješno primijenjen na agentu CentOS

Dakle, cijela instalacija dobiva automatiziran na čvorovima agenta samo primjenom kataloga.Datoteke koda i ovisnosti korištene za ovaj demo mogu se pronaći ovdje .

Nadam se da vam je ovaj demo pomogao da steknete jasnu predstavu o lutkarskim modulima i manifestima i njihovoj uporabi za automatizaciju IT infrastrukture.U ovom slučaju, vaš posao postaje tako jednostavan, samo navedite konfiguracije u Puppet Masteru i agenti Puppet automatski će procijeniti glavni manifest i primijeniti modul koji određuje postavke Apachea i MySQL-a. Ako imate bilo kakvih upita, slobodno ih objavite .

Ako ste ovo pronašli Vodič za lutke relevantno, provjerite Edureka, pouzdane tvrtke za internetsko učenje s mrežom od više od 250 000 zadovoljnih učenika raširenih širom svijeta. Edureka DevOps certifikacijski tečaj pomaže učenicima da steknu stručnost u različitim DevOps procesima i alatima kao što su Puppet, Jenkins, Nagios i GIT za automatizaciju više koraka u SDLC-u.