Puppet Tutorial för nybörjare: Vad är Puppet & hur man använder?

Innan vi lär oss Puppet, låt oss förstå:

Vad är konfigurationshantering?

Konfigurationshantering är processen att underhålla mjukvara och datorsystem (till exempel servrar, lagring, nätverk) i ett känt, önskat och konsekvent tillstånd. Det ger också tillgång till en korrekt historisk registrering av systemtillstånd för projektledning och revisionsändamål.

Systemadministratörer utför oftast repetitiva uppgifter som att installera servrar, konfigurera dessa servrar, etc. Dessa proffs kan automatisera denna uppgift genom att skriva skript.

Det är dock ett svårt jobb när de arbetar med en massiv infrastruktur. Configuration Management-verktyget som en Puppet introducerades för att lösa sådana problem.

Vad är Puppet?

Marionett är ett systemhanteringsverktyg för att centralisera och automatisera konfigurationshanteringsprocessen. Puppet används också som ett programvaruinstallationsverktyg. Det är en programvara för konfigurationshantering med öppen källkod som ofta används för serverkonfiguration, hantering, distribution och orkestrering av olika applikationer och tjänster över hela infrastrukturen i en organisation.

Puppet är speciellt utformad för att hantera konfigurationen av Linux och Windows system. Den är skriven i Ruby och använder sin unika Domain Specifika Lnguage (DSL) för att beskriva systemkonfiguration.

Vilka är Puppet-versionerna?

Puppet finns i två versioner:

  • Puppet med öppen källkod: Det är en grundläggande version av Puppet-konfigurationshanteringsverktyget, som också är känt som Open Source Puppet. Den är tillgänglig direkt från Puppets hemsida och är licensierad under Apache 2.0-systemet.
  • Marionettföretag: Kommersiell version som erbjuder funktioner som efterlevnadsrapportering, orkestrering, rollbaserad åtkomstkontroll, GUI, API och kommandoradsverktyg för effektiv hantering av noder.

Vad kan dockan göra?

Till exempel har du en infrastruktur med cirka 100 servrar. Som systemadministratör är det din roll att se till att alla dessa servrar alltid är uppdaterade och körs med full funktionalitet.

Systemadministratör som arbetar manuellt på servrarna
Systemadministratören arbetar manuellt på servrarna

För att göra detta kan du använda Puppet, som låter dig skriva en enkel kod som kan distribueras automatiskt på dessa servrar. Detta minskar den mänskliga ansträngningen och gör utvecklingsprocessen snabb och effektiv.

Puppet automatiserar serverhantering
Puppet automatiserar serverhantering

Puppet utför följande funktioner:

  • Puppet låter dig definiera distinkta konfigurationer för varje värd.
  • Verktyget låter dig kontinuerligt övervaka servrar för att bekräfta om den nödvändiga konfigurationen finns eller inte och den inte ändras. Om konfigurationen ändras kommer Puppet tool att återgå till den fördefinierade konfigurationen på värden.
  • Det ger också kontroll över hela det konfigurerade systemet, så en centraliserad förändring genomförs automatiskt.
  • Det används också som ett distributionsverktyg eftersom det automatiskt distribuerar programvara till systemet. Den implementerar infrastruktur som en kod eftersom policyer och konfigurationer skrivs som kod.

Puppet DSL och programmeringsparadigm

Innan vi lär oss Puppet DSL, låt oss förstå programmeringsparadigm:

Ett programmeringsparadigm är en stil du använder i datorprogrammering.

Fyra typer av paradigm är:

  • Nödvändigt.
  • Deklarativ.
  • Funktionell (som anses vara en delmängd av det deklarativa paradigmet)
  • Objektorienterad.

Vi kommer att fokusera på imperativ och deklarativ.

Imperativa paradigm

Detta programmeringsparadigm uttrycker logiken i en beräkning (Vad man ska göra) och beskriver dess kontrollflöde (Hur man gör)

Exempelvis:

Anta att du ska till ditt kontor, du bokar en taxi och börjar ge steg för steg vägbeskrivningar till föraren tills du når kontoret. Att specificera vad man ska göra och hur man gör är en absolut nödvändig stil.

Deklarativa paradigm

Detta programmeringsparadigm uttrycker logiken i en beräkning (Vad man ska göra) utan att beskriva dess kontrollflöde (Hur man gör)

Exempelvis:

Anta att du ska till ditt kontor, du bokar Uber cab och anger slutdestinationen (Office). Att specificera vad man ska göra inte hur man gör är en deklarativ stil.

Paradigm Vad ska man göra Hur man gör
Nödvändigt Ja Ja
deklarativ Ja Nej

Puppet använder ett deklarativt programmeringsparadigm

Puppet använder en deklarativ programmeringsmetod.

Exempelvis: Skapa en användare på systemet:

Det kan göras med hjälp av imperativt programmeringsmönster genom ett skalskript: Här anger vi hur man skapar användaren och vilka kommandon som ska användas på operativsystem.

Deklarativa paradigm

Det kan dock göras med hjälp av deklarativt programmeringsmönster med bara några rader marionettkod, Puppet-domänspecifikt språk (DSL), och ändå uppnå samma resultat.

Deklarativa paradigm

Implementeringsmodeller för verktyg för konfigurationshantering

Det finns två distributionsmodeller för verktyg för konfigurationshantering :

  • Push-baserad implementeringsmodell: initierad av en huvudnod.
  • Pull-baserad implementeringsmodell: initierad av agenter.

Push-baserad implementeringsmodell

I den här distributionsmodellen skickar masterservern konfigurationerna och programvaran till de enskilda agenterna. Efter att ha verifierat en säker anslutning kör mastern kommandon på distans på agenterna. Till exempel, Ansible och Salt Stack.

Pull-baserad implementeringsmodell.

I den här implementeringsmodellen kontaktar enskilda servrar en huvudserver, verifierar och upprättar en säker anslutning, laddar ner deras konfigurationer och mjukvara och konfigurerar sedan sig själva därefter – till exempel Puppet och Chef.

Hur fungerar Puppet?

Puppet är baserad på en Pull-distributionsmodell, där agentnoderna checkar in regelbundet efter varje 1800 sekunder med masternoden för att se om något behöver uppdateras i agenten. Om något behöver uppdateras hämtar agenten de nödvändiga dockkoderna från mastern och utför nödvändiga åtgärder.

Låt oss förklara det med ett exempel:

Exempelvis: Master – Agent Setup:

Mästaren

En Linux-baserad maskin med Puppet master-mjukvara installerad på den. Den ansvarar för att underhålla konfigurationer i form av marionettkoder. Huvudnoden kan bara vara Linux.

Agenterna

Målmaskinerna hanteras av en marionett med mjukvaran för dockanvändare installerad på dem.

Agenten kan konfigureras på alla operativsystem som stöds, såsom Linux eller Windows or Solaris eller Mac OS.

Kommunikationen mellan master och agent upprättas genom säkra certifikat.

Puppet Master Agent Communication
Puppet Master Agent Communication

Kommunikation mellan befälhavaren och agenten

Steg 1) När anslutningen är etablerad mellan agenten och mastern, skickar Puppet-agenten data om dess tillstånd till Puppet master-servern. Dessa kallas fakta: Den här informationen inkluderar värdnamn, kärndetaljer, IP-adress, filnamnsdetaljer etc.…

Kommunikation mellan befälhavaren och agenten
Agent skickar fakta till Master

Steg 2) Puppet Master använder dessa data och sammanställer en lista med den konfiguration som ska tillämpas på agenten. Denna lista över konfigurationer som ska utföras på en agent kallas en katalog. Detta kan ändras såsom paketinstallation, uppgraderingar eller borttagningar, skapande av filsystem, skapande eller radering av användare, omstart av server, ändringar av IP-konfiguration, etc.

Kommunikation mellan befälhavaren och agenten
Master skickar en katalog till Agent

Steg 3) Agenten använder den här konfigurationslistan för att tillämpa alla nödvändiga konfigurationsändringar på noden.

Om det inte finns några drifter i konfigurationen, utför Agent inga konfigurationsändringar och lämnar noden att köra med samma konfiguration.

Kommunikation mellan befälhavaren och agenten
Agent tillämpar konfiguration

Steg 4) När det är gjort rapporterar noden tillbaka till marionettmästaren och indikerar att konfigurationen har tillämpats och slutförts.

Dockblock

Puppet ger flexibiliteten att integrera rapporter med tredjepartsverktyg med Puppet API:er.

Fyra typer av Puppet byggstenar är

  1. Resurser
  2. Klasser
  3. Manifest
  4. Moduler

Dockresurser

Puppet Resources är byggstenarna i Puppet.

Resurser är inbyggda funktioner som körs på baksidan för att utföra de nödvändiga operationerna i docka.

Dockklasser

En kombination av olika resurser kan grupperas till en enda enhet som kallas klass.

Dockmanifest

Manifest är en katalog som innehåller DSL-filer för dockor. Dessa filer har filtillägget .pp. Tillägget .pp står för marionettprogram. Puppet-koden består av definitioner eller deklarationer av Puppet Classes.

Dockmoduler

Moduler är en samling filer och kataloger som Manifests, Class definitions. De är återanvändbara och delbara enheter i Puppet.

Till exempel, den MySQL modul att installera och konfigurera MySQL eller Jenkins-modulen för att hantera Jenkins osv.

Dockmoduler
Dockmoduler

Typer av dockresurser

Generellt sett består ett system av filer, användare, tjänster, processer, paket etc. I Puppet kallas dessa för resurser. Resurser är de grundläggande byggstenarna i

Marionett. Alla operationer på dockagenter utförs med hjälp av dockresurser.

Dockresurser är de färdiga verktygen som används för att utföra olika uppgifter och operationer på vilken plattform som helst. Vi kan använda en enda dockresurs för att utföra en specifik uppgift, eller så kan vi använda flera dockresurser tillsammans för att utföra vissa komplexa applikationskonfigurationer.

Resurser kan ha olika typer. Dockanvänder medel och resurstyper för att beskriva ett systems konfiguration.

Det finns tre typer av resurstyper:

  1. Puppet core eller inbyggda resurstyper.
  2. Dockdefinierade resurstyper.
  3. Dockanpassade resurstyper.

Puppet core eller inbyggda resurstyper

Kärn- eller inbyggda resurstyper är de förbyggda dockresurstyperna som levereras med dockprogramvara. Alla kärn- eller inbyggda Puppet-resurstyper skrivs och underhålls av Puppet-teamet.

Dockdefinierade resurstyper

Definierade resurstyper är lätta resurstyper skrivna i Puppets deklarativa språk med en kombination av befintliga resurstyper.

Dockanpassade resurstyper

Anpassade resurstyper är helt anpassade resurstyper skrivna i Ruby.

Låt oss utforska om dockresurstyper ...

Skriv följande kommando i terminalen för att visa en lista med Puppet-relevanta underkommandon:

Puppet --help

Dockanpassade resurstyper

I vårt fall är vi intresserade av underkommandot "resurs” som vi kommer att använda för att hitta information om inbyggda dockresurstyper.

Skriv något av följande kommandon i terminalen för att visa en lista över åtgärder kopplat till marionettunderkommandot "resurs"

Puppet help resource		
Puppet resource --help		

Dockanpassade resurstyper

I det här fallet har vi resurs som underkommando och –typer som handling.

Puppet har 49 inbyggda kärnresurstyper.

Skriv följande kommando i terminalen för att visa en lista över tillgängliga inbyggda marionettresurstyper:

puppet resource –types

Dockanpassade resurstyper

Varje typ stöder en lista över attribut. Dessa attribut ger en detaljerad beskrivning som Puppet använder för att hantera resursen.

För att ta reda på alla attribut som är associerade med marionettresurstypen, använd följande kommando:

puppet describe <resource type name>	

Parametrar kommer att lista alla tillgängliga attribut för den resurstypen.

docka beskriva paket

Dockanpassade resurstyper

Det är svårt för en ny person att förstå och relatera många ohanterade marionettkodfiler. Det är här vi behöver lite gruppering för att knyta samman verksamheten. Syftet är att lösa ett enskilt problem, såsom alla operationer som krävs för att konfigurera ssh på en server eller ntp-tjänst eller en komplett webbserver eller databasserver från början.

Vad är dockklasser?

Dockklasser är samlingen av dockresurser som buntas ihop som en enda enhet.

Puppet introducerade klasser för att göra strukturen återanvändbar och organiserad.

Först måste vi definiera en klass med klassdefinitionssyntax; klasser måste vara unika och kan endast deklareras en gång med samma namn:

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

Exempelvis:

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

Hittills har vi bara definierat klassen, men vi har inte använt den någonstans. Det betyder att den här koden som vi har skrivit aldrig kommer att köras om vi inte deklarerar den här klassen någon annanstans.

Klassdeklaration

För att använda en definierad klass i kod, använd innefattar nyckelord.

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

Låt oss förstå detta med ett verkligt scenario.

Demoinstallation av NTP

Se först till att NTP-paketet inte redan finns på servern, följande kommando returnerar ingenting om telnet inte finns på servern:

rpm -qa | grep -i ntp

Demo Installera NTP

Som vi kan se finns NTP-paketet redan på servern. Låt oss ta bort det befintliga NTP-paketet:

yum remove ntp

När du har tagit bort paketet, se till att filen ntp.conf inte finns:

ls -lrt /etc/ntp.conf

Demo Installera NTP

Kontrollera att ntp-tjänsten inte existerar genom att köra följande kommando:

systemctl status ntp

Demo Installera NTP

Skapa en ny .pp-fil för att spara koden. Från kommandoraden:

vi demontp.pp

Byt till infogningsläge genom att trycka på i från tangentbordet.

Skriv följande kod för att skapa 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",
    }
}

När du är klar med redigeringen: tryck på esc

För att spara filen, tryck på :wq!

Nästa steg är att ta om koden har några syntaxfel. Kör följande kommando:

puppet parser validate demontp.pp

Se till att du bytte till rot för att kunna slutföra testet utan några fel, genom att utföra kommandot:

su root

Testa är nästa steg i processen för att skapa kod. Utför följande kommando för att utföra ett röktest:

Puppet applies demontp.pp --noop

Sista steget är att köra dockan i verkligt läge och verifiera resultatet.

puppet apply demontp.pp

Puppet framförde ingenting eftersom demoklassen var bara definierade men inte deklarerade.

Så tills du deklarerar dockklassen kommer koden inte att tillämpas.

låt oss förklara demoklassen i samma kod med hjälp av inkludera klassnamn i slutet av 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

Återigen ta om koden har några syntaxfel. Kör följande kommando:

puppet parser validate demontp.pp

Se till att du bytte till rot för att kunna slutföra testet utan några fel, genom att utföra kommandot:

su root

Testning är nästa steg i processen för att skapa kod. Utför följande kommando för att utföra ett röktest:

Puppet apply demontp.pp --noop

Sista steget är att köra dockan i verkligt läge och verifiera resultatet.

puppet apply demontp.pp

Den här gången tillämpas koden eftersom klassen definierades och sedan deklarerades.

Demo Installera NTP

Se till att ntp.conf nu finns:

ls -lrt /etc/ntp.conf

Kontrollera att ntp-tjänsten har startats genom att köra följande kommando:

systemctl status ntpd

Demo Installera NTP