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.

  • 🧩 Konfiguráció-menedzsment: A Puppet ismert, konzisztens állapotban tartja a szervereket, a tárolóeszközöket és a hálózatokat, és minden változásról auditálható előzményeket tárol.
  • 🏗️ Mester-ügynök Architectúra: Egy Linux mester katalógusokat és ügynököket állít össze Linuxon, Windows, Solaris, vagy a Mac OS biztonságos tanúsítványokra alkalmazza őket.
  • 🔄 Húzómodell: Az ügynökök 1800 másodpercenként bejelentkeznek, lekérik a szükséges Puppet kódot, és kijavítják a csomóponton esetlegesen előforduló konfigurációs eltéréseket.
  • 🧠 Deklaratív DSL: A Ruby nyelven írt Puppet deklaratív nyelvet használ, így a kívánt végállapotot definiálod lépésről lépésre történő parancsok helyett.
  • 🧱 Építőkockák: Az erőforrások, osztályok, manifesztek és modulok újrafelhasználható kódot strukturálnak, alapértelmezés szerint 49 beépített alapvető erőforrástípussal.
  • 🇧🇷 Gyakorlati NTP példa: Definiálj és deklarálj egy osztályt, validáld a puppet parser validate paranccsal, majd alkalmazd a manifestet a puppet apply paranccsal.

Bábjátékos oktatóanyag, amely elmagyarázza a konfigurációkezelés alapjait, a master-agent architektúrát és a deklaratív DSL-t

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.

A rendszergazda manuálisan dolgozik a szervereken
A rendszergazda manuálisan dolgozik a szervereken

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 Puppet automatizálja a szerverkezelést
A Puppet automatizálja a szerverkezelést

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.

Deklaratív paradigmák

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.

Deklaratív paradigmák

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.

Puppet Master Agent Kommunikáció
Puppet Master Agent Kommunikáció

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.

Kommunikáció a Mester és az Ügynök között
Az ügynök tényeket küld a Mesternek

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.

Kommunikáció a Mester és az Ügynök között
A Mester katalógust küld az ügynöknek

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.

Kommunikáció a Mester és az Ügynök között
Az ügynök alkalmazza a konfigurációt

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:

  1. Tudástár
  2. Osztályok
  3. Nyilvánvaló
  4. 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.

Báb modulok
Báb modulok

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:

  1. Puppet mag vagy beépített erőforrástípusok.
  2. A bábban meghatározott erőforrástípusok.
  3. 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

Báb egyéni erőforrástípusok

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		

Báb egyéni erőforrástípusok

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

Báb egyéni erőforrástípusok

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

Báb egyéni erőforrástípusok

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

Demo Telepítse az NTP-t

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

Demo Telepítse az NTP-t

A következő parancs futtatásával ellenőrizze, hogy az ntp szolgáltatás nem létezik-e:

systemctl status ntp

Demo Telepítse az NTP-t

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.

Demo Telepítse az NTP-t

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

Demo Telepítse az NTP-t

GYIK

A Puppet Ruby nyelven íródott. Saját deklaratív Domain Specific Language (DSL) nyelvet használ, így az adminisztrátorok a kívánt rendszerállapotot írhatják le az egyes lépések szkriptelése helyett. A Puppet DSL-t a Ruby ihlette, de a manifestek írásához nem kell Ruby-t ismerni.

A Puppet egy deklaratív, ágensalapú lehívási modellt és saját DSL-t használ, így a csomópontok egy mastertől kérik le a katalógusokat. Ansible ügynökmentes és YAML playbookokat használ az SSH helyett. A Puppet a hosszú távú állapotkikényszerítést célozza meg, míg az Ansible egyszerűbb a gyors, igény szerinti összehangoláshoz.

Alapértelmezés szerint a Puppet master, más néven Puppet Server, a TCP 8140-es portján figyel. A Puppet ügynökök HTTPS-en keresztül ehhez a porthoz csatlakoznak, hogy adatokat küldjenek be és letöltsék a lefordított katalógusaikat. Győződjön meg arról, hogy a 8140-es port nyitva van a tűzfalon az ügynökök és a master között.

A Puppet masternek Linuxon kell futnia. A Puppet ügynökök számos platformon futnak, beleértve a Linuxot is. Windows, Solaris, és Mac OS. Ez a platformfüggetlen ügynöktámogatás lehetővé teszi, hogy egyetlen Puppet master egyetlen központi helyről kezeljen vegyes szerver- és munkaállomásflottát.

A Puppet Forge a Puppet és a közösség által megosztott, előre elkészített Puppet modulok nyilvános tárháza. Ahelyett, hogy a semmiből írná a manifest fájlokat, letölthet olyan modulokat, amelyek olyan szoftvereket telepítenek és konfigurálnak, mint például MySQL or Jenkins, majd igazítsd őket a környezetedhez.

Igen. A Puppet továbbra is egy széles körben használt konfigurációkezelő és infrastruktúra-kód eszköz, amelyet most a Perforce tart karban. A Puppet 8 a jelenlegi fő kiadás, és továbbra is támogatja mind a nyílt forráskódú Puppet-et, mind a kereskedelmi verziót. Puppet Enterprise nagyméretű szerverflották kezelésére.

Az AI-asszisztensek egyszerű nyelvű promptokból képesek Puppet DSL-t generálni, elmagyarázni a meglévő manifesteket, és megjelölni a szintaxis- vagy logikai hibákat, mielőtt futtatná a Puppet parser validációt. Eszközök, mint például ChatGPT gyorsítsa fel a szerkesztést, de mindig ellenőrizze a létrehozott erőforrásokat a helyes elérési utak és idempotencia szempontjából.

Igen. GitHub másodpilóta automatikusan kiegészíti a Puppet manifesteket, erőforrás-deklarációkat és osztálydefiníciókat egy rövid megjegyzésből vagy fájlkontextusból. RevEllenőrizze a kimenetét a helyes erőforrástípusok, attribútumnevek és függőségek szempontjából, mert a generált kód elavult modulokra vagy alapértelmezett értékekre hivatkozhat.

Foglald össze ezt a bejegyzést a következőképpen: