Bábjáték kezdőknek: alapok és DSL
⚡ Okos összefoglaló
A Puppet egy nyílt forráskódú konfigurációkezelő platform, amely automatizálja a szerverek kiépítését, konfigurálását és konzisztensségének fenntartását. Az infrastruktúrát kódként alkalmazza egy deklaratív, tartományspecifikus nyelven keresztül, kiváltva az ismétlődő manuális adminisztrációt a nagy szerverflottákon.

A Puppet egy nyílt forráskódú konfigurációkezelő eszköz, amely lehetővé teszi az infrastruktúra kódként való definiálását, és nagyszámú szerverflották konzisztens, megismételhető állapotban tartását. Mielőtt megismerkednénk a Puppettel, először is nézzük meg a konfigurációkezelést.
Mi az a konfigurációkezelés?
A konfigurációkezelés a szoftverek és számítógépes rendszerek – például szerverek, tárolók és hálózatok – ismert, kívánt és konzisztens állapotban tartásának folyamata. Emellett hozzáférést biztosít a rendszerállapot pontos előzményeihez projektmenedzsment és auditálási célokra.
A rendszergazdák többnyire ismétlődő feladatokat végeznek, például szerverek telepítését és konfigurálását. Ezek a szakemberek szkriptek írásával automatizálhatják ezt a munkát.
Ez azonban nehéz feladattá válik, ha egy hatalmas infrastruktúrán dolgoznak. A konfigurációkezelő eszközöket, mint például a Puppet, ezen problémák megoldására vezették be.
Mi az a Puppet?
Báb A Puppet egy rendszerfelügyeleti eszköz a konfigurációkezelési folyamat központosítására és automatizálására. A Puppet szoftvertelepítési eszközként is használható.
Ez egy nyílt forráskódú konfigurációkezelő szoftver, amelyet széles körben használnak szerverkonfigurációra, -kezelésre, -telepítésre és különféle alkalmazások és szolgáltatások összehangolására egy szervezet teljes infrastruktúrájában.
A Puppet kifejezetten a Linux és a konfigurációk kezelésére szolgál Windows rendszerek. Ruby nyelven íródott, és az egyediségét használja Dfő- Specific Lnyelv (DSL) a rendszerkonfiguráció leírására.
Mik a Puppet verziók?
A Puppet két változatban kapható:
- Nyílt forráskódú bábEz a Puppet konfigurációkezelő eszköz, más néven nyílt forráskódú Puppet alapverziója. Közvetlenül a Puppet weboldaláról érhető el, és az Apache 2.0 rendszer licence alatt működik.
- Puppet EnterpriseKereskedelmi verzió, amely olyan funkciókat kínál, mint a megfelelőségi jelentéskészítés, az vezénylés, a szerepköralapú hozzáférés-vezérlés, a grafikus felhasználói felület, az API és a parancssori eszközök a csomópontok hatékony kezeléséhez.
Mire képes a báb?
Tegyük fel például, hogy van egy körülbelül 100 szerverből álló infrastruktúrája. Rendszergazdaként az Ön feladata annak biztosítása, hogy ezek a szerverek mindig naprakészek legyenek és teljes funkcionalitással működjenek.

Ehhez használhatod a Puppet programot, amely lehetővé teszi egyszerű kód írását, amely automatikusan telepíthető ezeken a szervereken. Ez csökkenti az emberi erőfeszítést, és gyorssá és hatékonnyá teszi a fejlesztési folyamatot.

A báb a következő funkciókat látja el:
- A Puppet lehetővé teszi, hogy minden gazdagéphez külön konfigurációt határozzon meg.
- Az eszköz lehetővé teszi a szerverek folyamatos figyelését annak megerősítésére, hogy a szükséges konfiguráció létezik-e és nem módosult-e. Ha a konfiguráció megváltozik, a Puppet visszaáll a gazdagépen előre definiált konfigurációra.
- Emellett minden konfigurált rendszer feletti vezérlést biztosít, így a központosított változtatás automatikusan érvényesül mindenhol.
- Telepítési eszközként is használják, mivel automatikusan telepít szoftvereket a rendszerre. Megvalósítja infrastruktúra kódként, mivel a szabályzatok és konfigurációk kódként vannak megírva.
Puppet DSL és programozási paradigmák
Mielőtt megismerkednénk a bábnyelvi DSL-lel, nézzük meg a programozási paradigmákat. A programozási paradigma egy olyan stílus, amelyet a számítógépes programozásban használunk.
A paradigmák négy típusa:
- Parancsoló.
- Kijelentő.
- Funkcionális (amelyet a deklaratív paradigma egy részhalmazának tekintünk).
- Objektum orientált.
Az imperatív és a deklaratív paradigmák vizsgálatára fogunk összpontosítani.
Imperatív paradigmák
Ez a programozási paradigma kifejezi a számítás logikáját (mit kell tenni), és leírja a vezérlési folyamatát is (hogyan kell csinálni).
Példa:
Tegyük fel, hogy az irodádba mész. Foglalsz egy taxit, és lépésről lépésre útbaigazítást adsz a sofőrnek, amíg el nem éred az irodát. Fontos, hogy pontosan meghatározd, mit és hogyan kell csinálni.
Deklaratív paradigmák
Ez a programozási paradigma egy számítás logikáját (mit kell tenni) fejezi ki anélkül, hogy leírná a vezérlési folyamatát (hogyan kell csinálni).
Példa:
Tegyük fel, hogy az irodádba mész. Foglalsz egy Uber taxit, és csak a végállomást (az irodát) adod meg. Az, hogy megadod, mit kell tenned, de nem azt, hogy hogyan, egy kijelentő stílus.
| Paradigma | Mit tegyél: | Hogyan kell csinálni |
|---|---|---|
| parancsoló | Igen | Igen |
| Nyilatkozatos | Igen | Nem |
A Puppet deklaratív programozási paradigmát használ
A Puppet deklaratív programozási megközelítést alkalmaz.
Példa: Hozz létre egy felhasználót a rendszeren.
Ez imperatív programozási mintával és shell szkripttel tehető meg. Itt adjuk meg, hogyan kell létrehozni a felhasználót, és milyen parancsokat kell használni a operációs rendszer.
Azonban deklaratív programozási mintával is megvalósítható, mindössze néhány sor Puppet kóddal és a Puppet domain-specifikus nyelvvel (DSL), és továbbra is ugyanazt az eredményt érhetjük el.
Konfigurációkezelő eszközök telepítési modelljei
Két telepítési modell létezik konfigurációkezelő eszközök:
- Push-alapú telepítési modell: egy fő csomópont kezdeményezi.
- Lehívás alapú telepítési modell: ügynökök kezdeményezték.
Push-alapú telepítési modell
Ebben a telepítési modellben a főszerver küldi el a konfigurációkat és a szoftvereket az egyes ügynököknek. A biztonságos kapcsolat ellenőrzése után a főszerver távolról futtat parancsokat az ügynökökön. Például, Ansible és Salt Stack.
Lekéréses alapú telepítési modell
Ebben a telepítési modellben az egyes szerverek kapcsolatba lépnek egy fő szerverrel, ellenőrzik és létrehozzák a biztonságos kapcsolatot, letöltik a konfigurációikat és a szoftvereiket, majd ennek megfelelően konfigurálják magukat – például Puppet és Chef.
Hogyan működik a Puppet?
A Puppet egy lehívásos telepítési modellen alapul, ahol az ügynökcsomópontok rendszeresen bejelentkeznek – minden egyes 1800 másodpercek alatt – a mestercsomóponttal, hogy megállapítsák, kell-e valamit frissíteni az ügynökön. Ha frissítésre van szükség, az ügynök lekéri a szükséges Puppet kódot a mestertől, és végrehajtja a szükséges műveleteket.
Magyarázzuk el ezt egy master-agent beállítás példáján.
A Mester
Ez egy Linux alapú gép, amelyre telepítve van a Puppet master szoftver. Ez felelős a konfigurációk Puppet kód formájában történő karbantartásáért. A master csomópont csak Linux lehet.
Az ügynökök
Ezek a Puppet által kezelt célgépek, amelyekre telepítve van a Puppet ügynökszoftver.
Az ügynök bármilyen támogatott operációs rendszeren konfigurálható, például Linuxon, Windows, Solaris, vagy Mac OS rendszeren.
A mester és az ügynök közötti kommunikáció biztonságos tanúsítványokon keresztül történik.

Kommunikáció a Mester és az Ügynök között
Step 1) Miután létrejött a kapcsolat az ügynök és a master szerver között, a Puppet ügynök adatokat küld az állapotáról a Puppet master szervernek. Ezeket tényeknek nevezzük, és ezek az információk tartalmazzák a hosztnevet, a kernel részleteit, az IP-címet, a fájlnév részleteit stb.

Step 2) A Bábmester ezeket az adatokat felhasználva összeállít egy listát az ügynökön alkalmazandó konfigurációkról. Ezt az ügynökön végrehajtandó konfigurációk listáját egy katalógusEz magában foglalhatja a csomagok telepítését, frissítéseit vagy eltávolításait, fájlrendszer létrehozását, felhasználók létrehozását vagy törlését, a szerver újraindítását, az IP-konfiguráció módosítását és így tovább.
Step 3) Az ügynök ezt a konfigurációs listát használja a szükséges konfigurációs módosítások alkalmazásához a csomóponton.
Ha nincsenek eltérések a konfigurációban, az ügynök nem hajt végre konfigurációs módosításokat, és a csomópontot ugyanazzal a konfigurációval hagyja futni.

Step 4) Miután elkészült, a csomópont jelentést küld a Puppet masternek, jelezve, hogy a konfiguráció alkalmazása megtörtént és befejeződött.
Bábblokkok
A Puppet rugalmasságot biztosít a jelentések harmadik féltől származó eszközökkel való integrálásához a Puppet API-k használatával.
Négyféle bábépítő elem létezik:
- Tudástár
- Osztályok
- Nyilvánvaló
- Modulok
Puppet Resources
A bábjáték alapjait a bábjáték anyagai alkotják.
Az erőforrások a beépített funkciók amelyek a háttérben futnak a Puppetben szükséges műveletek végrehajtásához.
Bábos osztályok
A különböző erőforrások kombinációi egyetlen egységbe, úgynevezett osztályba csoportosíthatók.
Puppet Manifest
A manifest egy könyvtár, amely Puppet DSL fájlokat tartalmaz. Ezek a fájlok .pp kiterjesztésűek, ami a Puppet program rövidítése. A Puppet kód a Puppet osztályok definícióiból vagy deklarációiból áll.
Báb modulok
A modulok fájlok és könyvtárak gyűjteményei, például manifesztek és osztálydefiníciók. Ezek a Puppet újrafelhasználható és megosztható egységei.
Például a MySQL modul telepítése és konfigurálása MySQL, És a Jenkins modul kezeli Jenkins.

A báb erőforrások típusai
Általánosságban elmondható, hogy egy rendszer fájlokból, felhasználókból, szolgáltatásokból, folyamatokból, csomagokból és így tovább áll. A Puppetben ezeket erőforrásoknak nevezzük, és ezek a Puppet alapvető építőkövei.
A Puppet ügynökökön végzett összes műveletet Puppet erőforrások segítségével hajtják végre.
A Puppet erőforrások előre elkészített eszközök, amelyek különféle feladatok és műveletek végrehajtására szolgálnak bármely támogatott platformon. Használhatunk egyetlen Puppet erőforrást egy adott feladat végrehajtásához, vagy több Puppet erőforrást együtt használhatunk összetett alkalmazáskonfigurációk telepítéséhez.
Az erőforrások különböző típusúak lehetnek. Bábhasználat erőforrás és a erőforrástípusok a rendszer konfigurációjának leírásához.
Háromféle erőforrástípus létezik:
- Puppet mag vagy beépített erőforrástípusok.
- A bábban meghatározott erőforrástípusok.
- Báb egyéni erőforrástípusok.
Puppet mag vagy beépített erőforrástípusok
Az alapvető vagy beépített erőforrástípusok a Puppet szoftverrel együtt szállított előre elkészített Puppet erőforrástípusok. Az összes alapvető vagy beépített Puppet erőforrástípust a Puppet csapata írja és tartja karban.
A bábban meghatározott erőforrástípusok
A definiált erőforrástípusok könnyűsúlyú erőforrástípusok, amelyeket a Puppet deklaratív nyelven írtak, meglévő erőforrástípusok kombinációját használva.
Báb egyéni erőforrástípusok
Az egyéni erőforrástípusok teljesen testreszabott, Ruby nyelven írt erőforrástípusok.
Vizsgáljuk meg részletesebben a bábjátékok erőforrástípusait.
A terminálban írja be a következő parancsot a Puppet-hez kapcsolódó alparancsok listájának megjelenítéséhez:
Puppet --help
A mi esetünkben a "" alparancs érdekel minketforrás„, amelyet a beépített Puppet erőforrástípusokról fogunk használni.
A terminálba írja be a következő parancsok bármelyikét a lista megjelenítéséhez cselekvések a Báb alparancshoz társítva „forrás"
Puppet help resource Puppet resource --help
Ebben az esetben van forrás mint az alparancsnokság és -típusok mint a cselekvés.
A Puppet 49 beépített alapvető erőforrástípussal rendelkezik.
A terminálban írja be a következő parancsot a rendelkezésre álló beépített Puppet erőforrástípusok listájának megjelenítéséhez:
puppet resource –types
Mindegyik típus egy listát támogat attribútumok. Ezek az attribútumok részletes leírást adnak, amelyet a Puppet az erőforrás kezelésére használ.
A Puppet erőforrástípushoz társított összes attribútum megkereséséhez használja a következő parancsot:
puppet describe <resource type name>
A paraméterek felsorolják az adott erőforrástípus összes elérhető attribútumát.
báb leírás csomag
Egy új embernek nehéz megérteni és összekapcsolni a sok kezeletlen Puppet kódfájlt. Itt van szükségünk némi alapos ismeretre.ping a műveletek összekapcsolása. A cél egyetlen probléma megoldása, például az SSH konfigurálásához szükséges összes művelet elvégzése egy szerveren, egy NTP szolgáltatáson, vagy egy komplett webszerveren vagy adatbázis-szerveren a nulláról.
Mik azok a bábórák?
A bábosztályok a bábjátékhoz kapcsolódó erőforrások gyűjteményei, amelyek egyetlen egységként vannak összefogva.
A Puppet osztályokat vezetett be, hogy a szerkezet újrahasznosítható és rendszerezhető legyen.
Először is definiálnunk kell egy osztályt az osztálydefiníciós szintaxis segítségével. Az osztályoknak egyedieknek kell lenniük, és csak egyszer deklarálhatók ugyanazzal a névvel:
class <class-name> {
<Resource declarations>
}
Példa:
class ntpconfig {
file {
"/etc/ntp.conf":
ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n",
}
}
Eddig csak definiáltuk az osztályt; sehol sem használtuk. Ez azt jelenti, hogy az általunk írt kód soha nem fog végrehajtódni, hacsak máshol nem deklaráljuk ezt az osztályt.
Osztálynyilatkozat
Egy definiált osztály használatához a kódban, használd a tartalmaz kulcsszó.
class ntpconfig {
file {
"/etc/ntp.conf":
ensure=> "present",
content=> "server 0.centos.pool.ntp.org iburst\n",
}
}
include ntpconfig
Értsük meg ezt egy valós helyzettel.
NTP demo telepítés
Először is győződjön meg arról, hogy az NTP-csomag nincs jelen a szerveren. A következő parancs semmit sem ad vissza, ha az NTP-csomag nincs jelen a szerveren:
rpm -qa | grep -i ntp
Amint láthatjuk, az NTP csomag már létezik a szerveren. Távolítsuk el a meglévő NTP csomagot:
yum remove ntp
A csomag eltávolítása után győződjön meg arról, hogy az ntp.conf fájl már nem létezik:
ls -lrt /etc/ntp.conf
A következő parancs futtatásával ellenőrizze, hogy az ntp szolgáltatás nem létezik-e:
systemctl status ntp
Hozzon létre egy új .pp fájlt a kód mentéséhez. A parancssorból:
vi demontp.pp
Váltson beszúrás módba az i billentyű megnyomásával a billentyűzeten.
Új fájl létrehozásához írja be a következő kódot:
# Class Definition
class ntpconfig {
# Installing NTP Package
package {"ntp":
ensure=> "present",
}
# Configuring NTP configuration file
file {"/etc/ntp.conf":
ensure=> "present",
content=> "server 0.centos.pool.ntp.org iburst\n",
}
# Starting NTP services
service {"ntpd":
ensure=> "running",
}
}
Miután befejezte a szerkesztést, nyomja meg az Esc billentyűt.
A fájl mentéséhez nyomja meg a :wq!
A következő lépés az, hogy ellenőrizze hogy a kódban vannak-e szintaktikai hibák. Hajtsa végre a következő parancsot:
puppet parser validate demontp.pp
Győződjön meg róla, hogy átváltott a gyökér a felhasználó hiba nélkül elvégezheti a tesztet a következő parancs végrehajtásával:
su root
Tesztelés a kód létrehozási folyamatának következő lépése. A füstteszt végrehajtásához hajtsa végre a következő parancsot:
Puppet applies demontp.pp --noop
Az utolsó lépés az futás Bábozd be a képet valós módban, és ellenőrizd a kimenetet.
puppet apply demontp.pp
A báb nem adott elő semmit, mert a bemutató óra csak meghatározott de nem bevallott.
Tehát, amíg nem deklarálod a Puppet osztályt, a kód nem kerül alkalmazásra.
Engedje meg, kijelent a demó osztály ugyanazon kódon belül használja tartalmazza az osztály nevét a kód végén:
# Class Definition
class ntpconfig {
# Installing NTP Package
package {"ntp":
ensure=> "present",
}
# Configuring NTP configuration file
file {"/etc/ntp.conf":
ensure=> "present",
content=> "server 0.centos.pool.ntp.org iburst\n",
}
# Starting NTP services
service {"ntpd":
ensure=> "running",
}
}
# Class Declaration
include ntpconfig
Ismét, ellenőrizze hogy a kódban vannak-e szintaktikai hibák. Hajtsa végre a következő parancsot:
puppet parser validate demontp.pp
Győződjön meg róla, hogy átváltott a gyökér a felhasználó hiba nélkül elvégezheti a tesztet a következő parancs végrehajtásával:
su root
Tesztelés a kód létrehozási folyamatának következő lépése. A füstteszt végrehajtásához hajtsa végre a következő parancsot:
Puppet apply demontp.pp --noop
Az utolsó lépés az futás Bábozd be a képet valós módban, és ellenőrizd a kimenetet.
puppet apply demontp.pp
Ezúttal a kód alkalmazásra kerül, mivel az osztályt definiálták, majd deklarálták.
Győződjön meg róla, hogy az ntp.conf fájl létezik:
ls -lrt /etc/ntp.conf
A következő parancs futtatásával ellenőrizze, hogy az ntp szolgáltatás elindult-e:
systemctl status ntpd











