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.

Systemadministrator arbejder manuelt pรฅ serverne
Systemadministrator arbejder manuelt pรฅ serverne

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 automatiserer serverstyring
Puppet automatiserer Server Management

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.

Deklarative paradigmer

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.

Deklarative paradigmer

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.

Puppet Master Agent Kommunikation
Puppet Master Agent Kommunikation

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.โ€ฆ

Kommunikation mellem skibsfรธreren og agenten
Agent sender fakta til master

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.

Kommunikation mellem skibsfรธreren og agenten
Master sender et katalog til agent

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.

Kommunikation mellem skibsfรธreren og agenten
Agent anvender 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

  1. Ressourcer
  2. Klasser
  3. Manifest
  4. 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.

Dukkemoduler
Dukkemoduler

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:

  1. Puppet core eller indbyggede ressourcetyper.
  2. Dukkedefinerede ressourcetyper.
  3. 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

Dukke tilpassede ressourcetyper

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		

Dukke tilpassede ressourcetyper

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

Dukke tilpassede ressourcetyper

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

Dukke tilpassede ressourcetyper

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

Demo Installer 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

Demo Installer NTP

Bekrรฆft, at ntp-tjenesten ikke eksisterer ved at kรธre fรธlgende kommando:

systemctl status ntp

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

Demo Installer NTP

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

Demo Installer NTP

Opsummer dette indlรฆg med: