Puppet-tutorial voor beginners: wat is Puppet en hoe te gebruiken?
Voordat we Puppet leren, moeten we het volgende begrijpen:
Wat is Configuratiebeheer?
Configuratiemanagement is het proces waarbij software en computersystemen (bijvoorbeeld servers, opslag, netwerken) in een bekende, gewenste en consistente staat worden gehouden. Het biedt ook toegang tot een nauwkeurig historisch overzicht van de systeemstatus voor projectbeheer- en auditdoeleinden.
Systeembeheerders voeren meestal repetitieve taken uit, zoals het installeren van servers, het configureren van die servers, enz. Deze professionals kunnen deze taak automatiseren door scripts te schrijven.
Het is echter een lastige klus als ze aan een enorme infrastructuur werken. Om dergelijke problemen op te lossen, werd de tool Configuratiebeheer, zoals een Puppet, geïntroduceerd.
Wat is een pop?
Puppet is een systeembeheertool voor het centraliseren en automatiseren van het configuratiebeheerproces. Puppet wordt ook gebruikt als software-implementatietool. Het is open-source configuratiebeheersoftware die veel wordt gebruikt voor serverconfiguratie, beheer, implementatie en orkestratie van verschillende applicaties en services in de hele infrastructuur van een organisatie.
Puppet is speciaal ontworpen om de configuratie van Linux en Windows systemen. Het is geschreven in Ruby en gebruikt zijn unieke DOMain Specifiek Ltaal (DSL) om de systeemconfiguratie te beschrijven.
Wat zijn de Puppet-versies?
Puppet is er in twee versies:
- Open source marionet: Het is een basisversie van de Puppet-configuratiebeheertool, ook wel bekend als Open Source Puppet. Het is rechtstreeks beschikbaar via de website van Puppet en is gelicentieerd onder het Apache 2.0-systeem.
- Marionetten onderneming: Commerciële versie die functies biedt zoals compliancerapportage, orkestratie, op rollen gebaseerde toegangscontrole, GUI, API en opdrachtregelhulpmiddelen voor effectief beheer van knooppunten.
Wat kan pop doen?
U heeft bijvoorbeeld een infrastructuur met ongeveer 100 servers. Als systeembeheerder is het uw rol om ervoor te zorgen dat al deze servers altijd up-to-date zijn en met volledige functionaliteit draaien.
Om dit te doen, kunt u Puppet gebruiken, waarmee u een eenvoudige code kunt schrijven die automatisch op deze servers kan worden geïmplementeerd. Dit vermindert de menselijke inspanning en maakt het ontwikkelingsproces snel en effectief.
Puppet vervult de volgende functies:
- Met Puppet kunt u voor elke host verschillende configuraties definiëren.
- Met de tool kunt u servers voortdurend monitoren om te bevestigen of de vereiste configuratie bestaat of niet en dat deze niet is gewijzigd. Als de configuratie wordt gewijzigd, keert de Puppet-tool terug naar de vooraf gedefinieerde configuratie op de host.
- Het biedt ook controle over het gehele geconfigureerde systeem, zodat een gecentraliseerde wijziging automatisch wordt doorgevoerd.
- Het wordt ook gebruikt als implementatietool, omdat het automatisch software op het systeem implementeert. Het implementeert de infrastructuur als code omdat beleid en configuraties als code worden geschreven.
Puppet DSL en programmeerparadigma's
Voordat we Puppet DSL leren, moeten we eerst de programmeerparadigma's begrijpen:
Een programmeerparadigma is een stijl die u gebruikt bij het programmeren van computers.
Vier soorten paradigma’s zijn:
- Imperatief.
- Declaratief.
- Functioneel (dat wordt beschouwd als een subset van dat declaratieve paradigma)
- Object-georiënteerd.
We zullen ons concentreren op imperatief en declaratief.
Imperatieve paradigma's
Dit programmeerparadigma drukt de logica van een berekening uit (Wat te doen) en beschrijft de controlestroom ervan (Hoe te doen)
Voorbeeld:
Stel dat u naar uw kantoor gaat, boekt u een taxi en geeft u stapsgewijze instructies aan de chauffeur totdat u op kantoor bent. Specificeren wat te doen en hoe te doen is een imperatieve stijl.
Declaratieve paradigma's
Dit programmeerparadigma drukt de logica van een berekening uit (Wat te doen) zonder de besturingsstroom ervan te beschrijven (Hoe te doen)
Voorbeeld:
Stel dat u naar uw kantoor gaat, u boekt een Uber-taxi en geeft de eindbestemming (Kantoor) op. Specificeren wat je moet doen, en niet hoe, is een declaratieve stijl.
Paradigma | Wat te doen | Hoe dat te doen |
---|---|---|
gebiedende wijs | Ja | Ja |
Declaratief | Ja | Nee |
Puppet gebruikt een declaratief programmeerparadigma
Puppet gebruikt een declaratieve programmeerbenadering.
Voorbeeld: Maak een gebruiker aan op het systeem:
Dit kan worden gedaan met behulp van het Imperative-programmeerpatroon door een shell-script: hier specificeren we hoe de gebruiker moet worden aangemaakt en welke commando's op de computer moeten worden gebruikt. besturingssysteem.
Het kan echter worden gedaan met behulp van een declaratief programmeerpatroon met slechts een paar regels poppencode, Puppet Domain Specific Language (DSL), en toch hetzelfde resultaat bereiken.
Implementatiemodellen van configuratiebeheertools
Er zijn twee implementatiemodellen voor configuratiebeheertools :
- Push-gebaseerd implementatiemodel: geïnitieerd door een masternode.
- Op pull gebaseerd implementatiemodel: geïnitieerd door agenten.
Push-gebaseerd implementatiemodel
In dit implementatiemodel pusht de masterserver de configuraties en software naar de individuele agenten. Nadat een beveiligde verbinding is geverifieerd, voert de master op afstand opdrachten uit op de agenten. Bijvoorbeeld, Ansible en Zoutstapel.
Op pull gebaseerd implementatiemodel.
In dit implementatiemodel nemen individuele servers contact op met een masterserver, verifiëren en brengen een veilige verbinding tot stand, downloaden hun configuraties en software en configureren zichzelf vervolgens dienovereenkomstig, bijvoorbeeld Puppet en Chef.
Hoe Marionet werkt?
Puppet is gebaseerd op een Pull-implementatiemodel, waarbij de agentknooppunten regelmatig inchecken 1800 seconden met het masterknooppunt om te zien of er iets moet worden bijgewerkt in de agent. Als er iets moet worden bijgewerkt, haalt de agent de benodigde marionetcodes uit de master en voert de vereiste acties uit.
Laten we het uitleggen met een voorbeeld:
Voorbeeld: Master – Agent-instelling:
De Meester
Een op Linux gebaseerde machine waarop Puppet Master-software is geïnstalleerd. Het is verantwoordelijk voor het onderhouden van configuraties in de vorm van marionetcodes. Het hoofdknooppunt kan alleen Linux zijn.
De agenten
De doelmachines worden beheerd door een pop waarop de poppenagentsoftware is geïnstalleerd.
De agent kan worden geconfigureerd op elk ondersteund besturingssysteem, zoals Linux of Windows or Solaris of Mac OS.
De communicatie tussen master en agent wordt tot stand gebracht via beveiligde certificaten.
Communicatie tussen de meester en de agent
Stap 1) Zodra de connectiviteit tussen de agent en de master tot stand is gebracht, stuurt de Puppet-agent de gegevens over zijn status naar de Puppet-masterserver. Deze worden feiten genoemd: deze informatie omvat de hostnaam, kerneldetails, IP-adres, bestandsnaamdetails, etc.…
Stap 2) Puppet Master gebruikt deze gegevens en stelt een lijst samen met de configuratie die op de agent moet worden toegepast. Deze lijst met configuraties die op een agent moeten worden uitgevoerd, staat bekend als een catalogus. Dit kan worden gewijzigd door bijvoorbeeld het installeren van pakketten, upgraden of verwijderen, het aanmaken van een bestandssysteem, het aanmaken of verwijderen van gebruikers, het opnieuw opstarten van de server, het wijzigen van de IP-configuratie, enzovoort.
Stap 3) De agent gebruikt deze lijst met configuraties om eventuele vereiste configuratiewijzigingen op het knooppunt toe te passen.
Als er geen afwijkingen in de configuratie voorkomen, voert Agent geen configuratiewijzigingen uit en laat hij het knooppunt met dezelfde configuratie draaien.
Stap 4) Zodra dit is gebeurd, rapporteert het knooppunt terug aan de poppenspeler, wat aangeeft dat de configuratie is toegepast en voltooid.
Poppenblokken
Puppet biedt de flexibiliteit om rapporten te integreren met tools van derden met behulp van Puppet API's.
Er zijn vier soorten poppenbouwstenen
- Informatiebronnen
- Klassen
- Manifesteren
- Modules
Hulpbronnen voor poppen
Puppet-bronnen zijn de bouwstenen van Puppet.
Hulpbronnen zijn de ingebouwde functies die aan de achterkant draaien om de vereiste handelingen in Puppet uit te voeren.
Poppenklassen
Een combinatie van verschillende bronnen kan worden gegroepeerd in een enkele eenheid die klasse wordt genoemd.
Marionet manifest
Manifest is een map met pop-DSL-bestanden. Deze bestanden hebben de extensie .pp. De .pp-extensie staat voor poppenprogramma. De poppencode bestaat uit definities of verklaringen van poppenklassen.
Poppenmodules
Modules zijn een verzameling bestanden en mappen zoals Manifests en Klassedefinities. Het zijn de herbruikbare en deelbare eenheden in Puppet.
Bijvoorbeeld, de MySQL module om te installeren en configureren MySQL of de Jenkins-module om Jenkins te beheren, enz..
Soorten poppenbronnen
Over het algemeen bestaat een systeem uit bestanden, gebruikers, services, processen, pakketten, etc. In Puppet worden dit bronnen genoemd. Hulpbronnen zijn de fundamentele bouwstenen
Puppet. Alle handelingen op puppet-agenten worden uitgevoerd met behulp van puppet-resources.
Puppet resources zijn de kant-en-klare tools die worden gebruikt om verschillende taken en bewerkingen uit te voeren op elk ondersteund platform. We kunnen een enkele puppet resource gebruiken om een specifieke taak uit te voeren, of we kunnen meerdere puppet resources samen gebruiken om complexe implementaties van applicatieconfiguraties uit te voeren.
Hulpbronnen kunnen verschillende typen hebben. Marionet gebruikt resources en brontypes om de configuratie van een systeem te beschrijven.
Er zijn drie soorten resourcetypen:
- Marionettenkern of ingebouwde resourcetypen.
- Door poppen gedefinieerde resourcetypen.
- Aangepaste resourcetypen in marionet.
Marionettenkern of ingebouwde resourcetypen
Kern- of ingebouwde brontypen zijn de vooraf gebouwde poppenbrontypen die bij de poppensoftware worden geleverd. Alle kern- of ingebouwde Puppet-brontypen worden geschreven en onderhouden door het Puppet-team.
Door poppen gedefinieerde resourcetypen
Gedefinieerde resourcetypen zijn lichtgewicht resourcetypen die zijn geschreven in de declaratieve Puppet-taal, waarbij gebruik wordt gemaakt van een combinatie van bestaande resourcetypen.
Aangepaste resourcetypen in marionet
Aangepaste resourcetypen zijn volledig aangepaste resourcetypen geschreven in Ruby.
Laten we eens kijken naar de typen poppenbronnen...
Typ de volgende opdracht in de terminal om een lijst met voor Puppet relevante subopdrachten weer te geven:
Puppet --help
In ons geval zijn we geïnteresseerd in het subcommando “hulpbron' die we zullen gebruiken om informatie te vinden over de ingebouwde typen poppen.
Typ in de terminal een van de volgende opdrachten om een lijst met acties geassocieerd met het pop-subcommando “hulpbron"
Puppet help resource Puppet resource --help
In dit geval hebben we de hulpbron als subcommando en -soorten als actie.
Puppet heeft 49 ingebouwde typen kernbronnen.
Typ de volgende opdracht in de terminal om een lijst met beschikbare ingebouwde Puppet-resourcetypen weer te geven:
puppet resource –types
Elk type ondersteunt een lijst met attributen. Deze kenmerken bieden een gedetailleerde beschrijving die Puppet gebruikt om de bron te beheren.
Om alle kenmerken te achterhalen die aan het Puppet-resourcetype zijn gekoppeld, gebruikt u de volgende opdracht:
puppet describe <resource type name>
Parameters vermelden alle beschikbare kenmerken voor dat resourcetype.
marionet beschrijft pakket
Het is moeilijk voor een nieuwe persoon om veel onbeheerde puppet-codebestanden te begrijpen en met elkaar in verband te brengen. Dit is waar we wat groepering nodig hebben om bewerkingen aan elkaar te knopen. Het doel is om één enkel probleem op te lossen, zoals alle bewerkingen die nodig zijn om ssh op een server of ntp-service te configureren of een complete webserver of databaseserver vanaf nul.
Wat zijn poppenklassen?
Poppenklassen zijn de verzameling poppenhulpmiddelen die als één geheel zijn gebundeld.
Puppet introduceerde lessen om de structuur herbruikbaar en georganiseerd te maken.
Eerst moeten we een klasse definiëren met behulp van de klassendefinitiesyntaxis; klassen moeten uniek zijn en kunnen slechts één keer met dezelfde naam worden gedeclareerd:
class <class-name> { <Resource declarations> }
Voorbeeld:
class ntpconfig { file { "/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } }
Tot nu toe hebben we alleen de klasse gedefinieerd, maar we hebben deze nergens gebruikt. Dit betekent dat deze code die we hebben geschreven nooit zal worden uitgevoerd tenzij we deze klasse ergens anders declareren.
Klasseverklaring
Als u een gedefinieerde klasse in code wilt gebruiken, gebruikt u de omvatten trefwoord.
class ntpconfig { file { "/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } } include ntpconfig
Laten we dit begrijpen met een realistisch scenario.
Demo-installatie NTP
Controleer eerst of het NTP-pakket nog niet op de server aanwezig is. De volgende opdracht retourneert niets als het telnet niet op de server aanwezig is:
rpm -qa | grep -i ntp
Zoals we kunnen zien, is het NTP-pakket al aanwezig op de server. Laten we het bestaande NTP-pakket verwijderen:
yum remove ntp
Zorg er na het verwijderen van het pakket voor dat het bestand ntp.conf niet bestaat:
ls -lrt /etc/ntp.conf
Controleer of de ntp-service niet bestaat door de volgende opdracht uit te voeren:
systemctl status ntp
Maak een nieuw .pp-bestand om de code op te slaan. Vanaf de opdrachtregel:
vi demontp.pp
Ga naar de invoegmodus door op i te drukken op het toetsenbord.
Typ de volgende code om een nieuw bestand te maken:
# 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", } }
Nadat u klaar bent met bewerken: druk op esc
Om het bestand op te slaan, drukt u op :wq!
De volgende stap is om controle of de code syntaxisfouten bevat. Voer de volgende opdracht uit:
puppet parser validate demontp.pp
Zorg ervoor dat u bent overgeschakeld naar de wortel om de test zonder fouten te kunnen voltooien, door het commando uit te voeren:
su root
Test is de volgende stap in het codecreatieproces. Voer de volgende opdracht uit om een rooktest uit te voeren:
Puppet applies demontp.pp --noop
De laatste stap is om lopen de pop in de echte modus en verifieer de uitvoer.
puppet apply demontp.pp
Puppet presteerde niets omdat de demoles gewoon was gedefinieerd maar niet gedeclareerd.
Dus totdat u de poppenklasse declareert, wordt de code niet toegepast.
laten verklaren de demoklasse binnen dezelfde code met behulp van klassenaam bevatten aan het einde van de code:
# 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
Weer controle of de code syntaxisfouten bevat. Voer de volgende opdracht uit:
puppet parser validate demontp.pp
Zorg ervoor dat u bent overgeschakeld naar de wortel om de test zonder fouten te kunnen voltooien, door het commando uit te voeren:
su root
Testen is de volgende stap in het codecreatieproces. Voer de volgende opdracht uit om een rooktest uit te voeren:
Puppet apply demontp.pp --noop
De laatste stap is om lopen de pop in de echte modus en verifieer de uitvoer.
puppet apply demontp.pp
Deze keer wordt de code toegepast omdat de klasse is gedefinieerd en vervolgens is gedeclareerd.
Zorg ervoor dat ntp.conf nu bestaat:
ls -lrt /etc/ntp.conf
Controleer of de ntp-service is gestart door de volgende opdracht uit te voeren:
systemctl status ntpd