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.

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 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.
Kuid seda saab teha deklaratiivse programmeerimismustri abil, millel on vaid paar nukukoodirida, nuku domeenispetsiifiline keel (DSL) ja saavutada sama tulemus.
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.

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...

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.
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.

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
- Ressursid
- klassid
- Manifest
- 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.

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:
- Nukutuum või sisseehitatud ressursitüübid.
- Nukuga määratletud ressursitüübid.
- 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
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
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
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
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
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
Kontrollige ntp-teenuse puudumist, käivitades järgmise käsu:
systemctl status 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.
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











