Vodič za lutke za početnike: Što je lutka i kako se koristi?

Prije nego što naučimo lutku, shvatimo:

Što je upravljanje konfiguracijom?

Upravljanje konfiguracijom je proces održavanja softvera i računalnih sustava (na primjer poslužitelja, pohrane, mreža) u poznatom, željenom i dosljednom stanju. Također omogućuje pristup točnim povijesnim zapisima o stanju sustava za potrebe upravljanja projektima i revizije.

Administratori sustava uglavnom obavljaju zadatke koji se ponavljaju kao što su instaliranje poslužitelja, konfiguriranje tih poslužitelja itd. Ovi profesionalci mogu automatizirati ovaj zadatak pisanjem skripti.

Međutim, to je težak posao kada se radi na masivnoj infrastrukturi. Alat za upravljanje konfiguracijom kao što je Puppet uveden je za rješavanje takvih problema.

Š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 za upravljanje konfiguracijom otvorenog koda koji se široko koristi za konfiguraciju poslužitelja, 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 koda: To je osnovna verzija alata za upravljanje konfiguracijom Puppet, koji je također poznat kao Open Source Puppet. Dostupan je izravno s web stranice Puppet i licenciran je pod sustavom Apache 2.0.
  • Puppet Enterprise: Komercijalna verzija koja nudi značajke kao što su izvješćivanje o usklađenosti, orkestracija, kontrola pristupa temeljena na ulogama, GUI, API i alati naredbenog retka za učinkovito upravljanje čvorovima.

Što Lutka može?

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

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

Da biste to učinili, možete koristiti Puppet, koji vam omogućuje pisanje jednostavnog koda koji se može automatski implementirati na tim poslužiteljima. Time se smanjuje ljudski napor i proces razvoja čini 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 kontinuirani nadzor poslužitelja kako biste potvrdili postoji li potrebna konfiguracija ili ne i nije li promijenjena. Ako se konfiguracija promijeni, alat Puppet vratit će se na unaprijed definiranu konfiguraciju na glavnom računalu.
  • Također pruža kontrolu nad cijelim konfiguriranim sustavom, tako da se centralizirana promjena automatski provodi.
  • Također se koristi kao alat za implementaciju jer automatski postavlja softver u sustav. Provodi se infrastrukturu kao kod jer su politike i konfiguracije napisane kao kod.

Puppet DSL i paradigme programiranja

Prije nego što naučimo Puppet DSL, shvatimo paradigme programiranja:

Paradigma programiranja je stil koji koristite u računalnom programiranju.

Četiri vrste paradigmi su:

  • Imperativ.
  • Deklarativno.
  • Funkcionalni (koji se smatra podskupom te deklarativne paradigme)
  • Objektno orijentirano.

Usredotočit ćemo se na imperativ i deklarativ.

Imperativne paradigme

Ova paradigma programiranja izražava logiku izračuna (Što učiniti) i opisuje njegov kontrolni tok (Kako učiniti)

Primjer:

Pretpostavimo da idete u svoj ured, rezervirate taksi i počnete davati upute korak po korak vozaču dok ne dođete do ureda. Određivanje što i kako učiniti imperativ je stila.

Deklarativne paradigme

Ova paradigma programiranja izražava logiku izračuna (Što učiniti) bez opisa njegovog kontrolnog tijeka (Kako učiniti)

Primjer:

Pretpostavimo da idete u svoj ured, rezervirate Uber taksi i navedete konačno odredište (Ured). Određivanje što učiniti, a ne kako učiniti je deklarativni 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 pomoću imperativnog uzorka programiranja skriptom ljuske: Ovdje navodimo kako stvoriti korisnika i koje naredbe koristiti na operativni sustav.

Deklarativne paradigme

Međutim, to se može učiniti korištenjem deklarativnog programskog obrasca sa samo nekoliko redaka koda lutke, jezikom specifičnim za domenu lutke (DSL), a opet 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 postavljanja glavni poslužitelj šalje konfiguracije i softver pojedinačnim agentima. Nakon provjere sigurne veze, glavni 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 i zatim se konfiguriraju u skladu s tim — na primjer, Puppet i Chef.

Kako Puppet radi?

Puppet se temelji na Pull modelu implementacije, gdje se agentski čvorovi redovito provjeravaju nakon svakog 1800 sekundi s glavnim čvorom da vidite treba li nešto ažurirati u agentu. Ako bilo što treba ažurirati, agent povlači potrebne lutkaste kodove od glavnog i izvodi potrebne radnje.

Objasnimo to na primjeru:

Primjer: Postavljanje glavnog agenta:

Master

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

Agenti

Ciljani strojevi kojima upravlja lutka s instaliranim softverom agenta lutke.

Agent se može konfigurirati na bilo kojem podržanom operativnom sustavu kao što je Linux ili Windows or Solaris ili Mac OS.

Komunikacija između mastera i agenta ostvaruje se putem sigurnih certifikata.

Komunikacija agenta Lutkara
Komunikacija agenta Lutkara

Komunikacija između gospodara i agenta

Korak 1) Nakon što se uspostavi povezanost između agenta i mastera, Puppet agent šalje podatke o svom stanju poslužitelju Puppet master. To se naziva činjenicama: ove informacije uključuju naziv hosta, pojedinosti o kernelu, IP adresu, pojedinosti o nazivu datoteke itd.…

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

Korak 2) Puppet Master koristi te podatke i sastavlja popis s konfiguracijom koja se primjenjuje na agenta. Ovaj popis konfiguracija koje treba izvesti na agentu poznat je kao a katalog. To se može promijeniti kao što je instalacija paketa, nadogradnje ili uklanjanja, stvaranje datotečnog sustava, stvaranje ili brisanje korisnika, ponovno pokretanje poslužitelja, promjene IP konfiguracije itd.

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.

U slučaju da nema pomaka 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 učinjeno, čvor javlja natrag gospodaru lutaka pokazujući da je konfiguracija primijenjena i dovršena.

Lutkarski blokovi

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

Postoje četiri vrste gradivnih blokova lutaka

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

Resursi za lutke

Puppet resursi su građevni blokovi Puppet-a.

Resursi su ugrađene funkcije koji se pokreću na stražnjem kraju za izvođenje potrebnih operacija u marioneti.

Lutkarski tečajevi

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

Manifest lutaka

Manifest je direktorij koji sadrži lutkaste DSL datoteke. Te datoteke imaju nastavak .pp. Ekstenzija .pp označava lutkarski program. Kod lutke sastoji se od definicija ili deklaracija klasa lutke.

Moduli lutaka

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

Na primjer, MySQL modul za instalaciju i konfiguraciju MySQL ili Jenkins modul za upravljanje Jenkinsom itd.

Moduli lutaka
Moduli lutaka

Vrste resursa lutaka

Općenito, sustav se sastoji od datoteka, korisnika, usluga, procesa, paketa itd. U Puppetu se to naziva resursima. Resursi su temeljni građevni blokovi u

Lutka. Sve operacije na marionetskim agentima izvode se uz pomoć lutaka.

Resursi lutaka su gotovi alati koji se koriste za obavljanje raznih zadataka i operacija na bilo kojoj podržanoj platformi. Možemo upotrijebiti jedan resurs lutke za izvođenje određenog zadatka ili možemo koristiti više resursa lutke zajedno za izvođenje nekih 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

Temeljne ili ugrađene vrste resursa unaprijed su ugrađene vrste resursa za lutke koje se isporučuju sa softverom za lutke. Sve osnovne ili ugrađene Puppet vrste resursa napisao je i održava Puppet tim.

Vrste resursa definirane lutkom

Definirani tipovi resursa su lagani tipovi resursa napisani u Puppet deklarativnom jeziku koristeći kombinaciju postojećih tipova resursa.

Puppet prilagođene vrste resursa

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

Istražimo vrste resursa za lutke...

U terminalu upišite sljedeću naredbu za prikaz popisa relevantnih podnaredbi za Puppet:

Puppet --help

Puppet prilagođene vrste resursa

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

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

Puppet help resource		
Puppet resource --help		

Puppet prilagođene vrste resursa

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

Puppet ima 49 ugrađenih osnovnih vrsta resursa.

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

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.

Kako biste saznali sve atribute povezane s vrstom resursa lutke, upotrijebite sljedeću naredbu:

puppet describe <resource type name>	

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

lutka opisati paket

Puppet prilagođene vrste resursa

Teško je novoj osobi razumjeti i povezati mnoge neupravljane lutka kodne datoteke. Ovdje nam je potrebno neko grupiranje da povežemo operacije. Cilj je riješiti jedan problem, kao što su sve operacije potrebne za konfiguraciju ssh-a na poslužitelju ili ntp servisu ili kompletan web poslužitelj ili poslužitelj baze podataka od nule.

Što su lutkarski tečajevi?

Lutkarski razredi zbirka su lutkarskih resursa povezanih u jednu jedinicu.

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, ali je nismo nigdje koristili. Što znači da se ovaj 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 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

Shvatimo ovo na stvarnom scenariju.

Demo instalacija NTP-a

Prvo provjerite da NTP paket nije već prisutan na poslužitelju, sljedeća naredba neće vratiti ništa ako telnet 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 ne postoji:

ls -lrt /etc/ntp.conf

Demo instalacija NTP

Provjerite da ntp usluga ne postoji pokretanjem sljedeće naredbe:

systemctl status ntp

Demo instalacija NTP

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

vi demontp.pp

Prijeđite na način umetanja pritiskom na 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 da provjeriti da li kod ima grešaka u sintaksi. Izvršite sljedeću naredbu:

puppet parser validate demontp.pp

Provjerite jeste li se prebacili na korijen kako biste mogli dovršiti test bez ikakve pogreš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

Zadnji korak je da trčanje lutku u stvarnom načinu rada i provjeriti izlaz.

puppet apply demontp.pp

Puppet nije izvodio ništa jer je demo sat bio samo definiran ali ne proglašen.

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

Idemo 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 se prebacili na korijen kako biste mogli dovršiti test bez ikakve pogreš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

Zadnji korak je da trčanje lutku u stvarnom načinu rada i provjeriti izlaz.

puppet apply demontp.pp

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

Demo instalacija NTP

Uvjerite se da ntp.conf sada postoji:

ls -lrt /etc/ntp.conf

Provjerite je li ntp servis pokrenut izvođenjem sljedeće naredbe:

systemctl status ntpd

Demo instalacija NTP