Kako uporabljati lutkovne module za avtomatizacijo IT infrastrukture?



Praktična lutkovna vadnica, ki govori o pisanju lutkovnega modula in uporabi manifesta za avtomatizacijo in vzdrževanje informacijske infrastrukture organizacije.

Prej so sistemski skrbniki uporabljali skripte lupine za zagon svojih strežnikov, ta metoda pa je bila brez razširljivosti. Strašljiva naloga je nenehno spreminjati skripte za stotine ali tisoče nenehno spreminjajočih se strežnikov in njihovih sistemskih konfiguracij.

V tem članku o lutkovni moduli in manifesti poglejmo, kako bi lahko lutkovne module uporabljali za avtomatizacijo nastavitve strežnika, namestitev programa in upravljanje sistema.





Ta spletni dnevnik bo zajemal naslednje teme:

Uvod v lutkovno programiranje

Lutka je eno izmed priljubljenih orodij DevOps, ki se pogosto uporablja za upravljanje konfiguracije. Uporablja se za doseganje doslednost v infrastrukturi. Lutka lahko opredeli infrastrukturo kot kodo, upravlja več strežnikov in uveljavi konfiguracijo sistema ter tako pomaga pri avtomatizaciji procesa upravljanja infrastrukture.



Lutka imalasten konfiguracijski jezik, Lutkovni DSL . Kot pri drugih programih DevOps, tudi Lutka avtomatizira spremembe in odpravi ročne spremembe, ki jih vodijo skripti. Vendar pa Lutka ni le drug jezik lupine niti ni čisti programski jezik, kot je PHP. Namesto tega uporablja Lutkado pristop, ki temelji na deklarativnem modelu do avtomatizacije IT. To omogoča Lutki, da opredeli infrastrukturo kot kodo in s programi uveljavi konfiguracijo sistema.

Preden začnemo z predstavitvijo, si oglejmo nekaj temeljnih vidikov lutkovnega programiranja.

je atom dober za python

Ključni izrazi v lutkovnem programiranju

Manifesti

Imenuje se lutkovni program manifest in ima ime datoteke z .pp podaljšanje. Lutkov privzeti glavni manifest je /etc/puppet/manifests/site.pp . (To opredeljujeglobalne sistemske konfiguracije, kot so konfiguracija LDAP, strežniki DNS ali druge konfiguracije, ki veljajo za vsako vozlišče).



Predavanja

Znotraj teh manifestov se imenujejo kodni bloki razredih drugi moduli lahko pokličejo. Razredi konfigurirajo velike ali srednje velike dele funkcionalnosti, kot so vsi paketi, konfiguracijske datoteke in storitve, potrebne za zagon aplikacije. Razredi olajšajo ponovno uporabo lutkovne kode in izboljšajo berljivost.

Viri

Lutkovna koda je sestavljena večinoma iz prijav virov. A vir opisuje določen element o želenem stanju sistema. Na primer, lahko vključuje, da mora obstajati določena datoteka ali namestiti paket.

Lutkovni moduli

Razen glavnegasite.ppmanifest,shranjuje manifestav moduli .

Vsa naša lutkovna koda je organizirana v module, ki so osnovni gradniki lutk, ki jih lahko ponovno uporabimo in delimo. Vsak modul upravlja določeno nalogo v infrastrukturi, na primer namestitev in konfiguriranje dela programske opreme.

Moduli vsebujejo lutkovne razrede, določene vrste, naloge, načrte nalog, zmogljivosti, vrste virov in vtičnike, na primer vrste ali dejstva po meri. Namestite module v lutkopot modula. Lutka naloži vso vsebino iz vsakega modula na poti modula, tako da je ta koda na voljo za uporabo.

Moduli - Lutkovno programiranje - EdurekaPuppetlabs ima vnaprej določene module, ki jih lahko takoj uporabimo tako, da jih prenesemo iz PuppetForge . Lahko ustvarite tudi lutkovni modul po meri, ki ustreza vašim zahtevam.

Potek dela lutkovnega programa

Z Lutkovim izjavnim jezikom bomo opisali želeno stanje sistema v datotekah, imenovanih manifesti. Manifesti opisujejo, kako naj konfigurirate omrežje in vire operacijskega sistema, kot so datoteke, paketi in storitve.

Lutka zbira manifestacije v katalogi in vsak katalog uporabi za njegovo ustrezno vozlišče, da zagotovi, da je konfiguracija tvozlišče je pravilnopreko vaše infrastrukture.

Predstavitev: Avtomatizacija namestitve Apache & MySQL

Ta članek o lutkovnih modulih je praktičen, ki prikazuje dva načina uporabe lutkovnega modula in vas tudi nauči, kako avtomatizirajte namestitev strežnika, konfiguriranega s tema moduloma.

Za začetek zagotovite, da imate pripravljeno lutkovno infrastrukturo, ki vključuje strežnik lutkovnega mojstra in 2 lutkovna agenta.

  • Lutkovni mojster: Ubuntu 18.04
  • Agent 1: Ubuntu 18.04
  • Agent 2:CentOS7

Tu je oris, kaj bomo dosegli s tem praktičnim delom:


Začnimo torej s praktičnim:

Ustvarjanje modula iz nič

V tem lutkovnem modulu bomo obravnavali naloge, kot so prenos paketa Apache, konfiguriranje datotek in nastavitev navideznih gostiteljev.

  • Od lutkovnega mojstra se pomaknite do imenika lutkovnih modulov in ustvarite imenik Apache:
    cd / etc / puppet / modules sudo mkdir apache
  • Iz notranjosti imenika apache ustvarite podimenike: manifesta, predloge, datoteke in primeri.
    cd apache sudo mkdir {manifesti, predloge, datoteke, primeri}
  • Pomaknite se do imenika manifestov:
    cd manifesti
  • Od tu bomo modul ločili v razrede glede na cilje tega odseka kode.

init.pp -> za prenos paketa Apache

params.pp -> za določitev spremenljivk in parametrov

config.pp -> za upravljanje konfiguracijskih datotek za storitev Apache.

vhosts.pp -> za opredelitev navideznih gostiteljev.

Ta modul bo tudi uporabil Hiera (vgrajen sistem za iskanje podatkov o konfiguraciji ključ-vrednost, ki se uporablja za ločevanje podatkov od podatkov lutkovne kode), za shranjevanje spremenljivk za vsako vozlišče.

1. korak: Prenos paketa Apache

Ustvari razred init.pp

Zdaj bomo ustvariliinit.ppdatoteka v imeniku manifestov, v kateri je paket apache.
Ker imamo dva različna OS (ubuntu in CentOS7), ki za Apache uporabljajo različna imena paketov, bomo morali uporabiti spremenljivko$ apachename.

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

razred apache {paket {'apache': name => $ apachename, zagotoviti => prisoten,}}

paket vir omogoča upravljanje paketa. To se uporablja za dodajanje, odstranjevanje ali zagotavljanje prisotnosti paketa.

V večini primerov ime vira (apache, zgoraj) mora biti ime upravljanega paketa. Zaradi različnih konvencij o poimenovanjuimenujemo dejansko ime paketapo s ime sklic. Torej ime , zahteva še nedefinirano spremenljivko$ apachename.

zagotoviti reference zagotavlja, da je paketprisoten.

Ustvarite datoteko params.pp

Theparams.ppdatoteka bo definirala potrebne spremenljivke. Čeprav bi te spremenljivke lahko opredelili znotrajinit.ppdatoteko, saj bo treba več spremenljivk uporabiti zunaj samega vira z uporaboparams.ppdatoteka omogoča definiranje spremenljivk včestavki in se uporabljajo v več razredih.

Ustvaritiparams.ppdatoteko in naslednjo kodo.

/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 ('to ni podprta distribucija. ')}}

Zunaj izvirnika init.pprazreda, mora vsako ime razreda vejati odapache. Temu razredu pravimo kot apache :: params . Ime za dvojnim dvopičjem bi moralo ime deliti z datoteko. Ančestavek se uporablja za določanje parametrov, pri čemer izhaja iz informacij, ki jih ponuja Faktor , Lutka ima hitrejšo namestitev kot del same namestitve. Tu bo Facter podrl družino operacijskih sistemov (osfamily), da bi ugotovili, ali jerdeč klobukaliNa osnovi Debiana.

Ko so parametri dokončno definirani, moramo poklicati params.pp datoteko in parametre vinit.pp. Če želite to narediti, moramo parametre dodati za imenom razreda, vendar pred odprtim kodrastim oklepajem({).

Torejinit.ppki smo jih ustvarili prej, bi morali izgledati nekako takole:

razred apache ($ apachename = $ :: apache :: params :: apachename,) podeduje :: apache :: params {paket {'apache': name => $ apachename, zagotoviti => prisoten,}}

Niz vrednosti $ :: apache :: params :: value pove Lutki, naj izvleče vrednosti iz apache moduli, params razred, čemur sledi ime parametra. Odlomek podeduje :: apache :: params omogočainit.pppodedovati te vrednosti.

2. korak: Upravljanje konfiguracijskih datotek

Konfiguracijska datoteka Apache bo drugačna, odvisno od tega, ali delate v sistemu, ki temelji na Red Hat ali Debian.

Na koncu te predstavitve lahko najdete naslednje datoteke odvisnosti:httpd.conf(Rdeč klobuk),apache2.conf(Debian).

  • Kopirajte vsebino httpd.conf inapache2.confv ločenih datotekah in jih shranite v datotek imenikob / etc / puppetlabs / code / environment / production / modules / apache / files .
  • Uredite obe datoteki v onemogoči obdržati pri življenju. Vrstico boste morali dodati KeepAlive Off vhttpd.confmapa. Če te nastavitve ne želite spremeniti, na vrh vsake dodajte komentarmapa:
    /etc/puppetlabs/code/environments/production/modules/apache/files/httpd.conf
#To datoteko upravlja lutka

Te datoteke dodajte vinit.ppdatoteka, tako da bo Lutka vedela, kje so te datoteke, na vozliščih glavnega strežnika in agentov. Za to uporabimo mapa vir.

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

datoteka {'configuration-file': pot => $ conffile, zagotoviti => datoteka, vir => $ confsource,}

Ker imamo konfiguracijske datoteke na dveh različnih lokacijah, damo viru splošno ime konfiguracijska datoteka z datoteko pot definiran kot parameter zpotatribut.

zagotoviti zagotavlja, da gre za datoteko.

vir zagotavlja lokacijo zgoraj ustvarjenih datotek na lutkovnem mojstru.

Odpriteparams.ppmapa.

Določimo $ conffile in $ confsourcespremenljivke znotrajčeizjava:

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

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

Parametre moramo dodati na začetekapacheizjava razreda vinit.ppdatoteka, podobno kot v prejšnjem primeru.

Ko se konfiguracijska datoteka spremeni, se mora Apache znova zagnati. Za avtomatizacijo lahko uporabimo vir storitevv kombinaciji z obvestiti atribut, ki bo poklical vir, da se zažene ob vsaki spremembi konfiguracijske datoteke:

/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,}

storitev vir uporablja že ustvarjeni parameter, ki je definiral ime Apache v sistemih Red Hat in Debian.
hasrestart atribut se uporablja za sprožitev ponovnega zagona definirane storitve.

3. korak: ustvarite datoteke navideznega gostitelja

Z datotekami navideznega gostitelja se bo upravljalo drugače, odvisno od distribucije vašega sistema. Zaradi tega bomo kodo za navidezne gostitelje zaprli včeizjava, podobna tisti vparams.pprazred, vendar vsebuje dejanske lutkovne vire.

kako uporabljati java swing -
  • Od znotrajapache / manifesti /imenik, ustvarite in odprite avhosts.ppmapa. Dodajte okostječeizjava:

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

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

Lokacija navidezne gostiteljske datoteke na našem strežniku CentOS 7 je/etc/httpd/conf.d/vhost.conf . Datoteko morate ustvariti kot predlogo na Puppet master. Naredite enako za datoteko navideznih gostiteljev Ubuntu, ki se nahaja na/etc/apache2/sites-available/example.com.conf, zamenjavaexample.coms strežniškim FQDN-jem.

  • Pomaknite se do predloge v datoteki apache modul in nato ustvarite dve datoteki za svoje navidezne gostitelje:

Za sisteme 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 kombinirano

Za sisteme 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 kombiniranoZahtevaj vse odobreno

V teh datotekah uporabljamo samo dve spremenljivki: skrbniška pošta in ime strežnika . Te bomo opredelili za posamezno vozlišče znotrajsite.ppmapa.

  • Vrnite se navhosts.ppmapa. Na ustvarjene predloge se lahko zdaj sklicujete v kodi:

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

razred apache :: vhosts {if $ :: osfamily == 'RedHat' {datoteka {'/etc/httpd/conf.d/vhost.conf': zagotoviti => datoteka, vsebina => predloga ('apache / vhosts-rh .conf.erb '),}} elsif $ :: osfamily ==' Debian '{datoteka {' /etc/apache2/sites-available/$servername.conf ': zagotoviti => datoteka, vsebina => predloga (' apache /vhosts-deb.conf.erb '),}} else {neuspeh (' To ni podprta distribucija. ')}}

Obe distribucijski družini pokličetamapavir in prevzame naslov lokacije navideznega gostitelja v ustrezni distribuciji. Za Debian to še enkrat pomeni sklicevanje na$ servernamevrednost. Thevsebinoatribut pokliče ustrezne predloge.

  • Obe datoteki navideznega gostitelja se sklicujeta na dva imenika. Privzeto niso v sistemih. Te lahko ustvarimo z uporabomapavira, vsak znotrajčeizjavo. Celotenvhosts.confdatoteka naj bo podobna:

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

razred apache :: vhosts {if $ :: osfamily == 'RedHat' {datoteka {'/etc/httpd/conf.d/vhost.conf': zagotoviti => datoteka, vsebina => predloga ('apache / vhosts-rh .conf.erb '),} datoteka {[' / var / www / $ servername ',' / var / www / $ servername / public_html ',' / var / www / $ servername / log ',]: zagotoviti => imenik,}} elsif $ :: osfamily == 'Debian' {datoteka {'/etc/apache2/sites-available/$servername.conf': zagotoviti => datoteka, vsebina => predloga ('apache / vhosts-deb. conf.erb '),} datoteka {[' / var / www / $ servername ',' / var / www / $ servername / public_html ',' / var / www / $ servername / logs ',]: zagotoviti => imenik ,}} else {neuspeh ('To ni podprta distribucija.')}}

4. korak: Preizkusite modul

  • Pomaknite se doapache / manifesti /imenik, zaženite lutkovni razčlenjevalnik v vseh datotekah, da zagotovite, da je lutkovno kodiranje brez napak:

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

Vrniti se mora prazno, brez težav.

  • Pomaknite se do primeri v imenikuapachemodul. Ustvariinit.ppdatoteko in vključite ustvarjene razrede. Zamenjajte vrednosti za$ servernamein$ adminemails svojim:

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

serveremail = 'webmaster@example.com' $ servername = 'puppet.example.com' vključuje apache vključuje apache :: vhosts
  • Preizkusite modul z zagonom lutka prijava z –Ne oznaka:
    sudo / opt / puppetlabs / bin / puppet apply --noop init.pp

Vrniti ne sme nobenih napak in izpisati, da bo sprožil osvežitev dogodkov. Če želite namestiti in konfigurirati apache na Puppet master, znova zaženite brez–Ne, če je tako želeno.

  • Pojdite nazaj v glavni imenik lutk in nato vmanifestiramapa (nev modulu Apache).

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

Ustvaritisite.ppmapa,in vključujejo modul Apache za vsako vozlišče agenta. Vnesite tudi spremenljivke zaskrbniška pošta in ime strežnikaparametrov. Vašsite.ppnaj spominja na naslednje:

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

vozlišče 'puppet-agent-ubuntu.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'puppet.example.com' vključuje apache vključuje apache :: vhosts} vozlišče 'puppet-agent-centos.example .com '{$ adminemail =' webmaster@example.com '$ servername =' puppet.example.com 'vključuje apache vključuje apache :: vhosts}

Privzeto bo storitev Puppet agent na vaših upravljanih vozliščih samodejno preverila z glavno eno vsakih 30 minut in uporabila vse nove konfiguracije glavne. Prav tako lahko ročno prikličete postopek lutkovnega agenta med samodejnimi zagonom agenta. Če želite ročno zagnati novi modul na vozliščih agentov, se prijavite v vozlišča in zaženite:

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

Zdaj, ko smo se naučili, kako ustvariti modul iz nič, se naučimo uporabljati že obstoječi modul iz lutkovne kovačnice lutkovnih laboratorijev.

Uporabite modul iz PuppetForge

Lutkovna kovačnica že ima veliko modulov za zagon strežnika. Te lahko konfiguriramo enako obsežno kot modul, ki ste ga ustvarili, in prihranimo čas, saj ga ni treba ustvarjati iz nič.

Prepričajte se, da ste v / etc / puppetlabs / code / okolje / produkcija / moduli in namestite MySQL modul Puppet Forge avtor PuppetLabs. S tem bodo nameščeni tudi vsi predpogojni moduli.

cd / etc / puppetlabs / code / okolje / produkcija / moduli

sudo / opt / puppetlabs / bin / lutkovni modul namestite puppetlabs-mysql

Uporabite Hiero za ustvarjanje baz podatkov

Preden ustvarite konfiguracijske datoteke za modul MySQL, upoštevajte, da morda ne boste želeli uporabljati enakih vrednosti v vseh vozliščih agentov. Za dobavo Lutke s pravilnimi podatki na vozlišče uporabljamo Hiero. Na vozlišče boste uporabili drugačno korensko geslo in tako ustvarili različne zbirke podatkov MySQL.

  • Pomaknite se do/ etc / lutkain ustvarite Hierino konfiguracijsko datotekohiera.yamlv glavnemlutkaimenik. Uporabili boste privzete vrednosti Hiere:

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

--- različica: 5 hierarhija: - ime: Skupna pot: privzeto common.yaml: data_hash: yaml_data datadir: data
  • Ustvari datotekonavaden.yaml. Določila bo privzeto koren geslo za MySQL:

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

mysql :: server :: root_password: 'geslo'

Uporabljamonavaden.yamlmapakadar spremenljivka ni definirana drugje. To pomeni, da bodo vsi strežniki delili isto korensko geslo MySQL. Ta gesla lahko tudi zgostite, da povečate varnost.

  • Za uporabo privzetih nastavitev modula MySQL lahko dodate vključuje ':: mysql :: server' črta dosite.ppmapa. Vendar boste v tem primeru preglasili nekatere privzete nastavitve modula in ustvarili bazo podatkov za vsako vaše vozlišče.

Ureditesite.ppdatoteka z naslednjimi vrednostmi:

vozlišče 'Puppetagent-ubuntu.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostname.example.com' vključujejo apache vključujejo apache :: vhosts vključujejo mysql :: server mysql :: db {'mydb_ $ {fqdn} ': user =>' myuser ', geslo =>' mypass ', dbname =>' mydb ', host => $ :: fqdn, grant => [' SELECT ',' UPDATE '], tag = > $ domena,}} vozlišče 'Puppetagent-centos.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostname.example.com' vključuje apache vključuje apache :: vhosts vključujejo mysql :: server mysql :: db {'mydb _ $ {fqdn}': user => 'myuser', geslo => 'mypass', dbname => 'mydb', host => $ :: fqdn, grant => ['SELECT', ' UPDATE '], tag => $ domena,}}

Avtomatizacija namestitve lutkovnih modulov od lutkovnega mojstra do lutkovnega agenta

  • Te posodobitve lahko zaženete ročno na vsakem vozlišču tako, da v vsako vozlišče SSHing in izda naslednji ukaz:

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

  • V nasprotnem primeru bo storitev Puppet agent na vaših upravljanih vozliščih samodejno preverila glavno eno vsakih 30 minut in uporabila vse nove konfiguracije glavne.

Katalog je bil uspešno uporabljen v agentu Ubuntu

Katalog je bil uspešno uporabljen na agentu CentOS

Tako dobi celotna namestitev avtomatizirano na vozliščih agentov s samo uporabo kataloga.Najdete kodne datoteke in odvisnosti, uporabljene za to predstavitev tukaj .

php ustvari matriko iz niza

Upam, da vam je ta predstavitev pomagala pri jasni predstavitvi lutkovnih modulov in manifestov ter njihove uporabe za avtomatizacijo IT infrastrukture.V tem primeru vaše delo postane tako enostavno, samo določite konfiguracije v Puppet Master in agenti Puppet bodo samodejno ocenili glavni manifest in uporabili modul, ki določa nastavitve Apache in MySQL. Če imate kakršna koli vprašanja, vas prosimo, da jih objavite naprej .

Če ste našli to Lutkovna vadnica ustrezno, preverite Edureka, zaupanja vredno podjetje za spletno učenje z mrežo več kot 250.000 zadovoljnih učencev, ki se širijo po vsem svetu. Tečaj Edureka DevOps Certification Training pomaga učencem pridobiti znanje o različnih procesih DevOps in orodjih, kot so Lutka, Jenkins, Nagios in GIT za avtomatizacijo več korakov v SDLC.