Vodič za početnike s lutkama: Osnove i DSL

⚡ Pametni sažetak

Puppet je platforma za upravljanje konfiguracijom otvorenog koda koja automatizira način na koji se poslužitelji osiguravaju, konfiguriraju i održavaju konzistentnima. Primjenjuje infrastrukturu kao kod putem deklarativnog jezika specifičnog za domenu, zamjenjujući ponavljajuću ručnu administraciju na velikim flotama poslužitelja.

  • 🧩 Konfiguracijski menadžment: Puppet održava servere, pohranu i mreže u poznatom, konzistentnom stanju i čuva povijest svake promjene koju je moguće provjeriti.
  • 🏗️ Glavni agent Architekstura: Linux master sastavlja kataloge i agente na Linuxu, Windows, Solarisili ih Mac OS primjenjuje preko sigurnih certifikata.
  • 🔄 Model povlačenja: Agenti se prijavljuju svakih 1800 sekundi, povlače potreban Puppet kod i ispravljaju svako odstupanje u konfiguraciji na čvoru.
  • 🧠 Deklarativni DSL: Napisan u Rubyju, Puppet koristi deklarativni jezik, tako da definirate željeno krajnje stanje umjesto korak-po-korak naredbi.
  • 🧱 Građevni blokovi: Resursi, klase, manifesti i moduli strukturiraju kod za višekratnu upotrebu, s 49 ugrađenih tipova osnovnih resursa dostupnih prema zadanim postavkama.
  • Primjer praktičnog NTP-a: Definirajte i deklarirajte klasu, validirajte je pomoću puppet parsera naredbe validate, a zatim primijenite manifest pomoću puppet apply naredbe.

Vodič za lutke koji objašnjava osnove upravljanja konfiguracijom, arhitekturu glavnog agenta i deklarativni DSL

Puppet je alat za upravljanje konfiguracijom otvorenog koda koji vam omogućuje definiranje infrastrukture kao koda i održavanje velikih flota poslužitelja u konzistentnom, ponovljivom stanju. Prije nego što naučimo Puppet, prvo ćemo razumjeti upravljanje konfiguracijom.

Što je upravljanje konfiguracijom?

Upravljanje konfiguracijom je proces održavanja softvera i računalnih sustava - poput poslužitelja, pohrane i mreža - u poznatom, željenom i konzistentnom stanju. Također omogućuje pristup točnom povijesnom zapisu stanja sustava u svrhu upravljanja projektima i revizije.

Sistemski administratori uglavnom obavljaju repetitivne zadatke, poput instaliranja poslužitelja i njihovog konfiguriranja. Ovi profesionalci mogu automatizirati taj posao pisanjem skripti.

Međutim, to postaje težak posao kada rade na masovnoj infrastrukturi. Alati za upravljanje konfiguracijom poput Puppet-a uvedeni su kako bi se riješili ti problemi.

Što je Puppet?

Lutka je alat za upravljanje sustavom za centralizaciju i automatizaciju procesa upravljanja konfiguracijom. Puppet se također koristi kao alat za implementaciju softvera.

To je softver otvorenog koda za upravljanje konfiguracijom, koji se široko koristi za konfiguraciju, upravljanje, implementaciju i orkestraciju različitih aplikacija i usluga u cijeloj infrastrukturi organizacije.

Puppet je posebno dizajniran za upravljanje konfiguracijom Linuxa i Windows sustava. Napisan je u Rubyju i koristi njegov jedinstveni Dglavno SOSEBNI Ljezik (DSL) za opis konfiguracije sustava.

Koje su verzije lutke?

Puppet dolazi u dvije verzije:

  • Lutka otvorenog kodaTo je osnovna verzija alata za upravljanje konfiguracijom Puppet-a, poznatog i kao Open Source Puppet. Dostupan je izravno s Puppet-ove web stranice i licenciran je pod Apache 2.0 sustavom.
  • Puppet EnterpriseKomercijalna verzija koja nudi značajke kao što su izvještavanje o usklađenosti, orkestracija, kontrola pristupa temeljena na ulogama, grafičko korisničko sučelje, API i alati naredbenog retka za učinkovito upravljanje čvorovima.

Što Lutka može?

Na primjer, pretpostavimo da imate infrastrukturu s oko 100 poslužitelja. Kao administrator sustava, vaša je uloga osigurati da su svi ti poslužitelji uvijek ažurirani i da rade s punom funkcionalnošću.

Administrator sustava ručno radi na poslužiteljima
Administrator sustava ručno radi na poslužiteljima

Za to možete koristiti Puppet, koji vam omogućuje pisanje jednostavnog koda koji se može automatski implementirati na tim poslužiteljima. To smanjuje ljudski napor i čini proces razvoja brzim i učinkovitim.

Puppet automatizira upravljanje poslužiteljem
Puppet automatizira upravljanje poslužiteljem

Lutka obavlja sljedeće funkcije:

  • Puppet vam omogućuje definiranje različitih konfiguracija za svaki host.
  • Alat vam omogućuje kontinuirano praćenje poslužitelja kako biste potvrdili postoji li potrebna konfiguracija i je li promijenjena. Ako se konfiguracija promijeni, Puppet se vraća na unaprijed definiranu konfiguraciju na hostu.
  • Također omogućuje kontrolu nad svakim konfiguriranim sustavom, tako da se centralizirana promjena automatski provodi svugdje.
  • Također se koristi kao alat za implementaciju jer automatski implementira softver u sustav. Implementira infrastrukturu kao kod, jer su politike i konfiguracije napisane kao kod.

Puppet DSL i paradigme programiranja

Prije nego što naučimo Puppet DSL, shvatimo programske paradigme. Programska paradigma je stil koji se koristi u računalnom programiranju.

Četiri vrste paradigmi su:

  • Imperativ.
  • Deklarativno.
  • Funkcionalno (koje se smatra podskupom deklarativne paradigme).
  • Objektno orijentirano.

Usredotočit ćemo se na imperativne i deklarativne paradigme.

Imperativne paradigme

Ova programska paradigma izražava logiku izračuna (što učiniti) i također opisuje njegov tok upravljanja (kako to učiniti).

Primjer:

Pretpostavimo da idete u svoj ured. Rezervirate taksi i počnete davati vozaču detaljne upute dok ne stignete do ureda. Navođenje što i kako učiniti je imperativan stil.

Deklarativne paradigme

Ova programska paradigma izražava logiku izračuna (što učiniti) bez opisivanja njegovog tijeka upravljanja (kako to učiniti).

Primjer:

Pretpostavimo da idete u svoj ured. Rezervirate Uber taksi i navedete samo konačno odredište (ured). Navođenje što učiniti, ali ne i kako to učiniti, deklarativni je stil.

Paradigma Što učiniti Kako to učiniti
imperativ Da Da
koji tumači Da Ne

Puppet koristi paradigmu deklarativnog programiranja

Puppet koristi pristup deklarativnog programiranja.

Primjer: Stvorite korisnika na sustavu.

To se može učiniti korištenjem imperativnog programskog obrasca sa shell skriptom. Ovdje određujemo kako stvoriti korisnika i koje naredbe koristiti na operativni sustav.

Deklarativne paradigme

Međutim, to se može učiniti i korištenjem deklarativnog programskog obrasca sa samo nekoliko redaka Puppet koda i Puppet domenski specifičnim jezikom (DSL), a i dalje postići isti rezultat.

Deklarativne paradigme

Modeli implementacije alata za upravljanje konfiguracijom

Postoje dva modela implementacije za alati za upravljanje konfiguracijom:

  • Push model implementacije: pokreće ga glavni čvor.
  • Model implementacije temeljen na povlačenju: pokreću ga agenti.

Push model implementacije

U ovom modelu implementacije, glavni poslužitelj šalje konfiguracije i softver pojedinačnim agentima. Nakon provjere sigurne veze, glavni poslužitelj izvršava naredbe na daljinu na agentima. Na primjer, Ansible i Salt Stack.

Model implementacije temeljen na povlačenju

U ovom modelu implementacije, pojedinačni poslužitelji kontaktiraju glavni poslužitelj, provjeravaju i uspostavljaju sigurnu vezu, preuzimaju svoje konfiguracije i softver, a zatim se u skladu s tim konfiguriraju - na primjer, Puppet i Chef.

Kako Puppet radi?

Puppet se temelji na modelu raspoređivanja povlačenjem, gdje se čvorovi agenata redovito prijavljuju - nakon svakih 1800 sekundi — s glavnim čvorom kako bi se provjerilo treba li nešto ažurirati na agentu. Ako je potrebno ažuriranje, agent povlači potreban Puppet kod s glavnog čvora i izvršava potrebne radnje.

Objasnimo to na primjeru postavke glavnog agenta.

Master

Ovo je stroj temeljen na Linuxu s instaliranim Puppet master softverom. Odgovoran je za održavanje konfiguracija u obliku Puppet koda. Glavni čvor može biti samo Linux.

Agenti

Ovo su ciljna računala kojima upravlja Puppet, s instaliranim Puppet agentskim softverom.

Agent se može konfigurirati na bilo kojem podržanom operativnom sustavu, kao što je Linux, Windows, Solarisili Mac OS-u.

Komunikacija između glavnog uređaja i agenta uspostavlja se putem sigurnih certifikata.

Komunikacija agenta Lutkara
Komunikacija agenta Lutkara

Komunikacija između gospodara i agenta

Korak 1) Nakon što se uspostavi veza između agenta i glavnog poslužitelja, Puppet agent šalje podatke o svom stanju glavnom Puppet poslužitelju. To se naziva činjenicama, a te informacije uključuju naziv hosta, detalje o jezgri, IP adresu, detalje o nazivu datoteke i tako dalje.

Komunikacija između gospodara i agenta
Agent šalje činjenice gospodaru

Korak 2) Lutkarski gospodar koristi ove podatke i sastavlja popis konfiguracije koja će se primijeniti na agenta. Ovaj popis konfiguracije koja će se izvršiti na agentu poznat je kao katalogTo može uključivati ​​instalaciju paketa, nadogradnje ili uklanjanje, stvaranje datotečnog sustava, stvaranje ili brisanje korisnika, ponovno pokretanje poslužitelja, promjene IP konfiguracije i tako dalje.

Komunikacija između gospodara i agenta
Master šalje katalog Agentu

Korak 3) Agent koristi ovaj popis konfiguracija za primjenu svih potrebnih promjena konfiguracije na čvoru.

Ako nema odstupanja u konfiguraciji, agent ne izvodi nikakve promjene konfiguracije i ostavlja čvor da radi s istom konfiguracijom.

Komunikacija između gospodara i agenta
Agent primjenjuje konfiguraciju

Korak 4) Nakon što je to gotovo, čvor izvještava Puppet mastera, što ukazuje na to da je konfiguracija primijenjena i dovršena.

Lutkarski blokovi

Puppet pruža fleksibilnost integracije izvješća s alatima trećih strana pomoću Puppet API-ja.

Četiri vrste gradbenih blokova za lutke su:

  1. Resursi
  2. Nastava
  3. manifest
  4. Moduli

Resursi za lutke

Puppet resursi su gradivni blokovi Puppet-a.

Resursi su ugrađene funkcije koji se izvode na pozadini kako bi izvršili potrebne operacije u Puppetu.

Lutkarski tečajevi

Kombinacija različitih resursa može se grupirati u jednu jedinicu koja se naziva klasa.

Manifest lutaka

Manifest je direktorij koji sadrži Puppet DSL datoteke. Ove datoteke imaju ekstenziju .pp, što je skraćenica za Puppet program. Puppet kod sastoji se od definicija ili deklaracija Puppet klasa.

Moduli lutaka

Moduli su skup datoteka i direktorija, kao što su manifesti i definicije klasa. Oni su jedinice u Puppetu koje se mogu ponovno koristiti i dijeliti.

Na primjer, MySQL modul instalira i konfigurira MySQL, A Jenkins modul upravlja Jenkins.

Moduli lutaka
Moduli lutaka

Vrste resursa lutaka

Općenito, sustav se sastoji od datoteka, korisnika, usluga, procesa, paketa i tako dalje. U Puppetu se to naziva resursima i oni su temeljni građevni blokovi Puppet-a.

Sve operacije na Puppet agentima izvode se uz pomoć Puppet resursa.

Puppet resursi su gotovi alati koji se koriste za izvršavanje raznih zadataka i operacija na bilo kojoj podržanoj platformi. Možemo koristiti jedan Puppet resurs za izvršavanje određenog zadatka ili možemo koristiti više Puppet resursa zajedno za izvođenje složenih implementacija konfiguracije aplikacija.

Resursi mogu imati različite vrste. Lutka koristi sredstva i vrste resursa kako bi se opisala konfiguracija sustava.

Postoje tri vrste vrsta resursa:

  1. Lutka jezgra ili ugrađeni tipovi resursa.
  2. Vrste resursa definirane lutkom.
  3. Puppet prilagođene vrste resursa.

Lutka jezgra ili ugrađeni tipovi resursa

Osnovne ili ugrađene vrste resursa su unaprijed izgrađene vrste resursa Puppeta koje se isporučuju s Puppet softverom. Sve osnovne ili ugrađene vrste resursa Puppeta piše i održava Puppet tim.

Vrste resursa definirane lutkom

Definirani tipovi resursa su lagani tipovi resursa napisani u deklarativnom jeziku Puppet korištenjem kombinacije postojećih tipova resursa.

Puppet prilagođene vrste resursa

Prilagođene vrste resursa potpuno su prilagođene vrste resursa napisane u Rubyju.

Istražimo dalje vrste resursa Puppet.

U terminalu upišite sljedeću naredbu za prikaz popisa podnaredbi povezanih s Puppetom:

Puppet --help

Puppet prilagođene vrste resursa

U našem slučaju, zanima nas podnaredba “resurs„, koji ćemo koristiti za pronalaženje informacija o ugrađenim vrstama resursa Puppet.

U terminalu upišite bilo koju od sljedećih naredbi za prikaz popisa akcije povezano s podnaredbom Puppet "resurs"

Puppet help resource		
Puppet resource --help		

Puppet prilagođene vrste resursa

U ovom slučaju imamo resurs kao podnaredba i – vrste kao radnja.

Puppet ima 49 ugrađenih osnovnih vrsta resursa.

U terminalu upišite sljedeću naredbu za prikaz popisa dostupnih ugrađenih vrsta resursa Puppet:

puppet resource –types

Puppet prilagođene vrste resursa

Svaka vrsta podržava popis atributi. Ovi atributi daju detaljan opis koji Puppet koristi za upravljanje resursom.

Da biste saznali sve atribute povezane s tipom resursa Puppet, upotrijebite sljedeću naredbu:

puppet describe <resource type name>	

Parametri će navesti sve dostupne atribute za tu vrstu resursa.

lutka opisati paket

Puppet prilagođene vrste resursa

Novoj osobi je teško razumjeti i povezati mnoge neupravljane Puppet kodne datoteke. Ovdje nam je potrebna neka grupa.ping povezati operacije. Cilj je riješiti jedan problem, kao što su sve operacije potrebne za konfiguriranje SSH-a na poslužitelju, NTP servisu ili kompletnom web poslužitelju ili poslužitelju baze podataka od nule.

Što su lutkarski tečajevi?

Puppet klase su kolekcije Puppet resursa združenih u jednu cjelinu.

Puppet je uveo nastavu kako bi strukturu učinio ponovno upotrebljivom i organiziranom.

Prvo, moramo definirati klasu koristeći sintaksu definicije klase. Klase moraju biti jedinstvene i mogu se deklarirati samo jednom s istim imenom:

class <class-name> {
<Resource declarations>
}

Primjer:

class ntpconfig {
    file {
        "/etc/ntp.conf": 
     ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n",
    }
}

Do sada smo samo definirali klasu; nismo je nigdje koristili. To znači da se kod koji smo napisali nikada neće izvršiti osim ako ovu klasu ne deklariramo negdje drugdje.

Klasna deklaracija

Za korištenje definirane klase u vašem kodu, koristite uključiti ključne riječi.

class ntpconfig {
    file {
        "/etc/ntp.conf": 
      ensure=> "present", 
      content=> "server 0.centos.pool.ntp.org iburst\n",
    }
}
include ntpconfig

Razumijemo ovo na primjeru iz stvarnog svijeta.

Demo instalacija NTP-a

Prvo provjerite da NTP paket već nije prisutan na poslužitelju. Sljedeća naredba neće vratiti ništa ako NTP paket nije prisutan na poslužitelju:

rpm -qa | grep -i ntp

Demo instalacija NTP

Kao što vidimo, NTP paket je već prisutan na poslužitelju. Uklonimo postojeći NTP paket:

yum remove ntp

Nakon uklanjanja paketa, provjerite da datoteka ntp.conf više ne postoji:

ls -lrt /etc/ntp.conf

Demo instalacija NTP

Provjerite postoji li ntp usluga pokretanjem sljedeće naredbe:

systemctl status ntp

Demo instalacija NTP

Napravite novu .pp datoteku za spremanje koda. Iz naredbenog retka:

vi demontp.pp

Prebacite se u način unosa pritiskom na tipku i na tipkovnici.

Upišite sljedeći kôd za izradu nove datoteke:

# 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",
    }
}

Nakon što završite s uređivanjem, pritisnite esc.

Za spremanje datoteke pritisnite :wq!

Sljedeći korak je provjeriti da li kod ima grešaka u sintaksi. Izvršite sljedeću naredbu:

puppet parser validate demontp.pp

Provjerite jeste li prešli na korijen korisnik može dovršiti test bez ikakve greške izvršavanjem naredbe:

su root

test je sljedeći korak u procesu stvaranja koda. Izvršite sljedeću naredbu za izvođenje testa dima:

Puppet applies demontp.pp --noop

Posljednji korak je trčanje Lutka u stvarnom načinu rada i provjerite izlaz.

puppet apply demontp.pp

Lutka nije ništa izvela jer je demo klasa bila samo definiran ali ne proglašen.

Dakle, dok ne deklarirate klasu Puppet, kod se neće primijeniti.

Pusti nas proglasiti demo klasa unutar istog koda pomoću uključi naziv klase na kraju koda:

# 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

Opet, provjeriti da li kod ima grešaka u sintaksi. Izvršite sljedeću naredbu:

puppet parser validate demontp.pp

Provjerite jeste li prešli na korijen korisnik može dovršiti test bez ikakve greške izvršavanjem naredbe:

su root

Ispitivanje je sljedeći korak u procesu stvaranja koda. Izvršite sljedeću naredbu za izvođenje testa dima:

Puppet apply demontp.pp --noop

Posljednji korak je trčanje Lutka u stvarnom načinu rada i provjerite izlaz.

puppet apply demontp.pp

Ovaj put, kod se primjenjuje jer je klasa definirana, a zatim deklarirana.

Demo instalacija NTP

Provjerite postoji li sada datoteka ntp.conf:

ls -lrt /etc/ntp.conf

Provjerite je li ntp servis pokrenut pokretanjem sljedeće naredbe:

systemctl status ntpd

Demo instalacija NTP

Pitanja i odgovori

Puppet je napisan u Rubyju. Koristi vlastiti deklarativni DSL (Domain Specific Language) tako da administratori opisuju željeno stanje sustava umjesto skriptiranja svakog koraka. DSL Puppet je inspiriran Rubyjem, ali ne morate znati Ruby za pisanje manifesta.

Puppet koristi deklarativni, agentski model povlačenja i vlastiti DSL, tako da čvorovi dohvaćaju kataloge s glavnog čvora. Ansible Bez agenata je i gura YAML playbookove preko SSH-a. Puppet je prikladan za dugoročnu provedbu državnih propisa, dok je Ansible jednostavniji za brzu orkestraciju na zahtjev.

Prema zadanim postavkama, Puppet master, također nazvan Puppet Server, osluškuje TCP port 8140. Puppet agenti se povezuju na ovaj port putem HTTPS-a kako bi slali činjenice i preuzimali svoje kompilirane kataloge. Provjerite je li port 8140 otvoren u vatrozidu između agenata i mastera.

Gospodar lutaka mora raditi na Linuxu. Agenti lutaka rade na mnogim platformama, uključujući Linux, Windows, Solarisi Mac OS. Ova podrška za više platformi omogućuje jednom Puppet masteru upravljanje mješovitom flotom poslužitelja i radnih stanica s jednog centralnog mjesta.

Puppet Forge je javno spremište unaprijed izgrađenih Puppet modula koje dijele Puppet i zajednica. Umjesto pisanja manifesta od nule, možete preuzeti module koji instaliraju i konfiguriraju softver kao što je MySQL or Jenkins, a zatim ih prilagodite svom okruženju.

Da. Puppet ostaje široko korišten alat za upravljanje konfiguracijom i infrastrukturom kao kodom, koji sada održava Perforce. Puppet 8 je trenutno glavno izdanje i još uvijek podržava i Puppet otvorenog koda i komercijalni Puppet Enterprise za upravljanje velikim flotama servera.

AI asistenti mogu generirati Puppet DSL iz jednostavnih upita, objasniti postojeće manifeste i označiti sintaktičke ili logičke pogreške prije nego što pokrenete validaciju Puppet parsera. Alati kao što su ChatGPT ubrzajte stvaranje, ali uvijek pregledajte generirane resurse za ispravne putanje i idempotentnost.

Da. GitHub kopilot automatski dovršava Puppet manifeste, deklaracije resursa i definicije klasa iz kratkog komentara ili konteksta datoteke. RevPogledajte njegov izlaz za ispravne tipove resursa, nazive atributa i ovisnosti, jer generirani kod može referencirati zastarjele module ili zadane vrijednosti.

Sažmite ovu objavu uz: