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
- Kulcsfogalmak a bábprogramozásban
- Bábprogram munkafolyamat
- Bemutató: Az Apache és MySQL telepítésének automatizálása
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.pp
nyilvá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.
A 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.pp
fá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.pp
fájl meghatározza a szükséges változókat. Miközben definiálhatnánk ezeket a változókat ainit.pp
fájlt, mivel több változót kell használni az erőforrástípuson kívül, az a használatávalparams.pp
fá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.pp
fá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.pp
osztá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 kalap
vagyDebian-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.pp
amit 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.pp
hogy ö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.conf
kü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,-ben
httpd.conf
fá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.pp
fá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.pp
fájl.
tizedestől bináris python kódig
Meghatározzuk a $ conffile
és $ confsource
vá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.pp
fá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.pp
osztály, de tényleges Bábforrásokat tartalmaz.
- Aapache / manifestes /könyvtár létrehozása és megnyitása a
vhosts.pp
fá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.pp
fájl.
- Térjen vissza a
vhosts.pp
fá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 teljes
vhosts.conf
a 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 a
apache / 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 egy
init.pp
fájlt, és tartalmazza a létrehozott osztályokat. Cserélje ki a következő értékeket:$ kiszolgálónév
és$ adminemail
a 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.pp
fájl,és minden egyes ügynök csomóponthoz mellékelje az Apache modult. Adja meg a .változókat isadminemail
és szerver név
paraméterek. A tisite.pp
hasonlí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.yaml
fő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ájlt
gyakori.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.yaml
fá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 a
site.pp
fá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.pp
fá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.