Puppet Tutorial for begyndere: Hvad er Puppet & hvordan man bruger det?
Før vi lærer Puppet, lad os forstå:
Hvad er Configuration Management?
Konfigurationsstyring er processen med at vedligeholde software og computersystemer (for eksempel servere, lagring, netværk) i en kendt, ønsket og konsistent tilstand. Det giver også adgang til en nøjagtig historisk registrering af systemtilstand til projektstyring og revisionsformål.
Systemadministratorer udfører for det meste gentagne opgaver som at installere servere, konfigurere disse servere osv. Disse fagfolk kan automatisere denne opgave ved at skrive scripts.
Det er dog et vanskeligt arbejde, når de arbejder på en massiv infrastruktur. Konfigurationsstyringsværktøjet som en marionet blev introduceret for at løse sådanne problemer.
Hvad er Puppet?
Marionet er et systemstyringsværktøj til centralisering og automatisering af konfigurationsstyringsprocessen. Puppet bruges også som et softwareimplementeringsværktøj. Det er en open source-konfigurationsstyringssoftware, der er meget udbredt til serverkonfiguration, administration, implementering og orkestrering af forskellige applikationer og tjenester på tværs af hele en organisations infrastruktur.
Puppet er specielt designet til at styre konfigurationen af Linux og Windows systemer. Den er skrevet i Ruby og bruger dens unikke Domain SÆRLIGE Lnguage (DSL) for at beskrive systemkonfigurationen.
Hvad er Puppet-versionerne?
Puppet kommer i to versioner:
- Open Source marionet: Det er en grundlæggende version af Puppet-konfigurationsstyringsværktøjet, som også er kendt som Open Source Puppet. Den er tilgængelig direkte fra Puppets hjemmeside og er licenseret under Apache 2.0-systemet.
- Marionetvirksomhed: Kommerciel version, der tilbyder funktioner som compliance-rapportering, orkestrering, rollebaseret adgangskontrol, GUI, API og kommandolinjeværktøjer til effektiv styring af noder.
Hvad kan dukke?
For eksempel har du en infrastruktur med omkring 100 servere. Som systemadministrator er det din rolle at sikre, at alle disse servere altid er opdaterede og kører med fuld funktionalitet.
For at gøre dette kan du bruge Puppet, som giver dig mulighed for at skrive en simpel kode, som kan implementeres automatisk på disse servere. Dette reducerer den menneskelige indsats og gør udviklingsprocessen hurtig og effektiv.
Puppet udfører følgende funktioner:
- Puppet giver dig mulighed for at definere forskellige konfigurationer for hver vært.
- Værktøjet giver dig mulighed for løbende at overvåge servere for at bekræfte, om den nødvendige konfiguration eksisterer eller ej, og den er ikke ændret. Hvis konfigurationen ændres, vender Puppet-værktøjet tilbage til den foruddefinerede konfiguration på værten.
- Det giver også kontrol over hele det konfigurerede system, så en centraliseret ændring bliver automatisk gennemført.
- Det bruges også som et implementeringsværktøj, da det automatisk implementerer software til systemet. Den implementerer infrastruktur som en kode, fordi politikker og konfigurationer er skrevet som kode.
Puppet DSL og programmeringsparadigmer
Før vi lærer Puppet DSL, lad os forstå programmeringsparadigmer:
Et programmeringsparadigme er en stil, du bruger i computerprogrammering.
Fire typer af paradigmer er:
- Imperativ.
- Erklærende.
- Funktionel (som betragtes som en delmængde af det deklarative paradigme)
- Objektorienteret.
Vi vil fokusere på imperativ og deklarativ.
Imperative paradigmer
Dette programmeringsparadigme udtrykker logikken i en beregning (Hvad skal man gøre) og beskriver dens kontrolflow (Sådan gør man)
Eksempel:
Antag, at du skal til dit kontor, bestiller du en taxa og begynder at give trin for trin anvisninger til chaufføren, indtil du når kontoret. At specificere, hvad man skal gøre, og hvordan man gør, er en bydende nødvendig stil.
Deklarative paradigmer
Dette programmeringsparadigme udtrykker logikken i en beregning (Hvad skal man gøre) uden at beskrive dens kontrolflow (Sådan gør man)
Eksempel:
Antag, at du skal til dit kontor, bestiller du Uber-kabine og angiver den endelige destination (kontor). At specificere, hvad der ikke skal gøres, er en deklarativ stil.
Paradigm | Hvad skal man gøre | Hvordan man gør |
---|---|---|
bydende nødvendigt | Ja | Ja |
deklarativ | Ja | Ingen |
Puppet bruger et deklarativt programmeringsparadigme
Puppet bruger en deklarativ programmeringstilgang.
Eksempel: Opret en bruger på systemet:
Det kan gøres ved hjælp af Imperativt programmeringsmønster ved hjælp af et shell-script: Her specificerer vi, hvordan brugeren skal oprettes, og hvilke kommandoer, der skal bruges på operativsystem.
Det kan dog gøres ved hjælp af Declarative programmeringsmønster med kun et par linjer marionetkode, Puppet domain specific language (DSL), og stadig opnå det samme resultat.
Implementeringsmodeller af værktøjer til konfigurationsstyring
Der er to implementeringsmodeller til værktøjer til konfigurationsstyring :
- Push-baseret implementeringsmodel: initieret af en masterknude.
- Pull-baseret implementeringsmodel: initieret af agenter.
Push-baseret implementeringsmodel
I denne implementeringsmodel skubber masterserveren konfigurationerne og softwaren til de individuelle agenter. Efter at have bekræftet en sikker forbindelse, kører masteren kommandoer eksternt på agenterne. For eksempel, Ansible og Salt Stack.
Pull-baseret implementeringsmodel.
I denne implementeringsmodel kontakter individuelle servere en masterserver, verificerer og etablerer en sikker forbindelse, downloader deres konfigurationer og software og konfigurerer derefter sig selv i overensstemmelse hermed - for eksempel Puppet og Chef.
Hvordan Puppet virker?
Puppet er baseret på en Pull-implementeringsmodel, hvor agentnoderne tjekker ind regelmæssigt efter hver 1800 sekunder med masterknudepunktet for at se, om noget skal opdateres i agenten. Hvis noget skal opdateres, henter agenten de nødvendige dukkekoder fra masteren og udfører de nødvendige handlinger.
Lad os forklare det med et eksempel:
Eksempel: Master – Agent opsætning:
The Master
En Linux baseret maskine med Puppet master software installeret på den. Det er ansvarligt for at vedligeholde konfigurationer i form af dukkekoder. Masternoden kan kun være Linux.
Agenterne
Målmaskinerne administreret af en marionet med dukkeagentsoftwaren installeret på dem.
Agenten kan konfigureres på ethvert understøttet operativsystem, såsom Linux eller Windows or Solaris eller Mac OS.
Kommunikationen mellem master og agent etableres gennem sikre certifikater.
Kommunikation mellem skibsføreren og agenten
Trin 1) Når forbindelsen er etableret mellem agenten og masteren, sender Puppet-agenten dataene om dens tilstand til Puppet-masterserveren. Disse kaldes fakta: Disse oplysninger inkluderer værtsnavnet, kernedetaljer, IP-adresse, filnavnsdetaljer osv.…
Trin 2) Puppet Master bruger disse data og kompilerer en liste med den konfiguration, der skal anvendes på agenten. Denne liste over konfigurationer, der skal udføres på en agent, er kendt som en katalog. Dette kan ændres såsom pakkeinstallation, opgraderinger eller fjernelser, oprettelse af filsystem, oprettelse eller sletning af bruger, genstart af server, ændringer i IP-konfiguration osv.
Trin 3) Agenten bruger denne liste over konfigurationer til at anvende eventuelle nødvendige konfigurationsændringer på noden.
Hvis der ikke er nogen drift i konfigurationen, udfører Agent ingen konfigurationsændringer og lader noden køre med den samme konfiguration.
Trin 4) Når det er gjort, rapporterer noden tilbage til dukkeføreren og angiver, at konfigurationen er blevet anvendt og fuldført.
Dukkeblokke
Puppet giver fleksibiliteten til at integrere rapporter med tredjepartsværktøjer ved hjælp af Puppet API'er.
Fire typer af Puppet byggeklodser er
- Ressourcer
- Klasser
- Manifest
- Moduler
Dukkeressourcer
Puppet Resources er byggestenene i Puppet.
Ressourcer er indbyggede funktioner der løber i bagenden for at udføre de nødvendige operationer i dukke.
Dukke klasser
En kombination af forskellige ressourcer kan grupperes sammen i en enkelt enhed kaldet klasse.
Dukkemanifest
Manifest er en mappe, der indeholder marionet DSL-filer. Disse filer har filtypenavnet .pp. .pp-udvidelsen står for dukkeprogram. Dukkekoden består af definitioner eller erklæringer af dukkeklasser.
Dukkemoduler
Moduler er en samling af filer og mapper såsom manifester, klassedefinitioner. De er genbrugelige og delbare enheder i Puppet.
For eksempel MySQL modul til at installere og konfigurere MySQL eller Jenkins-modulet til at administrere Jenkins osv.
Typer af puppet ressourcer
Generelt består et system af filer, brugere, tjenester, processer, pakker osv. I Puppet kaldes disse ressourcer. Ressourcer er de grundlæggende byggesten i
Marionet. Alle operationer på dukkeagenter udføres ved hjælp af dukkeressourcer.
Puppet-ressourcer er de færdiglavede værktøjer, der bruges til at udføre forskellige opgaver og operationer på enhver understøttet platform. Vi kan bruge en enkelt marionetressource til at udføre en specifik opgave, eller vi kan bruge flere dukkeressourcer sammen til at udføre nogle komplekse applikationskonfigurationsimplementeringer.
Ressourcer kan have forskellige typer. Dukkebrug ressourcer og ressourcetyper for at beskrive et systems konfiguration.
Der er tre slags ressourcetyper:
- Puppet core eller indbyggede ressourcetyper.
- Dukkedefinerede ressourcetyper.
- Dukke tilpassede ressourcetyper.
Puppet core eller indbyggede ressourcetyper
Kerne- eller indbyggede ressourcetyper er de forudbyggede dukke-ressourcetyper, der leveres med dukkesoftware. Alle de centrale eller indbyggede Puppet-ressourcetyper er skrevet og vedligeholdt af Puppet-teamet.
Dukkedefinerede ressourcetyper
Definerede ressourcetyper er lette ressourcetyper skrevet i Puppet-deklarativt sprog ved hjælp af en kombination af eksisterende ressourcetyper.
Dukke tilpassede ressourcetyper
Brugerdefinerede ressourcetyper er helt tilpassede ressourcetyper skrevet i Ruby.
Lad os undersøge om dukkeressourcetyper ...
Indtast følgende kommando i terminalen for at få vist en liste over Puppet-relevante underkommandoer:
Puppet --help
I vores tilfælde er vi interesserede i underkommandoen "ressource”, som vi vil bruge til at finde informationen om indbyggede dukke-ressourcetyper.
Indtast en af følgende kommandoer i terminalen for at få vist en liste over aktioner forbundet med dukkeunderkommandoen "ressource"
Puppet help resource Puppet resource --help
I dette tilfælde har vi ressource som underkommando og – typer som handling.
Puppet har 49 indbyggede kerneressourcetyper.
I terminalen skal du skrive følgende kommando for at få vist en liste over tilgængelige indbyggede dukke-ressourcetyper:
puppet resource –types
Hver type understøtter en liste over attributter. Disse attributter giver en detaljeret beskrivelse, som Puppet bruger til at administrere ressourcen.
For at finde ud af alle de attributter, der er forbundet med dukkeressourcetypen, skal du bruge følgende kommando:
puppet describe <resource type name>
Parametre viser alle de tilgængelige attributter for den pågældende ressourcetype.
marionet beskrive pakke
Det er svært for en ny person at forstå og relatere mange ikke-administrerede marionetkodefiler. Det er her, vi har brug for nogle grupperinger for at binde operationer sammen. Målet er at løse et enkelt problem, såsom alle operationer, der kræves for at konfigurere ssh på en server eller ntp-tjeneste eller en komplet webserver eller databaseserver fra bunden.
Hvad er dukkeklasser?
Dukkeklasser er samlingen af dukkeressourcer samlet som en enkelt enhed.
Puppet introducerede klasser for at gøre strukturen genbrugelig og organiseret.
Først skal vi definere en klasse ved hjælp af klassedefinitionssyntaks; klasser skal være unikke og kan kun erklæres én gang med samme navn:
class <class-name> { <Resource declarations> }
Eksempel:
class ntpconfig { file { "/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } }
Indtil videre har vi kun defineret klassen, men vi har ikke brugt den nogen steder. Det betyder, at denne kode, som vi har skrevet, aldrig vil blive eksekveret, medmindre vi erklærer denne klasse et andet sted.
Klasseerklæring
For at bruge en defineret klasse i kode skal du bruge omfatter nøgleord.
class ntpconfig { file { "/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } } include ntpconfig
Lad os forstå dette med et virkeligt tilfælde.
Demoinstallation af NTP
Først skal du sørge for, at NTP-pakken ikke allerede er til stede på serveren, den følgende kommando vil ikke returnere noget, hvis telnet ikke er til stede på serveren:
rpm -qa | grep -i ntp
Som vi kan se, er NTP-pakken allerede til stede på serveren. Lad os fjerne den eksisterende NTP-pakke:
yum remove ntp
Når du har fjernet pakken, skal du sikre dig, at filen ntp.conf ikke eksisterer:
ls -lrt /etc/ntp.conf
Bekræft, at ntp-tjenesten ikke eksisterer ved at køre følgende kommando:
systemctl status ntp
Opret en ny .pp-fil for at gemme koden. Fra kommandolinjen:
vi demontp.pp
Skift til indsættelsestilstand ved at trykke på i fra tastaturet.
Indtast følgende kode for at oprette en ny fil:
# 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", } }
Efter færdig med redigering: tryk på esc
For at gemme filen skal du trykke på :wq!
Næste skridt er at kontrollere om koden har nogen syntaksfejl. Udfør følgende kommando:
puppet parser validate demontp.pp
Sørg for, at du skiftede til rod for at kunne gennemføre testen uden fejl, ved at udføre kommandoen:
su root
Test er det næste trin i kodeoprettelsesprocessen. Udfør følgende kommando for at udføre en røgtest:
Puppet applies demontp.pp --noop
Sidste skridt er at køre marionetten i ægte tilstand og bekræft outputtet.
puppet apply demontp.pp
Puppet optrådte ikke noget, fordi demoklassen var bare definerede men ikke erklærede.
Så indtil du erklærer dukkeklassen, vil koden ikke blive anvendt.
Lad os erklære demoklassen inde i den samme kode ved hjælp af inkludere klassenavn i slutningen af koden:
# 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
Igen kontrollere om koden har nogen syntaksfejl. Udfør følgende kommando:
puppet parser validate demontp.pp
Sørg for, at du skiftede til rod for at kunne gennemføre testen uden fejl, ved at udføre kommandoen:
su root
Test er det næste trin i kodeoprettelsesprocessen. Udfør følgende kommando for at udføre en røgtest:
Puppet apply demontp.pp --noop
Sidste skridt er at køre marionetten i ægte tilstand og bekræft outputtet.
puppet apply demontp.pp
Denne gang bliver koden anvendt, fordi klassen blev defineret og derefter erklæret.
Sørg for, at ntp.conf nu findes:
ls -lrt /etc/ntp.conf
Bekræft, at ntp-tjenesten er startet ved at køre følgende kommando:
systemctl status ntpd