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