Kuidas kasutada nuku mooduleid IT-infrastruktuuri automatiseerimiseks?

Praktiline nukuõpetus, mis räägib nukumooduli kirjutamisest ja manifesti kasutamisest organisatsiooni IT-infrastruktuuri automatiseerimiseks ja hooldamiseks.

Varem kasutasid süsteemiadministraatorid serverite käitamiseks shelliskripte ja selle meetodi skaleeritavus oli null. See on heidutav ülesanne pidevalt muuta sadade või tuhandete pidevalt muutuvate serverite skripte ja nende süsteemikonfiguratsioone.

Selles artiklis nukumoodulid ja manifestid vaatame, kuidas saaksime nukumooduleid kasutada serveri seadistamise, programmi installimise ja süsteemihalduse automatiseerimiseks.



See ajaveeb käsitleb järgmisi teemasid:

Sissejuhatus nuku programmeerimisse

Nukk on üks populaarseimaid DevOpsi tööriistu, mida kasutatakse laialdaselt konfiguratsioonihalduses. Seda kasutatakse sünnitamiseks järjepidevus infrastruktuuris. Nukk võib infrastruktuuri määratleda koodina, hallata mitut serverit ja jõustada süsteemi konfiguratsiooni, aidates seeläbi infrastruktuuri haldamise protsessi automatiseerida.

Nukul onoma seadistuskeel, Nuku DSL . Nagu teiste DevOpsi programmide puhul, on ka Puppet automatiseerib muudatused, kõrvaldades käsitsi skriptipõhised muudatused. Nukk pole aga lihtsalt üks teine ​​shellikeel ega ka puhas programmeerimiskeel, näiteks PHP. Selle asemel kasutab Nukkkuni deklaratiivne mudelipõhine lähenemine IT-automatiseerimisele. See võimaldab Puppetil määratleda infrastruktuur koodina ja jõustada süsteemide seadistamine programmidega.

Enne demoga jätkamist vaatame nukkude programmeerimise mõningaid põhiaspekte.

pass by value läbima viide java

Nukude programmeerimise põhiterminid

Manifestid

Kutsutakse nukuprogrammi manifest ja selle failinimi on .pp pikendamine. Nuku peamine vaikimisi manifest on /etc/puppet/manifests/site.pp . (See määratlebglobaalsed süsteemikonfiguratsioonid, näiteks LDAP-konfiguratsioon, DNS-serverid või muud konfiguratsioonid, mis kehtivad iga sõlme kohta).

Klassid

Nendes manifestides nimetatakse koodiplokke klassides muud moodulid saavad helistada. Klassid konfigureerivad funktsionaalsuse suured või keskmise suurusega tükid, näiteks kõik rakenduse käitamiseks vajalikud paketid, konfiguratsioonifailid ja teenused. Klassid hõlbustavad Nukukoodi taaskasutamist ja parandavad loetavust.

Ressursid

Nukukood koosneb enamasti ressursideklaratsioonidest. A ressurss kirjeldab konkreetset elementi süsteemi soovitud oleku kohta. Näiteks võib see sisaldada konkreetset faili olemasolu või paketi installimist.

Nukumoodulid

Välja arvatud peaminesite.ppmanifest,see salvestab manifestidaastal moodulid .

Kogu meie Nukukood on korraldatud moodulitesse, mis on nuku põhielemendid, mida saame uuesti kasutada ja jagada. Iga moodul haldab infrastruktuuris konkreetset ülesannet, näiteks tarkvara installimist ja konfigureerimist.

Moodulid sisaldavad Nukuklasse, määratletud tüüpe, ülesandeid, ülesandeplaane, mahtu, ressursitüüpe ja pistikprogramme, näiteks kohandatud tüüpe või fakte. Paigaldage moodulid nukumoodul-tee. Nukk laadib kogu sisu igast mooduliteel olevast moodulist, muutes selle koodi kasutamiseks kättesaadavaks.

Moodulid - Nukude programmeerimine - EdurekaPuppetlabsil on eelnevalt määratletud moodulid, mida saame neid kohe alla laadides kasutada NukuForge . Samuti võiksite luua oma vajadustele vastava kohandatud nukumooduli.

Nukuprogrammi töövoog

Süsteemi soovitud oleku kirjeldamiseks failides, mida nimetatakse manifestideks, kasutame nuku deklaratiivset keelt. Manifestides kirjeldatakse, kuidas peaksite konfigureerima oma võrgu- ja operatsioonisüsteemi ressursse, näiteks faile, pakette ja teenuseid.

Nuku kompileerimine avaldub kataloogid ja see rakendab igat kataloogi oma vastavale sõlmele, et tagada t konfiguratsioonta sõlm on õigekogu oma infrastruktuuris.

Demonstratsioon: Apache & MySQL-i installimise automatiseerimine

See nuku moodulite artikkel on praktiline, mis näitaks kahte moodi nuku mooduli kasutamiseks ja õpetaks ka seda automatiseerida nende kahe mooduliga konfigureeritud serveri installimine.

Alustuseks veenduge, et teil oleks valmis nukuinfrastruktuur, mis sisaldaks nukumeistriserverit ja kahte nukuagenti.

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

Siin on ülevaade sellest, mida selles praktikas saavutame:


Alustame siis praktilisest tegevusest:

Mooduli loomine nullist

Selles nukumoodulis käsitleme selliseid ülesandeid nagu Apache paketi allalaadimine, failide konfigureerimine ja virtuaalsete hostide seadistamine.

  • Navigeerige nukumeistrist Puppet’i moodulite kataloogi ja looge kataloog Apache:
    cd / etc / puppet / modules sudo mkdir apache
  • Apache kataloogis saate luua alamkatalooge: manifestid, mallid, failid ja näited.
    cd apache sudo mkdir {manifestid, mallid, failid, näited}
  • Liikuge manifestide kataloogi:
    cd avaldub
  • Siit eraldame mooduli klassidesse, lähtudes selle koodilõigu eesmärkidest.

init.pp -> Apache'i paketi allalaadimiseks

params.pp -> muutujate ja parameetrite määratlemiseks

config.pp -> Apache'i teenuse mis tahes konfiguratsioonifailide haldamiseks.

vhosts.pp -> virtuaalsete hostide määratlemiseks.

See moodul kasutab ka Hiera (sisseehitatud võtmeväärtusega konfiguratsiooniandmete otsimise süsteem, mida kasutatakse andmete eraldamiseks nukukoodist), muutujate salvestamiseks iga sõlme jaoks.

1. samm: Apache'i paketi allalaadimine

Loo klass init.pp

Nüüd loome ainit.ppfail manifestide kataloogis, et hoida apache-paketti.
Kuna meil on 2 erinevat operatsioonisüsteemi (ubuntu ja CentOS7), mis kasutavad Apache jaoks erinevaid paketinimesid, peame kasutama muutujat$ apachename.

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

klassi apache {pakett {'apache': nimi => $ apachename, veenduge, et => olemas,}}

pakend ressurss võimaldab hallata paketti. Seda kasutatakse pakendi lisamiseks, eemaldamiseks või pakendi olemasolu tagamiseks.

Enamikul juhtudel on nimi ressursi (apache, ülal) peaks olema hallatava paketi nimi. Erinevate nimetamisviiside tõttukutsume paketi tegelikku nimepeale koos nimi viide. Niisiis nimi , nõuab veel määratlemata muutujat$ apachename.

kindlustama viide tagab, et pakett onkohal.

Looge fail params.pp

Theparams.ppfail määrab vajalikud muutujad. Kuigi me võiksime need muutujad määratledainit.ppfaili, kuna rohkem muutujaid tuleb kasutada väljaspool ressursitüüpi ennast, kasutades aparams.ppfail võimaldab muutujaid määratleda failiskuiavaldusi ja kasutatakse mitmes klassis.

Looparams.ppfail ja järgmine kood.

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

klassi apache :: params {if $ :: osfamily == 'RedHat' {$ apachename = 'httpd'} elsif $ :: osfamily == 'Debian' {$ apachename = 'apache2'} else {ebaõnnestub ('see pole toetatud levitamine. ')}}

Väljaspool originaali init.ppklassist, peab iga klassi nimi sellest hargnemaapache. Me kutsume seda klassi kui apache :: params . Topeltkooloni järel olev nimi peaks failiga nime jagama. Ankuilauset kasutatakse parameetrite määratlemiseks, võttes aluseks Faktor , Nukul on installatsiooni osana ka installatsioon. Siin tõmbab Facter opsüsteemide perekonna alla (osfamily), et teha kindlaks, kas see on niipunane mütsvõiDebianipõhine.

Kui parameetrid on lõplikult määratletud, peame kutsuma params.pp fail ja parameetridinit.pp. Selleks peame lisama parameetrid pärast klassi nime, kuid enne avanevat lokkisulgu({).

Seegainit.ppVarem loodud sisu peaks välja nägema umbes selline:

klassi apache ($ apachename = $ :: apache :: params :: apachename,) pärib :: apache :: params {pakett {'apache': nimi => $ apachename, tagab => kohal,}}

Väärtuste string $ :: apache :: params :: väärtus käsib Puppetil väärtused tõmmata apache moodulid, params klass, millele järgneb parameetri nimi. Kild pärib :: apache :: params lubabinit.ppnende väärtuste pärimiseks.

2. samm: hallake konfiguratsioonifaile

Apache'i konfiguratsioonifail on erinev sõltuvalt sellest, kas töötate Red Hat- või Debiani-põhise süsteemiga.

Selle demo lõpust leiate järgmised sõltuvusfailid:httpd.conf(Punane müts),apache2.conf(Debian).

  • Kopeerige saidi sisu httpd.conf jaapache2.conferaldi failides ja salvestage need faile kataloogikell / etc / puppetlabs / code / environments / production / moodulid / apache / failid .
  • Muutke mõlemad failid aadressile keelata elus hoidma. Peate rea lisama KeepAlive on väljas aastalhttpd.conffaili. Kui te ei soovi seda seadet muuta, peaksime lisama nende ülaosasse kommentaarifail:
    /etc/puppetlabs/code/environments/production/modules/apache/files/httpd.conf
# Seda faili haldab nukk

Lisage need failid kaustainit.ppfaili, nii et Puppet teab nende failide asukohta nii põhiserveri kui ka agendi sõlmedes. Selleks kasutame faili ressurss.

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

fail {'configuration-file': tee => $ conffile, veenduge, et => fail, allikas => $ confsource,}

Kuna meil on konfiguratsioonifailid kahes erinevas asukohas, anname ressursile üldnime konfiguratsioonifail failiga tee määratletakse parameetrinateeatribuut.

kindlustama tagab, et see on fail.

allikas esitab ülaloodud failide asukoha nukumeistril.

Avaparams.ppfaili.

Me määratleme $ conffile ja $ confsourcemuutujadkuiavaldus:

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

kui $ :: osfamily == 'RedHat' {... $ conffile = '/etc/httpd/conf/httpd.conf' $ confsource = 'nukk: ///modules/apache/httpd.conf'} elsif $: : osfamily == 'Debian' {... $ conffile = '/etc/apache2/apache2.conf' $ confsource = 'puppet: ///modules/apache/apache2.conf'} else {...

Peame lisama parameetrid algusesseapacheklassi deklaratsiooninit.ppfaili, sarnaselt eelmisele näitele.

Kui konfiguratsioonifail muutub, peab Apache taaskäivitama. Selle automatiseerimiseks saame kasutada teenuse ressurssikoos teatama atribuut, mis kutsub ressurssi käivitama alati, kui konfiguratsioonifaili muudetakse:

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

fail {'configuration-file': tee => $ conffile, tagada => fail, allikas => $ confsource, teatama => teenus ['apache-service'],} service {'apache-service': nimi => $ apachename, hasrestart => true,}

teenus ressurss kasutab juba loodud parameetrit, mis määratles Apache'i nime Red Hati ja Debiani süsteemides.
taaskäivitage atribuuti kasutatakse määratletud teenuse taaskäivitamise käivitamiseks.

3. samm: looge virtuaalsed hostifailid

Sõltuvalt teie süsteemi levitamisest hallatakse virtuaalhosti faile erinevalt. Seetõttu kodeerime virtuaalsete hostide koodikuiavaldus, mis on sarnaneparams.ppklass, kuid sisaldab tegelikke Nuku ressursse.

  • Seestpooltapache / manifestid /kataloogi, looge ja avage avhosts.ppfaili. Lisagekuiavaldus:

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

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

Virtuaalse hostifaili asukoht meie CentOS 7 serveris on/etc/httpd/conf.d/vhost.conf . Peate looma faili Nukumeistri mallina. Tehke sama Ubuntu virtuaalserverite faili puhul, mis asub aadressil/etc/apache2/sites-available/example.com.conf, asendadesexample.comserveri FQDN-iga.

  • Navigeerige lehele mallid faili apache moodulit ja seejärel looge oma virtuaalsete hostide jaoks kaks faili:

Red Hati süsteemide puhul:
/etc/puppetlabs/code/environments/production/modules/apache/templates/vhosts-rh.conf.erb

kraadiõppe diplom magistrikraad
ServerAdmin ServerName ServerAlias ​​www. DocumentRoot / var / www // public_html / ErrorLog /var/www//logs/error.log CustomLog /var/www//logs/access.log ühendatud

Debiani süsteemide puhul:
/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 kokkuNõua kõik lubatud

Me kasutame nendes failides ainult kahte muutujat: administraatori meil ja serveri nimi . Me määratleme need sõlmede kaupasite.ppfaili.

  • Naaske lehelevhosts.ppfaili. Loodud mallidele saab nüüd koodis viidata:

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

klassi apache :: vhosts {if $ :: osfamily == 'RedHat' {file {'/etc/httpd/conf.d/vhost.conf': užtikrinti => fail, sisu => mall ('apache / vhosts-rh .conf.erb '),}} elsif $ :: osfamily ==' Debian '{file {' /etc/apache2/sites-available/$servername.conf ': užtikrinti => fail, sisu => mall (' apache /vhosts-deb.conf.erb '),}} else {fail (' See pole toetatud levitaja. ')}}

Mõlemad jaotuspered kutsuvad ühendustfailiressurss ja omandage vastavas jaotuses virtuaalse hosti asukoha pealkiri. Debiani jaoks tähendab see veel kord viidet selleleserveri nimiväärtus. Thesisuatribuut kutsub vastavaid malle.

  • Mõlemad virtuaalsed hostifailid viitavad kahele kataloogile. Vaikimisi pole need süsteemides. Saame need luua, kasutadesfailiiga ressursskuiavaldus. Täielikvhosts.conffail peaks sarnanema:

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

klassi apache :: vhosts {if $ :: osfamily == 'RedHat' {file {'/etc/httpd/conf.d/vhost.conf': užtikrinti => fail, sisu => mall ('apache / vhosts-rh .conf.erb '),} fail {[' / var / www / $ servername ',' / var / www / $ servername / public_html ',' / var / www / $ servername / log ',]: tagada => kataloog,}} elsif $ :: osfamily == 'Debian' {file {'/etc/apache2/sites-available/$servername.conf': tagada => fail, sisu => mall ('apache / vhosts-deb. conf.erb '),} fail {[' / var / www / $ servername ',' / var / www / $ servername / public_html ',' / var / www / $ servername / logs ',]: tagada => kataloog ,}} else {fail ('See pole toetatud levitamine.')}}

4. samm: testige moodulit

  • Navigeerige leheleapache / manifestid /kataloogi, käivitage nuku parser kõigil failidel, et nuku kodeerimine oleks tõrgeteta:

sudo / opt / puppetlabs / bin / nukude parser kinnitab init.pp params.pp vhosts.pp

See peaks naasma tühjana, ilma probleemideta.

  • Navigeerige lehele näited kataloogisapachemoodul. Loogeinit.ppfaili ja lisada loodud klassid. Asendage väärtused väärtuseleserveri nimija$ adminemailomadega:

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

serverimail = 'webmaster@example.com' $ servername = 'nukk.example.com' sisaldab apache-i, sealhulgas apache :: vhosts
  • Testige moodulit käivitades nukk kandideerima koos –noop silt:
    sudo / opt / puppetlabs / bin / nukk rakendada --noop init.pp

See ei tohiks anda vigu ega väljundit, et see käivitaks sündmuste värskendamise. Apache'i installimiseks ja konfigureerimiseks Puppet master'is käivitage uuesti ilma–noop, kui seda soovitakse.

  • Navigeerige tagasi nukukataloogi ja seejärel jaotisseavaldubkaust (mitteApache moodulis olev).

cd / etc / nukutabletid / kood / keskkonnad / tootmine / manifestid

Loosite.ppfail,ja sisaldab iga agendisõlme jaoks Apache moodulit. Sisestage ka muutujadadministraatori meil ja serveri nimiparameetrid. Teiesite.pppeaks sarnanema järgmisega:

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

sõlm „nuku-agent-ubuntu.example.com” {$ adminemail = 'webmaster@example.com' $ servername = 'nukk.example.com' sisaldavad apache-i hulka kuuluvad apache :: vhosts} sõlm 'nuku-agent-centos.example .com '{$ adminemail =' webmaster@example.com '$ servername =' puppet.example.com 'include apache include apache :: vhosts}

Vaikimisi kontrollib teie hallatavate sõlmede Nukeagendi teenus automaatselt iga 30 minuti järel juhtmeistrilt ja rakendab kõik uued konfiguratsioonid. Automaatse agentide käitamise vahel saate ka Nuppet agent-protsessi käsitsi kutsuda. Uue mooduli käsitsi käitamiseks oma agendisõlmedes logige sõlmedesse sisse ja käivitage:

sudo / opt / puppetlabs / bin / nukunäitaja -t

Nüüd, kui oleme õppinud mooduli loomist nullist, õpime, kuidas kasutada juba olemasolevat moodulit nukulabori nukusepikojast.

Kasutage PuppetForge'i moodulit

Nukkude sepik serveri käitamiseks on juba palju mooduleid. Saame neid konfigureerida sama ulatuslikult kui teie loodud moodulit ja säästa aega, kuna me ei pea moodulit nullist looma.

Veenduge, et olete / etc / puppetlabs / code / environments / production / moodulid kataloog ja installige Puppet Forge'i MySQL-moodul autor PuppetLabs. See installib ka kõik eeldusmoodulid.

kuidas luua java objektide massiivi

cd / etc / puppetlabs / code / environments / production / moodulid

sudo / opt / puppetlabs / bin / marionettmoodul installib puppetlabs-mysql

Kasutage andmebaasi loomiseks Hierat

Mõelge enne MySQL-mooduli konfiguratsioonifailide loomist, et te ei soovi kõigis agendisõlmedes samu väärtusi kasutada. Nupu õigete andmete edastamiseks sõlme kohta kasutame Hiera. Kasutate sõlme kohta erinevat juurparooli, luues seeläbi erinevad MySQL-i andmebaasid.

  • Navigeerige/ etc / nukkja loo Hiera konfiguratsioonifailhiera.yamlpõhiliseltnukkkataloogi. Kasutate Hiera vaikeväärtusi:

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

--- versioon: 5 hierarhia: - nimi: ühine tee: common.yaml vaikesätted: data_hash: yaml_data datadir: data
  • Looge faillevinud.yaml. See määrab vaikimisi juur MySQL-i parool:

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

mysql :: server :: root_password: 'parool'

Me kasutamelevinud.yamlfailikui muutujat pole mujal määratletud. See tähendab, et kõigil serveritel on sama MySQL-i juurparool. Neid paroole saab turvalisuse suurendamiseks ka räsida.

  • MySQL-i mooduli vaikeseadete kasutamiseks saate lisada lisada ‘:: mysql :: server’ ridasite.ppfaili. Kuid selles näites alistate mõned mooduli vaikesätted, et luua iga oma sõlme jaoks andmebaas.

Redigeerigesite.ppfail järgmiste väärtustega:

sõlm „Puppetagent-ubuntu.example.com” {$ adminemail = 'webmaster@example.com' $ servername = 'hostinimi.example.com' sisaldavad apache sisaldavad apache :: vhosts sisaldavad mysql :: server mysql :: db {'mydb_ $ {fqdn} ': kasutaja =>' myuser ', parool =>' mypass ', dbname =>' mydb ', host => $ :: fqdn, grant => [' SELECT ',' UPDATE '], tag = > $ domain,}} sõlm 'Puppetagent-centos.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostinimi.example.com' sisaldab apache-i, sealhulgas apache :: vhosts sisaldab mysql :: server-mysql :: db {'mydb _ $ {fqdn}': kasutaja => 'minu kasutaja', parool => 'minu pass', db nimi => 'mydb', host => $ :: fqdn, grant => ['SELECT', ' UPDATE '], silt => domeen $,}}

Nukumoodulite installimise automatiseerimine nukumeistrist nukumeistrini

  • Neid värskendusi saate igas sõlmes käsitsi käivitada, SSH-iga igasse sõlme ja väljastades järgmise käsu:

sudo / opt / puppetlabs / bin / nukunäitaja -t

  • Vastasel juhul kontrollib teie hallatavate sõlmede Nukeagendi teenus automaatselt iga 30 minuti järel juhtmeistrilt ja rakendab kõik uued konfiguratsioonid.

Kataloogi rakendamine Ubuntu agendile õnnestus

Kataloogi rakendamine CentOS-i agendile õnnestus

Seega saab kogu installatsiooni automatiseeritud agendi sõlmedel lihtsalt kataloogi rakendades.Leiate selle demo jaoks kasutatud koodifailid ja sõltuvused siin .

Loodan, et see demo on aidanud teil saada selge ülevaate nukumoodulitest ja manifestidest ning nende kasutamisest IT-infrastruktuuri automatiseerimiseks.Sel juhul muutub teie töö nii lihtsaks, lihtsalt määrake konfiguratsioonid Puppet Masteris ja Nupu agendid hindavad automaatselt peamanifesti ja rakendavad moodulit, mis määrab Apache'i ja MySQL-i seadistused. Kui teil on küsimusi ummikus, postitage need julgelt .

Kui olete selle leidnud Nukuõpetus asjakohane, vaadake Edureka, usaldusväärne veebiõppeettevõte, mille võrgustik hõlmab üle 250 000 rahuloleva õppija, levinud üle kogu maailma. Edureka DevOpsi sertifitseerimiskoolitus aitab õppijatel omandada teadmisi mitmesuguste DevOpsi protsesside ja tööriistade, näiteks Nukuteabe, Jenkinsi, Nagiosi ja GIT-i kohta SDLC mitmete sammude automatiseerimiseks.