Nukke opetusohjelma aloittelijoille: Mikä on nukke ja kuinka sitä käytetään?

Ennen kuin opimme Puppetin, ymmärrämme:

Mitä on kokoonpanonhallinta?

Kokoonpanon hallinta on prosessi, jossa ohjelmistot ja tietokonejärjestelmät (esimerkiksi palvelimet, tallennustila, verkot) pidetään tunnetussa, halutussa ja yhdenmukaisessa tilassa. Se mahdollistaa myös tarkan historiallisen tietueen järjestelmän tilasta projektinhallintaa ja auditointia varten.

Järjestelmänvalvojat suorittavat enimmäkseen toistuvia tehtäviä, kuten palvelimien asennuksen, palvelinten konfiguroinnin jne. Nämä ammattilaiset voivat automatisoida tämän tehtävän kirjoittamalla komentosarjoja.

Se on kuitenkin vaikeaa työtä, kun he työskentelevät massiivisen infrastruktuurin parissa. Tällaisten ongelmien ratkaisemiseksi otettiin käyttöön kokoonpanonhallintatyökalu, kuten Puppet.

Mikä on Puppet?

nukke on järjestelmänhallintatyökalu konfiguraatiohallintaprosessin keskittämiseen ja automatisointiin. Puppetia käytetään myös ohjelmiston käyttöönottotyökaluna. Se on avoimen lähdekoodin kokoonpanonhallintaohjelmisto, jota käytetään laajalti palvelinkonfigurointiin, hallintaan, käyttöönottoon ja eri sovellusten ja palveluiden organisointiin organisaation koko infrastruktuurissa.

Puppet on erityisesti suunniteltu hallitsemaan Linuxin ja Windows järjestelmät. Se on kirjoitettu rubiinilla ja käyttää sen ainutlaatuista DERF repressor domain SRITYISET LDSL (anguage) kuvaamaan järjestelmän kokoonpanoa.

Mitkä ovat Puppet-versiot?

Puppetista on kaksi versiota:

  • Avoimen lähdekoodin nukke: Se on perusversio Puppet-kokoonpanonhallintatyökalusta, joka tunnetaan myös nimellä Open Source Puppet. Se on saatavana suoraan Puppetin verkkosivustolta, ja se on lisensoitu Apache 2.0 -järjestelmän mukaisesti.
  • Nukkeyritys: Kaupallinen versio, joka tarjoaa ominaisuuksia, kuten vaatimustenmukaisuusraportoinnin, orkestroinnin, roolipohjaisen pääsynhallinnan, GUI:n, API:n ja komentorivityökalut solmujen tehokkaaseen hallintaan.

Mitä Nukke voi tehdä?

Sinulla on esimerkiksi infrastruktuuri, jossa on noin 100 palvelinta. Järjestelmänvalvojana sinun tehtäväsi on varmistaa, että kaikki nämä palvelimet ovat aina ajan tasalla ja toimivat kaikilla toiminnoilla.

Järjestelmänvalvoja työskentelee manuaalisesti palvelimilla
Järjestelmänvalvoja työskentelee manuaalisesti palvelimilla

Voit tehdä tämän käyttämällä Puppetia, jonka avulla voit kirjoittaa yksinkertaisen koodin, joka voidaan ottaa käyttöön automaattisesti näillä palvelimilla. Tämä vähentää inhimillistä työtä ja tekee kehitysprosessista nopean ja tehokkaan.

Puppet automatisoi palvelinhallinnan
Puppet automatisoi palvelinhallinnan

Nukke suorittaa seuraavat toiminnot:

  • Puppetin avulla voit määrittää erilliset asetukset jokaiselle isännälle.
  • Työkalun avulla voit jatkuvasti valvoa palvelimia varmistaaksesi, onko vaadittu kokoonpano olemassa vai ei, eikä sitä muuteta. Jos asetusta muutetaan, Puppet-työkalu palaa isäntäkoneen ennalta määritettyyn kokoonpanoon.
  • Se tarjoaa myös hallinnan koko määritettyyn järjestelmään, joten keskitetty muutos tapahtuu automaattisesti.
  • Sitä käytetään myös käyttöönottotyökaluna, koska se ottaa ohjelmiston automaattisesti käyttöön järjestelmään. Se toteuttaa infrastruktuuria koodina, koska käytännöt ja määritykset kirjoitetaan koodina.

Puppet DSL ja ohjelmointiparadigmat

Ennen kuin opimme Puppet DSL:n, ymmärrämme ohjelmointiparadigmat:

Ohjelmointiparadigma on tyyli, jota käytät tietokoneohjelmoinnissa.

Neljä paradigmatyyppiä ovat:

  • Pakollinen.
  • Deklaratiivista.
  • Funktionaalinen (jota pidetään tuon deklaratiivisen paradigman osajoukona)
  • Oliosuuntautunut.

Keskitymme imperatiiviseen ja deklaratiiviseen.

Pakolliset paradigmat

Tämä ohjelmointiparadigma ilmaisee laskennan logiikan (Mitä tehdä) ja kuvaa sen ohjauskulkua (Miten tehdä)

Esimerkiksi:

Oletetaan, että olet menossa toimistollesi, varaat taksin ja alat antaa vaiheittaisia ​​ohjeita kuljettajalle, kunnes tulet toimistoon. Määrittäminen, mitä tehdä ja miten tehdä, on ehdoton tyyli.

Deklaratiiviset paradigmat

Tämä ohjelmointiparadigma ilmaisee laskennan logiikan (Mitä tehdä) kuvaamatta sen ohjausvirtaa (Kuinka tehdä)

Esimerkiksi:

Oletetaan, että olet menossa toimistoosi, varaat Uber-taksin ja määrität lopullisen määränpään (toimisto). Sen määrittäminen, mitä ei saa tehdä, miten tehdä, on deklaratiivinen tyyli.

Paradigma Mitä tehdä Miten tehdä
imperatiivi Kyllä Kyllä
deklaratiivinen Kyllä Ei

Puppet käyttää deklaratiivista ohjelmointiparadigmaa

Puppet käyttää deklaratiivista ohjelmointitapaa.

Esimerkiksi: Luo käyttäjä järjestelmään:

Se voidaan tehdä käyttämällä pakollista ohjelmointimallia shell-skriptillä: Tässä määritetään kuinka käyttäjä luodaan ja mitä komentoja käytetään käyttöjärjestelmän.

Deklaratiiviset paradigmat

Se voidaan kuitenkin tehdä käyttämällä deklaratiivista ohjelmointimallia vain muutamalla nukkekoodirivillä, Puppet domain -spesifisellä kielellä (DSL), ja silti saavuttaa sama tulos.

Deklaratiiviset paradigmat

Kokoonpanonhallintatyökalujen käyttöönottomallit

Käyttöönottomalleja on kaksi kokoonpanonhallintatyökalut :

  • Push-pohjainen käyttöönottomalli: pääsolmun käynnistämä.
  • Vetopohjainen käyttöönottomalli: agenttien käynnistämä.

Push-pohjainen käyttöönottomalli

Tässä käyttöönottomallissa pääpalvelin työntää kokoonpanot ja ohjelmistot yksittäisille agenteille. Kun yhteys on suojattu, isäntä suorittaa komentoja etänä agenteilla. Esimerkiksi, Ansible ja Salt Stack.

Vetopohjainen käyttöönottomalli.

Tässä käyttöönottomallissa yksittäiset palvelimet ottavat yhteyttä pääpalvelimeen, varmistavat ja muodostavat suojatun yhteyden, lataavat kokoonpanonsa ja ohjelmistonsa ja määrittävät sitten itsensä vastaavasti – esimerkiksi Puppet ja Chef.

Kuinka Puppet toimii?

Puppet perustuu Pull-käyttöönottomalliin, jossa agenttisolmut kirjautuvat sisään säännöllisesti jokaisen jälkeen 1800 sekuntia pääsolmun kanssa nähdäksesi, tarvitseeko jotain päivittää agenttiin. Jos jotain on päivitettävä, agentti hakee tarvittavat nukkekoodit isännältä ja suorittaa vaaditut toimenpiteet.

Selitetään se esimerkillä:

Esimerkiksi: Master – Agentin asetukset:

Master

Linux-pohjainen kone, johon on asennettu Puppet master -ohjelmisto. Se vastaa konfiguraatioiden ylläpidosta nukkekoodien muodossa. Pääsolmu voi olla vain Linux.

Agentit

Nuken hallitsemat kohdekoneet, joihin on asennettu nukkeagenttiohjelmisto.

Agentti voidaan määrittää mihin tahansa tuettuun käyttöjärjestelmään, kuten Linuxiin tai Windows or Solaris tai Mac OS.

Viestintä päällikön ja agentin välillä muodostetaan suojattujen sertifikaattien avulla.

Puppet Master Agenttiviestintä
Puppet Master Agenttiviestintä

Kommunikointi päällikön ja agentin välillä

Vaihe 1) Kun yhteys agentin ja isäntäpalvelimen välille on muodostettu, Puppet-agentti lähettää tiedot tilastaan ​​Puppet-pääpalvelimelle. Näitä kutsutaan faktoiksi: Nämä tiedot sisältävät isäntänimen, ytimen tiedot, IP-osoitteen, tiedostonimen tiedot jne.…

Kommunikointi päällikön ja agentin välillä
Agentti lähettää faktoja mestarille

Vaihe 2) Puppet Master käyttää näitä tietoja ja laatii luettelon agenttiin käytettävästä kokoonpanosta. Tämä agentille suoritettavien konfiguraatioiden luettelo tunnetaan nimellä a luettelo. Tätä voidaan muuttaa, kuten paketin asennus, päivitykset tai poistot, tiedostojärjestelmän luominen, käyttäjien luominen tai poistaminen, palvelimen uudelleenkäynnistys, IP-määritysten muutokset jne.

Kommunikointi päällikön ja agentin välillä
Mestari lähettää luettelon agentille

Vaihe 3) Agentti käyttää tätä kokoonpanoluetteloa tehdäkseen tarvittavat konfiguraatiomuutokset solmuun.

Jos kokoonpanossa ei ole poikkeamia, agentti ei tee mitään konfiguraatiomuutoksia ja jättää solmun käymään samalla kokoonpanolla.

Kommunikointi päällikön ja agentin välillä
Agentti käyttää määrityksiä

Vaihe 4) Kun se on tehty, solmu raportoi takaisin nukkemasterille ilmoittaen, että konfigurointi on otettu käyttöön ja valmis.

Nukkelohkot

Puppet tarjoaa joustavuuden integroida raportteja kolmannen osapuolen työkaluihin Puppet API:iden avulla.

Puppet-rakennuspalikoita on neljää tyyppiä

  1. Esittelymateriaalit
  2. Sarjat
  3. Ilmeinen
  4. Moduulit

Nukkeresurssit

Puppet Resources ovat Puppetin rakennuspalikoita.

Resurssit ovat sisäänrakennetut toiminnot jotka kulkevat takapäässä suorittamaan tarvittavat toiminnot nukkessa.

Nukketunnit

Eri resurssien yhdistelmä voidaan ryhmitellä yhdeksi yksiköksi nimeltä luokka.

Nukke Manifesti

Manifest on hakemisto, joka sisältää nukke-DSL-tiedostoja. Näillä tiedostoilla on .pp-tunniste. .pp-laajennus tarkoittaa nukkeohjelmaa. Nukkekoodi koostuu nukkeluokkien määritelmistä tai ilmoituksista.

Nukkemoduulit

Moduulit ovat kokoelma tiedostoja ja hakemistoja, kuten manifesteja, luokkamäärityksiä. Ne ovat uudelleenkäytettäviä ja jaettavia yksiköitä Puppetissa.

Esimerkiksi MySQL moduuli asennettavaksi ja määritettäväksi MySQL tai Jenkins-moduuli Jenkinsin hallintaan jne.

Nukkemoduulit
Nukkemoduulit

Nukkeresurssien tyypit

Yleensä järjestelmä koostuu tiedostoista, käyttäjistä, palveluista, prosesseista, paketeista jne. Puppetissa näitä kutsutaan resursseiksi. Resurssit ovat perustavanlaatuisia rakennuspalikoita

Nukke. Kaikki nukkeagenttien toiminnot suoritetaan nukkeresurssien avulla.

Nukkeresurssit ovat valmiita työkaluja, joita käytetään suorittamaan erilaisia ​​tehtäviä ja toimintoja millä tahansa tuetulla alustalla. Voimme käyttää yhtä nukkeresurssia tietyn tehtävän suorittamiseen tai voimme käyttää useita nukkeresursseja yhdessä suorittaaksemme monimutkaisia ​​sovelluskokoonpanojen käyttöönottoja.

Resursseja voi olla erilaisia. Nukkekäyttö resurssit ja resurssityypit järjestelmän kokoonpanon kuvaamiseksi.

Resurssityyppejä on kolmenlaisia:

  1. Nukkeydin tai sisäänrakennetut resurssityypit.
  2. Nukke määrittelemät resurssityypit.
  3. Nukkemuokatut resurssityypit.

Nukkeydin tai sisäänrakennetut resurssityypit

Ydin- tai sisäänrakennetut resurssityypit ovat valmiiksi rakennettuja nukkeresurssityyppejä, jotka toimitetaan nukkeohjelmiston mukana. Puppet-tiimi on kirjoittanut ja ylläpitänyt kaikki ydin- tai sisäänrakennetut Puppet-resurssityypit.

Nukke määrittelemät resurssityypit

Määritetyt resurssityypit ovat kevyitä resurssityyppejä, jotka on kirjoitettu Puppet-deklaratiivisella kielellä käyttämällä olemassa olevien resurssityyppien yhdistelmää.

Nukkemuokatut resurssityypit

Mukautetut resurssityypit ovat täysin räätälöityjä resurssityyppejä, jotka on kirjoitettu Rubylla.

Tutustutaan nukkeresurssityyppeihin…

Kirjoita terminaaliin seuraava komento näyttääksesi luettelon Nukkea koskevista alikomennoista:

Puppet --help

Nukkemuokatut resurssityypit

Meidän tapauksessamme olemme kiinnostuneita alikomennosta "resurssi” jota käytämme löytääksemme tietoa sisäänrakennetuista nukkeresurssityypeistä.

Kirjoita terminaaliin mikä tahansa seuraavista komennoista näyttääksesi luettelon toimet liittyy nukke-alikomentoon "resurssi"

Puppet help resource		
Puppet resource --help		

Nukkemuokatut resurssityypit

Tässä tapauksessa meillä on resurssi alikomennona ja -tyypit toimintana.

Puppetissa on 49 sisäänrakennettua ydinresurssityyppiä.

Kirjoita terminaaliin seuraava komento näyttääksesi luettelon käytettävissä olevista sisäänrakennetuista nukkeresurssityypeistä:

puppet resource –types

Nukkemuokatut resurssityypit

Jokainen tyyppi tukee luetteloa attribuutteja. Nämä määritteet tarjoavat yksityiskohtaisen kuvauksen, jota Puppet käyttää resurssin hallintaan.

Voit selvittää kaikki nukkeresurssityyppiin liittyvät attribuutit käyttämällä seuraavaa komentoa:

puppet describe <resource type name>	

Parametrit luettelevat kaikki kyseisen resurssityypin käytettävissä olevat attribuutit.

nukkekuvauspaketti

Nukkemuokatut resurssityypit

Uuden ihmisen on vaikea ymmärtää ja yhdistää monia hallitsemattomia nukkekooditiedostoja. Tässä tarvitaan ryhmittelyä toimintojen yhdistämiseksi. Tavoitteena on ratkaista yksittäinen ongelma, kuten kaikki toiminnot, joita tarvitaan palvelimen tai ntp-palvelun tai koko web-palvelimen tai tietokantapalvelimen konfigurointiin.

Mitä ovat nukketunnit?

Nukketunnit ovat kokoelma nukkeresursseja, jotka on koottu yhdeksi yksiköksi.

Puppet esitteli luokkia tehdäkseen rakenteesta uudelleen käytettävän ja järjestetyn.

Ensinnäkin meidän on määritettävä luokka käyttämällä luokan määritelmän syntaksia; luokkien on oltava yksilöllisiä ja ne voidaan ilmoittaa vain kerran samalla nimellä:

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

Esimerkiksi:

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

Toistaiseksi olemme määrittäneet vain luokan, mutta emme ole käyttäneet sitä missään. Tämä tarkoittaa, että tätä kirjoittamaamme koodia ei koskaan suoriteta, ellemme ilmoita tätä luokkaa muualla.

Luokkailmoitus

Jos haluat käyttää määritettyä luokkaa koodissa, käytä sisältää avainsana.

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

Ymmärretään tämä todellisella tapausskenaariolla.

Demoasennus NTP

Varmista ensin, että NTP-paketti ei ole jo palvelimella, seuraava komento ei palauta mitään, jos telnet ei ole palvelimella:

rpm -qa | grep -i ntp

Demo Asenna NTP

Kuten näemme, NTP-paketti on jo olemassa palvelimella. Poistetaan olemassa oleva NTP-paketti:

yum remove ntp

Kun olet poistanut paketin, varmista, että ntp.conf-tiedostoa ei ole olemassa:

ls -lrt /etc/ntp.conf

Demo Asenna NTP

Varmista, että ntp-palvelua ei ole olemassa suorittamalla seuraava komento:

systemctl status ntp

Demo Asenna NTP

Luo uusi .pp-tiedosto koodin tallentamiseksi. Komentoriviltä:

vi demontp.pp

Vaihda lisäystilaan painamalla näppäimistön i-näppäintä.

Kirjoita seuraava koodi luodaksesi uuden tiedoston:

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

Muokkauksen jälkeen: paina esc

Tallenna tiedosto painamalla :wq!

Seuraava askel on tarkastaa onko koodissa syntaksivirheitä. Suorita seuraava komento:

puppet parser validate demontp.pp

Varmista, että olet vaihtanut juuri voidaksesi suorittaa testin ilman virheitä suorittamalla komennon:

su root

Testi on koodinluontiprosessin seuraava vaihe. Suorita savutesti suorittamalla seuraava komento:

Puppet applies demontp.pp --noop

Viimeinen vaihe on ajaa nukke reaalitilassa ja tarkista tulos.

puppet apply demontp.pp

Puppet ei esittänyt mitään, koska demokurssi oli vain määritelty mutta ei ilmoitettu.

Joten, ennen kuin ilmoitat nukkeluokan, koodia ei käytetä.

Katsotaanpa julistaa demoluokka saman koodin sisällä käyttäen sisällytä luokan nimi koodin lopussa:

# 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

Jälleen tarkastaa onko koodissa syntaksivirheitä. Suorita seuraava komento:

puppet parser validate demontp.pp

Varmista, että olet vaihtanut juuri voidaksesi suorittaa testin ilman virheitä suorittamalla komennon:

su root

Testaus on koodinluontiprosessin seuraava vaihe. Suorita savutesti suorittamalla seuraava komento:

Puppet apply demontp.pp --noop

Viimeinen vaihe on ajaa nukke reaalitilassa ja tarkista tulos.

puppet apply demontp.pp

Tällä kertaa koodi otetaan käyttöön, koska luokka määriteltiin ja sitten ilmoitettiin.

Demo Asenna NTP

Varmista, että ntp.conf on nyt olemassa:

ls -lrt /etc/ntp.conf

Varmista, että ntp-palvelu on käynnistetty suorittamalla seuraava komento:

systemctl status ntpd

Demo Asenna NTP