Nukuõpetus algajatele: mis on nukk ja kuidas seda kasutada?

Enne Nuku õppimist mõistame:

Mis on konfiguratsioonihaldus?

Konfiguratsioonihaldus on protsess, mille käigus hoitakse tarkvara ja arvutisüsteeme (näiteks serverid, salvestusruumid, võrgud) teadaolevas, soovitud ja järjepidevas olekus. Samuti võimaldab see projektihalduse ja auditi eesmärgil juurdepääsu süsteemi oleku täpsele ajaloolisele kirjele.

Süsteemiadministraatorid täidavad enamasti korduvaid ülesandeid, nagu serverite installimine, nende serverite konfigureerimine jne. Need spetsialistid saavad selle ülesande automatiseerida, kirjutades skripte.

See on aga raske töö, kui nad töötavad tohutu infrastruktuuri kallal. Selliste probleemide lahendamiseks võeti kasutusele konfiguratsioonihaldustööriist nagu nukk.

Mis on Nukk?

Nukuteater on süsteemihaldustööriist konfiguratsioonihaldusprotsessi tsentraliseerimiseks ja automatiseerimiseks. Nukku kasutatakse ka tarkvara juurutamise tööriistana. See on avatud lähtekoodiga konfiguratsioonihaldustarkvara, mida kasutatakse laialdaselt serveri konfigureerimiseks, haldamiseks, juurutamiseks ja erinevate rakenduste ja teenuste orkestreerimiseks kogu organisatsiooni infrastruktuuris.

Puppet on spetsiaalselt loodud Linuxi ja Linuxi konfiguratsiooni haldamiseks Windows süsteemid. See on kirjutatud rubiini keeles ja kasutab selle ainulaadset Dpeamine Slahke Lkeele (DSL) süsteemi konfiguratsiooni kirjeldamiseks.

Mis on Puppeti versioonid?

Nukk on saadaval kahes versioonis:

  • Avatud lähtekoodiga nukk: see on Puppeti konfiguratsioonihaldustööriista põhiversioon, mida tuntakse ka kui avatud lähtekoodiga nuku. See on saadaval otse Puppeti veebisaidilt ja on litsentsitud Apache 2.0 süsteemi alusel.
  • Nukuettevõte: kommertsversioon, mis pakub selliseid funktsioone nagu vastavusaruandlus, orkestreerimine, rollipõhine juurdepääsukontroll, GUI, API ja käsurea tööriistad sõlmede tõhusaks haldamiseks.

Mida Nukk suudab?

Näiteks on teil umbes 100 serveriga infrastruktuur. Süsteemiadministraatorina on teie roll tagada, et kõik need serverid oleksid alati ajakohased ja töötaksid täisfunktsionaalsusega.

Süsteemiadministraator töötab serverites käsitsi
Süsteemiadministraator töötab serverites käsitsi

Selleks saate kasutada Puppetit, mis võimaldab kirjutada lihtsa koodi, mida saab nendes serverites automaatselt juurutada. See vähendab inimlikku pingutust ning muudab arendusprotsessi kiireks ja tõhusaks.

Nukk automatiseerib serverihalduse
Nukk automatiseerib serverihalduse

Nukk täidab järgmisi funktsioone:

  • Nukk võimaldab teil määrata iga hosti jaoks erinevad konfiguratsioonid.
  • Tööriist võimaldab teil servereid pidevalt jälgida, et veenduda, kas vajalik konfiguratsioon on olemas või mitte ja seda ei muudeta. Kui konfiguratsiooni muudetakse, naaseb Nukutööriist hostis eelmääratletud konfiguratsioonile.
  • See annab ka kontrolli kogu konfigureeritud süsteemi üle, nii et tsentraliseeritud muudatus tehakse automaatselt.
  • Seda kasutatakse ka juurutustööriistana, kuna see juurutab tarkvara süsteemi automaatselt. See rakendab infrastruktuur koodina, sest poliitikad ja konfiguratsioonid on kirjutatud koodina.

Nuku-DSL ja programmeerimisparadigmad

Enne Puppet DSL-i õppimist mõistkem programmeerimisparadigmasid:

Programmeerimisparadigma on stiil, mida kasutate arvutiprogrammeerimisel.

Nelja tüüpi paradigmasid on:

  • Imperatiivne.
  • Deklaratiivne.
  • Funktsionaalne (mida peetakse selle deklaratiivse paradigma alamhulgaks)
  • Objektorienteeritud.

Keskendume imperatiivile ja deklaratiivile.

Imperatiivsed paradigmad

See programmeerimisparadigma väljendab arvutuse loogikat (Mida teha) ja kirjeldab selle juhtimisvoogu (Kuidas teha)

Näide:

Oletame, et lähete oma kontorisse, broneerite takso ja hakkate juhile samm-sammult juhiseid andma, kuni jõuate kontorisse. Täpsustage, mida ja kuidas teha, on kohustuslik stiil.

Deklaratiivsed paradigmad

See programmeerimisparadigma väljendab arvutuse loogikat (mida teha), kirjeldamata selle juhtimisvoogu (kuidas teha)

Näide:

Oletame, et lähete oma kontorisse, broneerite Uberi takso ja määrate lõppsihtkoha (kontor). Määramine, mida mitte teha, kuidas teha, on deklaratiivne stiil.

Paradigma Mida teha Kuidas teha
Vajalik Jah Jah
Deklaratiivne Jah Ei

Puppet kasutab deklaratiivset programmeerimisparadigmat

Puppet kasutab deklaratiivset programmeerimise lähenemist.

Näide: Looge süsteemis kasutaja:

Seda saab teha imperatiivse programmeerimismustri abil shelliskripti abil: Siin määrame, kuidas kasutaja luua ja milliseid käske kasutada operatsioonisüsteemi.

Deklaratiivsed paradigmad

Kuid seda saab teha deklaratiivse programmeerimismustri abil, millel on vaid paar nukukoodirida, nuku domeenispetsiifiline keel (DSL) ja saavutada sama tulemus.

Deklaratiivsed paradigmad

Konfiguratsioonihaldustööriistade juurutusmudelid

Selle jaoks on kaks juurutusmudelit konfiguratsioonihaldustööriistad :

  • Tõukepõhine juurutusmudel: algatatud põhisõlme poolt.
  • Tõmbepõhine juurutusmudel: agentide algatatud.

Tõukepõhine juurutusmudel

Selles juurutusmudelis edastab peaserver konfiguratsioonid ja tarkvara üksikutele agentidele. Pärast turvalise ühenduse kontrollimist käivitab juht agentidel kaugkäsklused. Näiteks Võimalik ja Salt Stack.

Tõmbepõhine juurutusmudel.

Selles juurutusmudelis võtavad üksikud serverid ühendust peaserveriga, kontrollivad ja loovad turvalise ühenduse, laadivad alla oma konfiguratsioonid ja tarkvara ning seejärel konfigureerivad end vastavalt – näiteks Puppet ja Chef.

Kuidas Nukk töötab?

Puppet põhineb Pull juurutusmudelil, kus agendisõlmed registreeruvad regulaarselt pärast iga 1800 sekundit põhisõlmega, et näha, kas agendis on vaja midagi värskendada. Kui midagi on vaja värskendada, tõmbab agent vajalikud nukukoodid kaptenilt ja sooritab vajalikud toimingud.

Selgitame seda näitega:

Näide: Master – Agent Setup:

Master

Linuxi põhinev masin, millele on installitud tarkvara Puppet master. See vastutab nukukoodide kujul olevate konfiguratsioonide säilitamise eest. Peasõlm saab olla ainult Linux.

Agendid

Nuku hallatavad sihtmasinad, millele on installitud nukuagendi tarkvara.

Agenti saab konfigureerida mis tahes toetatud operatsioonisüsteemis, näiteks Linuxis või Windows or Solaris või Mac OS.

Ülem- ja agendi vaheline suhtlus luuakse turvaliste sertifikaatide kaudu.

Nukumeistri agendi suhtlemine
Nukumeistri agendi suhtlemine

Suhtlus kapteni ja agendi vahel

Step 1) Kui agendi ja ülemseadme vahel on ühendus loodud, saadab Nukuagent andmed oma oleku kohta Nuku peaserverisse. Neid nimetatakse faktideks: see teave sisaldab hostinime, tuuma üksikasju, IP-aadressi, failinime üksikasju jne...

Suhtlus kapteni ja agendi vahel
Agent saadab meistrile faktid

Step 2) Puppet Master kasutab neid andmeid ja koostab agendile rakendatava konfiguratsiooniga loendi. Seda agendiga tehtavate konfiguratsioonide loendit nimetatakse a kataloogi. Seda saab muuta, näiteks paketi installimine, uuendamine või eemaldamine, failisüsteemi loomine, kasutaja loomine või kustutamine, serveri taaskäivitamine, IP-konfiguratsiooni muudatused jne.

Suhtlus kapteni ja agendi vahel
Meister saadab agendile kataloogi

Step 3) Agent kasutab seda konfiguratsiooniloendit mis tahes nõutavate konfiguratsioonimuudatuste rakendamiseks sõlmes.

Kui konfiguratsioonis pole triivisid, ei muuda agent konfiguratsiooni ja jätab sõlme sama konfiguratsiooniga töötama.

Suhtlus kapteni ja agendi vahel
Agent rakendab konfiguratsiooni

Step 4) Kui see on tehtud, annab sõlm nukujuhile aru, näidates, et konfiguratsioon on rakendatud ja lõpetatud.

Nukuplokid

Puppet pakub paindlikkust aruannete integreerimiseks kolmanda osapoole tööriistadega, kasutades Puppet API-sid.

Nuku ehitusplokke on nelja tüüpi

  1. Ressursid
  2. klassid
  3. Manifest
  4. Moodulid

Nukuressursid

Nukuressursid on Puppeti ehitusplokid.

Ressursid on sisseehitatud funktsioonid mis jooksevad tagaotsas, et sooritada nukus vajalikke toiminguid.

Nukuklassid

Erinevate ressursside kombinatsiooni saab rühmitada üheks üksuseks, mida nimetatakse klassiks.

Nukumanifest

Manifest on kataloog, mis sisaldab nuku-DSL-faile. Nendel failidel on laiend .pp. Laiend .pp tähistab nukuprogrammi. Nukukood koosneb nukuklasside definitsioonidest või deklaratsioonidest.

Nukumoodulid

Moodulid on failide ja kataloogide kogum, näiteks manifestid, klasside määratlused. Need on Puppeti korduvkasutatavad ja jagatavad üksused.

Näiteks MySQL moodul installimiseks ja konfigureerimiseks MySQL või Jenkinsi moodul Jenkinsi haldamiseks jne.

Nukumoodulid
Nukumoodulid

Nukuressursside tüübid

Üldiselt koosneb süsteem failidest, kasutajatest, teenustest, protsessidest, pakettidest jne. Puppetis nimetatakse neid ressurssideks. Ressursid on peamised ehitusplokid

Nukk. Kõik nukuagentidega tehtavad toimingud tehakse nukuressursside abil.

Nukuressursid on valmis tööriistad, mida kasutatakse erinevate ülesannete ja toimingute tegemiseks mis tahes toetatud platvormil. Konkreetse ülesande täitmiseks saame kasutada ühte nukuressurssi või keerukate rakenduste konfiguratsioonide juurutamiseks koos mitut nukuressurssi.

Ressursid võivad olla erinevat tüüpi. Nukukasutus ressursid ja ressursi tüübid et kirjeldada süsteemi konfiguratsiooni.

Ressursitüüpe on kolme tüüpi:

  1. Nukutuum või sisseehitatud ressursitüübid.
  2. Nukuga määratletud ressursitüübid.
  3. Nuku kohandatud ressursitüübid.

Nukutuum või sisseehitatud ressursitüübid

Põhi- ehk sisseehitatud ressursitüübid on nukutarkvaraga kaasas olevad eelehitatud nukuressursitüübid. Kõik nuku põhi- või sisseehitatud ressursitüübid on kirjutatud ja hooldatud Puppeti meeskonna poolt.

Nukuga määratletud ressursitüübid

Määratletud ressursitüübid on kergekaalulised ressursitüübid, mis on kirjutatud nukude deklaratiivses keeles, kasutades olemasolevate ressursitüüpide kombinatsiooni.

Nuku kohandatud ressursitüübid

Kohandatud ressursitüübid on täielikult kohandatud ressursitüübid, mis on kirjutatud Ruby keeles.

Uurime nukuressursside tüüpide kohta ...

Nuku asjakohaste alamkäskude loendi kuvamiseks tippige terminalis järgmine käsk:

Puppet --help

Nuku kohandatud ressursitüübid

Meie puhul huvitab meid alamkäsk "ressurss”, mida kasutame sisseehitatud nukuressursside tüüpide kohta teabe leidmiseks.

Sisestage terminali loendi kuvamiseks mõni järgmistest käskudest meetmete seotud nuku alamkäsuga "ressurss"

Puppet help resource		
Puppet resource --help		

Nuku kohandatud ressursitüübid

Sel juhul on meil ressurss alamkäsuna ja - tüübid tegevusena.

Puppetil on 49 sisseehitatud põhiressursitüüpi.

Saadaolevate sisseehitatud nukuressursside tüüpide loendi kuvamiseks tippige terminalis järgmine käsk:

puppet resource –types

Nuku kohandatud ressursitüübid

Iga tüüp toetab loendit atribuudid. Need atribuudid annavad üksikasjaliku kirjelduse, mida Puppet kasutab ressursi haldamiseks.

Kõigi nukuressursi tüübiga seotud atribuutide väljaselgitamiseks kasutage järgmist käsku:

puppet describe <resource type name>	

Parameetrites loetletakse kõik selle ressursitüübi saadaolevad atribuudid.

nuku kirjeldav pakett

Nuku kohandatud ressursitüübid

Uuel inimesel on raske mõista ja seostada paljusid haldamata nukukoodifaile. See on koht, kus me vajame operatsioonide ühendamiseks rühmitamist. Eesmärk on lahendada üksainus probleem, näiteks kõik toimingud, mis on vajalikud ssh-i konfigureerimiseks serveris või ntp-teenuses või täielikus veebiserveris või andmebaasiserveris nullist.

Mis on nukuklassid?

Nukuklassid on nukuressursside kogumik, mis on koondatud üheks üksuseks.

Nukk tutvustas klasse, et muuta struktuur taaskasutatavaks ja korrastatud.

Esiteks peame määratlema klassi, kasutades klassi määratluse süntaksit; klassid peavad olema kordumatud ja neid saab deklareerida ainult üks kord sama nimega:

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

Näide:

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

Seni oleme ainult klassi defineerinud, aga pole seda kuskil kasutanud. See tähendab, et seda meie kirjutatud koodi ei käivitata kunagi, kui me seda klassi mujal ei deklareeri.

Klassi deklaratsioon

Määratud klassi kasutamiseks koodis kasutage sisaldama märksõna.

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

Mõistame seda reaalse juhtumi stsenaariumi abil.

NTP demo installimine

Esiteks veenduge, et NTP-paketti pole juba serveris olemas, järgmine käsk ei tagasta midagi, kui telnet serveris pole:

rpm -qa | grep -i ntp

Demo installige NTP

Nagu näeme, on NTP pakett juba serveris olemas. Eemaldame olemasoleva NTP-paketi:

yum remove ntp

Pärast paketi eemaldamist veenduge, et faili ntp.conf poleks olemas:

ls -lrt /etc/ntp.conf

Demo installige NTP

Kontrollige ntp-teenuse puudumist, käivitades järgmise käsu:

systemctl status ntp

Demo installige NTP

Looge koodi salvestamiseks uus .pp-fail. Käsurealt:

vi demontp.pp

Sisestamisrežiimi lülitumiseks vajutage klaviatuuril i.

Uue faili loomiseks tippige järgmine kood:

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

Pärast redigeerimise lõpetamist vajutage esc

Faili salvestamiseks vajutage :wq!

Järgmine samm on kontrollima kas koodis on süntaksivigu. Käivitage järgmine käsk:

puppet parser validate demontp.pp

Veenduge, et lülitusite juur et saaksite testi ilma vigadeta lõpule viia, käivitades käsu :

su root

test on koodi loomise protsessi järgmine samm. Suitsutesti tegemiseks käivitage järgmine käsk:

Puppet applies demontp.pp --noop

Viimane samm on jooks nukk reaalrežiimis ja kontrollige väljundit.

puppet apply demontp.pp

Puppet ei esitanud midagi, sest demotund oli lihtsalt määratletud kuid mitte kuulutatud.

Nii et kuni te nukuklassi deklareerite, koodi ei rakendata.

Olgem kuulutama demoklass sama koodi sees kasutades lisada klassi nimi koodi lõpus:

# 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älle kontrollima kas koodis on süntaksivigu. Käivitage järgmine käsk:

puppet parser validate demontp.pp

Veenduge, et lülitusite juur et saaksite testi ilma vigadeta lõpule viia, käivitades käsu :

su root

Testimine on koodi loomise protsessi järgmine samm. Suitsutesti tegemiseks käivitage järgmine käsk:

Puppet apply demontp.pp --noop

Viimane samm on jooks nukk reaalrežiimis ja kontrollige väljundit.

puppet apply demontp.pp

Seekord rakendatakse koodi, kuna klass määratleti ja seejärel deklareeriti.

Demo installige NTP

Veenduge, et ntp.conf oleks nüüd olemas:

ls -lrt /etc/ntp.conf

Kontrollige, kas ntp-teenus on käivitatud, käivitades järgmise käsu:

systemctl status ntpd

Demo installige NTP

Võta see postitus kokku järgmiselt: