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.
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.
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.
Se voidaan kuitenkin tehdä käyttämällä deklaratiivista ohjelmointimallia vain muutamalla nukkekoodirivillä, Puppet domain -spesifisellä kielellä (DSL), ja silti saavuttaa sama tulos.
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.
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.…
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.
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.
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ä
- Esittelymateriaalit
- Sarjat
- Ilmeinen
- 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.
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:
- Nukkeydin tai sisäänrakennetut resurssityypit.
- Nukke määrittelemät resurssityypit.
- 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
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
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
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
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
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
Varmista, että ntp-palvelua ei ole olemassa suorittamalla seuraava komento:
systemctl status 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.
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