Hogyan lehet használni a bábmodulokat az informatikai infrastruktúra automatizálásához?



Praktikus báboktató, amely a bábmodul megírásáról és a jegyzék használatáról szól a szervezet informatikai infrastruktúrájának automatizálásához és fenntartásához.

Korábban a rendszergazdák shell szkripteket használtak a szerverek futtatásához, és ennek a módszernek nem volt skálázhatósága. Ijesztő feladat folyamatosan módosítani a szkripteket több száz vagy ezer állandóan változó kiszolgálón és azok rendszerkonfigurációin.

Ebben a cikkben a bábmodulok és manifesztumok nézzük meg, hogyan használhatnánk a bábmodulokat a szerver beállításának, a program telepítésének és a rendszerkezelésnek az automatizálásához.





Ez a blog a következő témákkal foglalkozik:

Bevezetés a bábprogramozásba

Báb az egyik általánosan használt DevOps eszköz, amelyet széles körben használnak a konfiguráció kezelésében. Ennek megvalósítására használják következetesség az infrastruktúrában. A báb meghatározhatja az infrastruktúrát kódként, több kiszolgálót kezelhet és kikényszerítheti a rendszerkonfigurációt, ezáltal segítve az infrastruktúra-menedzsment folyamatának automatizálását.



Bábnak vansaját konfigurációs nyelve, Báb DSL . A többi DevOps programhoz hasonlóan a Báb automatizálja a változásokat, kiküszöbölve a kézi szkript-vezérelt módosításokat. A Puppet azonban nem egyszerűen egy másik shell nyelv, és nem is pusztán programozási nyelv, például a PHP. Ehelyett a Báb használnak nek deklaratív modell-alapú megközelítés az informatikai automatizáláshoz. Ez lehetővé teszi a Puppet számára, hogy az infrastruktúrát kódként definiálja, és kikényszerítse a rendszerkonfigurációt a programokkal.

Mielőtt folytatnánk a bemutatót, nézzük meg a bábprogramozás néhány alapvető szempontját.

szubsztring az SQL szerver példákban

Kulcsfogalmak a bábprogramozásban

Kiáltványok

Bábprogramot hívnak nyilvánvaló és fájlneve van vele .pp kiterjesztés. A báb alapértelmezett fő manifesztuma: /etc/puppet/manifests/site.pp . (Ez meghatározzaglobális rendszerkonfigurációk, például LDAP-konfiguráció, DNS-kiszolgálók vagy más, minden csomópontra érvényes konfigurációk).



Osztályok

Ezen megnyilvánulásokon belül kódblokkokat hívnak osztályok más modulok hívhatnak. Az osztályok nagy vagy közepes méretű funkcionalitást konfigurálnak, például az alkalmazás futtatásához szükséges összes csomagot, konfigurációs fájlokat és szolgáltatásokat. Az osztályok megkönnyítik a Bábkód újrafelhasználását és javítják az olvashatóságot.

Erőforrások

A bábkód többnyire erőforrás-deklarációkból áll. A forrás egy konkrét elemet ír le a rendszer kívánt állapotáról. Például tartalmazhatja, hogy léteznie kell egy meghatározott fájlnak, vagy telepítenie kell egy csomagot.

Bábmodulok

Kivéve a főtsite.ppnyilvánvaló,tárolja a manifesztumokatban ben modulok .

Minden bábkódunk modulokba van szervezve, amelyek a báb alapvető építőkövei, amelyeket újra felhasználhatunk és megoszthatunk. Minden modul egy adott feladatot kezel az infrastruktúrában, például egy szoftver telepítését és konfigurálását.

A modulok bábosztályokat, meghatározott típusokat, feladatokat, feladatterveket, kapacitásokat, erőforrástípusokat és beépülő modulokat tartalmaznak, például egyedi típusokat vagy tényeket. Telepítsen modulokat a Bábbamodule-path. A báb a modul elérési útjának minden moduljából betölti az összes tartalmat, elérhetővé téve ezt a kódot.

Modulok - Bábprogramozás - EdurekaA Puppetlabs rendelkezik előre definiált modulokkal, amelyeket azonnal használhatunk, ha letöltöm őket BábForge . Létrehozhat egy egyéni bábmodult is, amely megfelel az Ön igényeinek.

Bábprogram munkafolyamat

A Puppet deklaratív nyelvével fogjuk leírni a rendszer kívánt állapotát a manifesztek nevű fájlokban. A kiáltványok leírják, hogyan kell konfigurálni a hálózati és az operációs rendszer erőforrásait, például fájlokat, csomagokat és szolgáltatásokat.

A báb összeállítása a következőkbe nyilvánul meg katalógusok és minden katalógust a megfelelő csomópontjára alkalmaz, hogy biztosítsa a t konfigurációjáta csomópont helyesaz egész infrastruktúráján.

Demonstráció: Az Apache és MySQL telepítésének automatizálása

Ez a cikk a bábu modulokról praktikus, amely bemutatja a báb modul használatának két módját, és megtanítja arra is, hogyan kell automatizálni e két modullal konfigurált szerver telepítése.

Először is, győződjön meg arról, hogy készen áll egy báb infrastruktúra, amely tartalmazna egy bábmestert és 2 bábügynököt.

  • Bábmester: Ubuntu 18.04
  • 1. ügynök: Ubuntu 18.04
  • 2. ügynök:CentOS7

Íme egy vázlat arról, hogy mit fogunk elérni ebben a gyakorlatban:


Kezdjük tehát a gyakorlattal:

Modul létrehozása a semmiből

Ebben a bábmodulban olyan feladatokkal fogunk foglalkozni, mint az Apache csomag letöltése, a fájlok konfigurálása és a virtuális gépek beállítása.

  • A Puppet Master programból lépjen a Puppet modul könyvtárába, és hozza létre az Apache könyvtárat:
    cd / etc / puppet / modules sudo mkdir apache
  • Az apache könyvtárból hozzon létre alkönyvtárakat: jegyzékeket, sablonokat, fájlokat és példákat.
    cd apache sudo mkdir {manifesztek, sablonok, fájlok, példák}
  • Keresse meg a jegyzékkönyvtárat:
    cd nyilvánul meg
  • Innentől kezdve a modult osztályokra osztjuk az adott kódrész céljainak megfelelően.

init.pp -> az Apache csomag letöltéséhez

params.pp -> bármilyen változó és paraméter meghatározása

config.pp -> az Apache szolgáltatás konfigurációs fájljainak kezeléséhez.

vhosts.pp -> hogy meghatározzuk a virtuális gazdagépeket.

Ez a modul a Hiera (beépített kulcsérték-konfigurációs adatkeresési rendszer, amely elválasztja az adatokat a bábu kódtól), változók tárolására az egyes csomópontokhoz.

1. lépés: Az Apache csomag letöltése

Hozzon létre init.pp osztályt

Most létrehozunk egyinit.ppfájl a manifeszt könyvtárban az apache csomag tárolására.
Mivel 2 különböző operációs rendszerünk van (ubuntu és CentOS7), amelyek különböző csomagneveket használnak az Apache számára, ezért változót kell használnunk$ apachename.

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

class apache {csomag {'apache': név => $ apachename, gondoskodjon => present,}}

csomag Az erőforrás lehetővé teszi egy csomag kezelését. Ez egy csomag hozzáadására, eltávolítására vagy annak biztosítására szolgál.

A legtöbb esetben a név az erőforrás (apache, fenti) legyen a kezelt csomag neve. A különböző elnevezési szokások miatthívjuk a csomag tényleges nevéta név referencia. Így név , a még nem definiált változót kéri$ apachename.

biztosítják hivatkozás biztosítja, hogy a csomagjelenlegi.

Hozzon létre params.pp fájlt

Azparams.ppfájl meghatározza a szükséges változókat. Miközben definiálhatnánk ezeket a változókat ainit.ppfájlt, mivel több változót kell használni az erőforrástípuson kívül, az a használatávalparams.ppfájl lehetővé teszi a változók definiálásáthautasításokat és több osztályban használják.

Hozzon létre egyparams.ppfájlt és a következő kódot.

/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 ('ez nem támogatott terjesztés. ')}}

Az eredetin kívül init.pposztály, minden osztály nevének el kell ágazniaapache. Ezt az osztályt úgy hívjuk apache :: params . A kettős kettőspont utáni névnek meg kell osztania a nevet a fájllal. Anhautasítás a paraméterek definiálására szolgál, a Tényező , A Bábnak a telepítése részeként még egyszerűbb a telepítés. Itt a Facter lehúzza az operációs rendszer családját (osfamily), felismerni, ha vanpiros kalapvagyDebian-alapú.

A végleg definiált paraméterekkel meg kell hívnunk a params.pp fájl és a paraméterekinit.pp. Ehhez hozzá kell adnunk a paramétereket az osztály neve után, de a nyitó göndör zárójel előtt({).

Így ainit.ppamit korábban hoztunk létre, valami ilyennek kell kinéznie:

class apache ($ apachename = $ :: apache :: params :: apachename,) örökli :: apache :: params {csomag {'apache': név => $ apachename, biztosít = = jelen van,}}

Az érték karakterlánc $ :: apache :: params :: value utasítja Bábut, hogy húzza ki az értékeket a apache modulok, params osztály, majd a paraméter neve. A töredék örökli :: apache :: params engedélyezinit.pphogy örökölje ezeket az értékeket.

2. lépés: A konfigurációs fájlok kezelése

Az Apache konfigurációs fájl attól függően változik, hogy Red Hat vagy Debian alapú rendszeren dolgozik-e.

A bemutató végén a következő függőségfájlokat találja:httpd.conf(Piros kalap),apache2.conf(Debian).

  • Másolja a httpd.conf ésapache2.confkülön fájlokban, és mentse őket a fájlokat Könyvtárnál nél / etc / puppetlabs / code / environments / production / modules / apache / files .
  • Szerkessze mindkét fájlt ide: letiltása életben tartani. Hozzá kell adnia a sort KeepAlive Off ban,-benhttpd.conffájl. Ha nem akarja módosítani ezt a beállítást, akkor tegyen egy megjegyzést mindegyik tetejérefájl:
    /etc/puppetlabs/code/environments/production/modules/apache/files/httpd.conf
# Ezt a fájlt bábu kezeli

Adja hozzá ezeket a fájlokat ainit.ppfájlt, így a Puppet tudni fogja ezeknek a fájloknak a helyét a master kiszolgálón és az ügynök csomópontjain egyaránt. Ehhez a fájl forrás.

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

fájl {'configuration-file': elérési út => $ conffile, = = fájl, forrás => $ confsource,}

Mivel a konfigurációs fájlok két különböző helyen vannak, az erőforrásnak általános nevet adunk konfigurációs fájl az aktával pálya paraméterként definiálva apályatulajdonság.

biztosítják biztosítja, hogy ez egy fájl.

forrás megadja a fent létrehozott fájlok helyét a bábmesteren.

Nyissa meg aparams.ppfájl.

tizedestől bináris python kódig

Meghatározzuk a $ conffile és $ confsourceváltozók ahanyilatkozat:

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

ha $ :: osfamily == 'RedHat' {... $ conffile = '/etc/httpd/conf/httpd.conf' $ confsource = 'báb: ///modules/apache/httpd.conf'} elsif $: : osfamily == 'Debian' {... $ conffile = '/etc/apache2/apache2.conf' $ confsource = 'báb: ///modules/apache/apache2.conf'} else {...

Hozzá kell adnunk a paramétereket a. Elejéhezapacheosztálynyilatkozat ainit.ppfájl, hasonlóan az előző példához.

Amikor a konfigurációs fájl megváltozik, az Apache-ot újra kell indítani. Ennek automatizálásához használhatjuk a szolgáltatási erőforrásta értesíteni attribútum, amely felhívja az erőforrást a futtatásra, ha a konfigurációs fájl megváltozik:

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

fájl {'configuration-file': elérési út => $ conffile, = = fájl, forrás => $ confsource, értesítés => Service ['apache-service'],} service {'apache-service': name => $ apachename, hasrestart => true,}

szolgáltatás Az erőforrás a már létrehozott paramétert használja, amely meghatározta az Apache nevet a Red Hat és a Debian rendszereken.
indítsa újra attribútumot használjuk a meghatározott szolgáltatás újraindításának kiváltására.

3. lépés: Hozza létre a virtuális gazdagépfájlokat

A rendszer terjesztésétől függően a virtuális gazdagép fájljait máshogy kezelik. Emiatt a virtuális gazdagépek kódját egyhautasítás, hasonló aparams.pposztály, de tényleges Bábforrásokat tartalmaz.

  • Aapache / manifestes /könyvtár létrehozása és megnyitása avhosts.ppfájl. Adja hozzá ahanyilatkozat:

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

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

A virtuális gazdagépfájl helye a CentOS 7 szerverünkön/etc/httpd/conf.d/vhost.conf . A fájlt sablonként kell létrehoznia a Bábmesteren. Tegye ugyanezt az Ubuntu virtuális gazdagépfájl esetében is, amely a következő címen található:/etc/apache2/sites-available/example.com.conf, helyettesítveexample.coma szerver FQDN-jével.

  • Navigáljon a sablonok fájl a apache modult, majd hozzon létre két fájlt a virtuális gazdagépekhez:

Red Hat rendszerek esetén:
/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 kombinálva

Debian rendszerek esetén:
/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 kombinálvaMinden megköveteltet megkövetel

Csak két változót használunk ezekben a fájlokban: adminemail és szerver név . Ezeket csomópontonként definiáljuk, asite.ppfájl.

  • Térjen vissza avhosts.ppfájl. A létrehozott sablonokra most hivatkozni lehet a kódban:

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

karakterlánc konvertálása dátum Java-ra
class apache :: vhosts {if $ :: osfamily == 'RedHat' {file {'/etc/httpd/conf.d/vhost.conf': užtikrinti => fájl, tartalom => sablon ('apache / vhosts-rh .conf.erb '),}} elsif $ :: osfamily ==' Debian '{file {' /etc/apache2/sites-available/$servername.conf ': užtikrinti => fájl, tartalom => sablon (' apache /vhosts-deb.conf.erb '),}} else {fail (' Ez nem támogatott terjesztés. ')}}

Mindkét terjesztő család felhívja afájlerőforrást, és vegye fel a virtuális gazdagép helyének címét az adott disztribúción. A Debian számára ez még egyszer a$ kiszolgálónévérték. Aztartalomattribútum hívja a megfelelő sablonokat.

  • Mindkét virtuális gazdagép két könyvtárra hivatkozik. Alapértelmezés szerint nincsenek a rendszereken. Ezeket létrehozhatjuk afájlerőforrás, mindegyik ahanyilatkozat. A teljesvhosts.confa fájlnak hasonlítania kell:

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

class apache :: vhosts {if $ :: osfamily == 'RedHat' {file {'/etc/httpd/conf.d/vhost.conf': užtikrinti => fájl, tartalom => sablon ('apache / vhosts-rh .conf.erb '),} file {[' / var / www / $ kiszolgálónév ',' / var / www / $ kiszolgálónév / public_html ',' / var / www / $ kiszolgálónév / log ',]: biztosít = => könyvtár,}} elsif $ :: osfamily == 'Debian' {fájl {'/etc/apache2/sites-available/$servername.conf': užtikrinti => fájl, tartalom => sablon ('apache / vhosts-deb. conf.erb '),} fájl {[' / var / www / $ kiszolgálónév ',' / var / www / $ kiszolgálónév / public_html ',' / var / www / $ kiszolgálónév / logs ',]: biztosít = = könyvtár ,}} else {fail ('Ez nem támogatott terjesztés.')}}

4. lépés: Tesztelje a modult

  • Navigáljon aapache / manifestes /könyvtár, futtassa a bábelemző minden fájlnál, hogy a báb kódolása hibátlan legyen:

sudo / opt / puppetlabs / bin / bábelemző értelmezi az init.pp params.pp vhosts.pp

Üresen kell visszatérnie, gond nélkül.

  • Navigáljon a példák könyvtár aapachemodul. Hozzon létre egyinit.ppfájlt, és tartalmazza a létrehozott osztályokat. Cserélje ki a következő értékeket:$ kiszolgálónévés$ adminemaila sajátoddal:

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

serveremail = 'webmaster@example.com' $ servername = 'bábu.example.com' tartalmazza az apache-t tartalmazza az apache :: vhosts
  • Tesztelje a modult futtatással báb alkalmazni a ... val –Nem címke:
    sudo / opt / puppetlabs / bin / bábu --noop init.pp

Nem adhat hibát és kimenetet, amely az események frissítését váltja ki. Az Apache telepítéséhez és konfigurálásához a bábmesteren futtasson újra anélkül–Nem, ha kívánja.

  • Lépjen vissza a bábok fő könyvtárába, majd amegnyilvánulmappa (nemaz Apache modulban található).

cd / etc / puppetlabs / code / environments / production / manifestes

Hozzon létre egysite.ppfájl,és minden egyes ügynök csomóponthoz mellékelje az Apache modult. Adja meg a .változókat isadminemail és szerver névparaméterek. A tisite.pphasonlítania kell a következőkre:

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

csomópont 'puppet-agent-ubuntu.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'bábu.example.com' include apache include apache :: vhosts} csomópont 'puppet-agent-centos.example .com '{$ adminemail =' webmaster@example.com '$ servername =' puppet.example.com 'include apache include apache :: vhosts}

Alapértelmezés szerint a felügyelt csomópontok bábügynök-szolgáltatása 30 percenként egyszer automatikusan ellenőrzi a mesteret, és alkalmazza az új konfigurációkat. Az automatikus ügynökfuttatások között manuálisan is meghívhatja a bábügynök folyamatot. Az új modul manuális futtatásához az ügynök csomópontjain, jelentkezzen be a csomópontokba, és futtassa:

sudo / opt / puppetlabs / bin / bábügynök -t

Most, hogy megtanultuk, hogyan kell létrehozni egy modult a semmiből, tanuljuk meg, hogyan kell használni egy már létező modult a bábtáblák bábjátékából.

Használjon a PuppetForge modulját

Bábukovács már sok modulja van a szerver futtatásához. Ezeket ugyanolyan kiterjedten konfigurálhatjuk, mint egy általad létrehozott modult, és időt spórolhatunk, mivel nem kell a nulláról létrehozni a modult.

Győződjön meg arról, hogy a / etc / puppetlabs / code / environments / production / modules könyvtárat, és telepítse a Puppet Forge MySQL modulja a PuppetLabs. Ez telepíti az előfeltétel modulokat is.

cd / etc / puppetlabs / code / environments / production / modules

sudo / opt / puppetlabs / bin / bábu modul telepítse a puppetlabs-mysql fájlt

Használja a Hierát adatbázisok létrehozásához

Mielőtt létrehozná a MySQL modul konfigurációs fájljait, vegye fontolóra, hogy nem akarja ugyanazokat az értékeket használni az összes ügynök csomópontban. A csomópontonkénti helyes adatok biztosításához a Hupát használjuk. Csomópontonként más root jelszót fog használni, így különböző MySQL adatbázisokat hozhat létre.

  • Navigáljon ide/ etc / bábés létrehozza a Hiera konfigurációs fájljáthiera.yamlfőlegbábKönyvtár. A Hiera alapértelmezett értékeit használja:

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

--- verzió: 5 hierarchia: - név: Közös elérési út: common.yaml alapértelmezések: data_hash: yaml_data datadir: data
  • Hozza létre a fájltgyakori.yaml. Meghatározza az alapértelmezett értéket gyökér jelszó a MySQL számára:

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

mysql :: server :: root_password: 'jelszó'

Használjuk agyakori.yamlfájlamikor egy változó máshol nincs meghatározva. Ez azt jelenti, hogy az összes szerver ugyanazt a MySQL root jelszót fogja megosztani. Ezek a jelszavak a biztonság növelése érdekében is kivonhatók.

  • A MySQL modul alapértelmezett értékeinek használatához hozzáadhat egy tartalmazza: „mysql :: server” vonal asite.ppfájl. Ebben a példában azonban felülírja a modul néhány alapértelmezett beállítását, hogy minden csomópontjához adatbázist hozzon létre.

Szerkessze asite.ppfájl a következő értékekkel:

csomópont 'Puppetagent-ubuntu.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostname.example.com' include apache include apache :: vhosts include mysql :: server mysql :: db {'mydb_ $ {fqdn} ': user =>' myuser ', jelszó =>' mypass ', dbname =>' mydb ', host => $ :: fqdn, grant => [' SELECT ',' UPDATE '], tag = > $ domain,}} csomópont 'Puppetagent-centos.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostname.example.com' tartalmazzák az apache-t is: apache :: vhosts is mysql :: server mysql :: db {'mydb _ $ {fqdn}': user => 'myuser', jelszó => 'mypass', dbname => 'mydb', host => $ :: fqdn, grant => ['SELECT', ' UPDATE '], tag => $ domain,}}

A bábmodulok telepítésének automatizálása bábmestertől bábügynökig

  • Ezeket a frissítéseket manuálisan futtathatja minden csomóponton úgy, hogy SSH-t ad az egyes csomópontokba, és kiadja a következő parancsot:

sudo / opt / puppetlabs / bin / bábügynök -t

  • Ellenkező esetben a felügyelt csomópontok bábügynök-szolgáltatása 30 percenként egyszer automatikusan ellenőrzi a mesterét, és alkalmazza az új konfigurációkat.

A katalógust sikeresen alkalmaztuk az Ubuntu ügynökön

A katalógust sikeresen alkalmaztuk a CentOS ügynökön

Így a teljes telepítés megkapja automatizált az ügynök csomópontjain, csak a katalógust alkalmazva.Megtalálhatók a bemutatóhoz használt kódfájlok és függőségek itt .

Remélem, hogy ez a bemutató segített abban, hogy világos képet alkosson a bábmodulokról és manifesztumokról, valamint azok felhasználásáról az informatikai infrastruktúra automatizálásához.Ebben az esetben a munkája olyan egyszerűvé válik, csak adja meg a konfigurációkat a Bábmesterben, és a Bábügynökök automatikusan kiértékelik a fő jegyzéket, és alkalmazzák az Apache és a MySQL beállításait meghatározó modult. Ha ragaszkodik bármilyen kérdéséhez, tegye fel bátran .

Ha megtalálta ezt Báb bemutató ide vonatkozó, nézd meg a az Edureka, egy megbízható online tanulási vállalat, amelynek több mint 250 000 elégedett tanulóval rendelkező hálózata elterjedt az egész világon. Az Edureka DevOps tanúsító tanfolyam segít a tanulóknak szaktudást szerezni a különféle DevOps folyamatokban és olyan eszközökben, mint például a Báb, a Jenkins, a Nagios és a GIT az SDLC több lépésének automatizálásában.