Tutorial de păpuși pentru începători: Noțiuni de bază și DSL

⚡ Rezumat inteligent

Puppet este o platformă open-source de gestionare a configurației care automatizează modul în care serverele sunt furnizate, configurate și menținute consecvența. Aplică infrastructura ca și cod printr-un limbaj declarativ specific domeniului, înlocuind administrarea manuală repetitivă pe flote mari de servere.

  • 🧩 Managementul configurației: Puppet menține serverele, stocarea și rețelele într-o stare cunoscută și consistentă și păstrează un istoric auditabil al fiecărei modificări.
  • 🏗️ Agent principal Architectura: Un maestru Linux compilează cataloage și agenți pe Linux, Windows, Solarissau Mac OS le aplică peste certificate securizate.
  • 🔄 Model de tragere: Agenții se conectează la fiecare 1800 de secunde, extrag codul Puppet necesar și corectează orice abatere de configurație de pe nod.
  • 🧠 DSL declarativ: Scris în Ruby, Puppet folosește un limbaj declarativ, astfel încât definiți starea finală dorită în loc de comenzi pas cu pas.
  • 🧱 Blocuri de construcții: Resursele, clasele, manifestele și modulele structurează codul reutilizabil, cu 49 de tipuri de resurse de bază încorporate disponibile în mod implicit.
  • ⚙️ Exemplu practic NTP: Definiți și declarați o clasă, validați-o cu ajutorul analizorului puppet parser `validate`, apoi aplicați manifestul folosind `puppet apply`.

Tutorial Puppet care explică elementele de bază ale gestionării configurației, arhitectura agentului principal și DSL-ul declarativ

Puppet este un instrument open-source de gestionare a configurației care vă permite să definiți infrastructura ca și cod și să mențineți flote mari de servere într-o stare consistentă și repetabilă. Înainte de a învăța Puppet, haideți să înțelegem mai întâi gestionarea configurației.

Ce este Managementul configurației?

Managementul configurației este procesul de menținere a software-ului și a sistemelor informatice - cum ar fi serverele, stocarea și rețelele - într-o stare cunoscută, dorită și consistentă. De asemenea, oferă acces la o înregistrare istorică precisă a stării sistemului în scopuri de management de proiect și audit.

Administratorii de sistem efectuează în mare parte sarcini repetitive, cum ar fi instalarea serverelor și configurarea acestora. Acești profesioniști pot automatiza această muncă prin scrierea de scripturi.

Totuși, aceasta devine o sarcină dificilă atunci când lucrează pe o infrastructură masivă. Instrumente de gestionare a configurației, cum ar fi Puppet, au fost introduse pentru a rezolva aceste probleme.

Ce este Puppet?

Marionetă este un instrument de gestionare a sistemului pentru centralizarea și automatizarea procesului de gestionare a configurației. Puppet este folosit și ca instrument de implementare software.

Este un software open-source de gestionare a configurației, utilizat pe scară largă pentru configurarea, gestionarea, implementarea și orchestrarea diverselor aplicații și servicii în întreaga infrastructură a unei organizații.

Puppet este special conceput pentru a gestiona configurația Linux și Windows sisteme. Este scris în Ruby și își folosește unicul Dprincipal Specific Llimba (DSL) pentru a descrie configurația sistemului.

Care sunt versiunile Puppet?

Puppet vine în două versiuni:

  • Păpușă cu sursă deschisăEste o versiune de bază a instrumentului de gestionare a configurației Puppet, cunoscut și sub numele de Open Source Puppet. Este disponibil direct de pe site-ul web al Puppet și este licențiat sub sistemul Apache 2.0.
  • Puppet EnterpriseO versiune comercială care oferă funcții precum raportarea conformității, orchestrarea, controlul accesului bazat pe roluri, o interfață grafică (GUI), o interfață API și instrumente din linia de comandă pentru gestionarea eficientă a nodurilor.

Ce poate face Puppet?

De exemplu, să presupunem că aveți o infrastructură cu aproximativ 100 de servere. Ca administrator de sistem, rolul dumneavoastră este să vă asigurați că toate aceste servere sunt mereu actualizate și funcționează cu funcționalitate completă.

Administratorul de sistem lucrează manual pe servere
Administratorul de sistem lucrează manual pe servere

Pentru a face acest lucru, puteți utiliza Puppet, care vă permite să scrieți cod simplu care poate fi implementat automat pe aceste servere. Acest lucru reduce efortul uman și face ca procesul de dezvoltare să fie rapid și eficient.

Puppet automatizează managementul serverului
Puppet automatizează managementul serverului

Marioneta îndeplinește următoarele funcții:

  • Puppet vă permite să definiți configurații distincte pentru fiecare gazdă.
  • Instrumentul vă permite să monitorizați continuu serverele pentru a confirma dacă există configurația necesară și dacă nu a fost modificată. Dacă configurația este modificată, Puppet revine la configurația predefinită pe gazdă.
  • De asemenea, oferă control asupra fiecărui sistem configurat, astfel încât o modificare centralizată este efectuată automat peste tot.
  • De asemenea, este folosit ca instrument de implementare, deoarece implementează automat software în sistem. Implementează infrastructura ca și cod, deoarece politicile și configurațiile sunt scrise ca și cod.

Puppet DSL și paradigme de programare

Înainte de a învăța Puppet DSL, haideți să înțelegem paradigmele de programare. O paradigmă de programare este un stil utilizat în programarea pe calculator.

Patru tipuri de paradigme sunt:

  • Imperativ.
  • Declarativ.
  • Funcțional (care este considerat un subset al paradigmei declarative).
  • Orientat pe obiecte.

Ne vom concentra asupra paradigmelor imperativă și declarativă.

Paradigme imperative

Această paradigmă de programare exprimă logica unui calcul (ce trebuie făcut) și descrie, de asemenea, fluxul său de control (cum trebuie făcut).

Exemplu:

Să presupunem că mergeți la birou. Rezervați un taxi și începeți să oferiți instrucțiuni pas cu pas șoferului până ajungeți la birou. A specifica ce trebuie să faceți și cum trebuie făcut este un stil imperativ.

Paradigme declarative

Această paradigmă de programare exprimă logica unui calcul (ce trebuie făcut) fără a descrie fluxul său de control (cum trebuie făcut).

Exemplu:

Să presupunem că mergeți la birou. Rezervați un taxi Uber și specificați doar destinația finală (biroul). A specifica ce trebuie făcut, dar nu și cum, este un stil declarativ.

Paradigmă Ce sa fac Cum să faci
imperativ Da Da
Declarativ Da Nu

Puppet folosește o paradigmă de programare declarativă

Puppet folosește o abordare de programare declarativă.

Exemplu: Creați un utilizator pe sistem.

Se poate face folosind un model de programare imperativă cu un script shell. Aici, specificăm cum se creează utilizatorul și ce comenzi se utilizează pe sistem de operare.

Paradigme declarative

Totuși, se poate face și folosind un model de programare declarativă cu doar câteva linii de cod Puppet și limbajul specific domeniului Puppet (DSL), obținându-se în continuare același rezultat.

Paradigme declarative

Modele de implementare a instrumentelor de management al configurației

Există două modele de implementare pentru instrumente de management al configurației:

  • Model de implementare bazat pe push: inițiat de un nod principal.
  • Model de implementare bazat pe tragere: inițiat de agenți.

Model de implementare bazat pe push

În acest model de implementare, serverul principal transmite configurațiile și software-ul către agenții individuali. După verificarea unei conexiuni securizate, serverul principal execută comenzi de la distanță pe agenți. De exemplu, ansiblu și Stiva de sare.

Model de implementare bazat pe extragere

În acest model de implementare, serverele individuale contactează un server principal, verifică și stabilesc o conexiune securizată, își descarcă configurațiile și software-ul și apoi se configurează în consecință - de exemplu, Puppet și Chef.

Cum funcționează Puppet?

Puppet se bazează pe un model de implementare pull, în care nodurile agentului se conectează periodic — după fiecare 1800 secunde — cu nodul principal pentru a vedea dacă este nevoie de actualizare a agentului. Dacă este necesară o actualizare, agentul extrage codul Puppet necesar de la nodul principal și efectuează acțiunile necesare.

Să explicăm acest lucru cu un exemplu de configurație master-agent.

Master

Aceasta este o mașină bazată pe Linux pe care este instalat software-ul Puppet master. Este responsabilă pentru menținerea configurațiilor sub formă de cod Puppet. Nodul master poate fi doar Linux.

Agenții

Acestea sunt mașinile țintă gestionate de Puppet, cu software-ul agent Puppet instalat pe ele.

Agentul poate fi configurat pe orice sistem de operare acceptat, cum ar fi Linux, Windows, Solarissau Mac OS.

Comunicarea dintre master și agent se stabilește prin certificate securizate.

Puppet Master Agent Comunicare
Puppet Master Agent Comunicare

Comunicarea dintre Master și Agent

Pas 1) Odată ce conectivitatea este stabilită între agent și master, agentul Puppet trimite date despre starea sa către serverul master Puppet. Acestea se numesc date (Facts), iar aceste informații includ numele gazdei, detaliile kernelului, adresa IP, detaliile numelui fișierului și așa mai departe.

Comunicarea dintre Master și Agent
Agentul trimite fapte către maestru

Pas 2) Puppet master-ul folosește aceste date și compilează o listă de configurații care urmează să fie aplicate agentului. Această listă de configurații care urmează să fie efectuată asupra unui agent este cunoscută sub numele de catalogAr putea include instalarea de pachete, actualizări sau eliminări, crearea de sisteme de fișiere, crearea sau ștergerea de utilizatori, repornirea serverului, modificări ale configurației IP și așa mai departe.

Comunicarea dintre Master și Agent
Maestrul trimite un catalog agentului

Pas 3) Agentul folosește această listă de configurații pentru a aplica orice modificări de configurare necesare pe nod.

Dacă nu există abateri în configurație, agentul nu efectuează nicio modificare a configurației și lasă nodul să ruleze cu aceeași configurație.

Comunicarea dintre Master și Agent
Agentul aplică configurația

Pas 4) Odată ce este finalizat, nodul raportează înapoi către Puppet master, indicând faptul că configurația a fost aplicată și finalizată.

Blocuri de păpuși

Puppet oferă flexibilitatea de a integra rapoarte cu instrumente terțe folosind API-urile Puppet.

Patru tipuri de blocuri de construcție pentru păpuși sunt:

  1. Resurse
  2. Clase
  3. Manifesta
  4. Modules

Resurse pentru păpuși

Resursele Puppet sunt elementele de bază ale Puppet.

Resursele sunt funcții încorporate care rulează în back-end pentru a efectua operațiunile necesare în Puppet.

Cursuri de păpuși

O combinație de resurse diferite poate fi grupată într-o singură unitate numită clasă.

Manifestul păpușilor

Un manifest este un director care conține fișiere Puppet DSL. Aceste fișiere au extensia .pp, care înseamnă programul Puppet. Codul Puppet constă în definiții sau declarații ale claselor Puppet.

Module de păpuși

Modulele sunt o colecție de fișiere și directoare, cum ar fi manifeste și definiții de clase. Acestea sunt unități reutilizabile și partajabile în Puppet.

De exemplu, MySQL instalează și configurează modulul MySQL, Şi Jenkins modulul gestionează Jenkins.

Module de păpuși
Module de păpuși

Tipuri de resurse Puppet

În general, un sistem este alcătuit din fișiere, utilizatori, servicii, procese, pachete și așa mai departe. În Puppet, acestea se numesc resurse și reprezintă elementele fundamentale ale Puppet.

Toate operațiunile asupra agenților Puppet sunt efectuate cu ajutorul resurselor Puppet.

Resursele Puppet sunt instrumente predefinite folosite pentru a efectua diverse sarcini și operațiuni pe orice platformă suportată. Putem folosi o singură resursă Puppet pentru a efectua o sarcină specifică sau putem folosi mai multe resurse Puppet împreună pentru a efectua implementări complexe de configurare a aplicațiilor.

Resursele pot avea diferite tipuri. Utilizări de păpuși resurse și tipuri de resurse pentru a descrie configurația unui sistem.

Există trei tipuri de resurse:

  1. Miez marionetă sau tipuri de resurse încorporate.
  2. Tipuri de resurse definite de marionete.
  3. Tipuri de resurse personalizate pentru marionete.

Miez marionetă sau tipuri de resurse încorporate

Tipurile de resurse de bază sau încorporate sunt tipurile de resurse Puppet predefinite livrate împreună cu software-ul Puppet. Toate tipurile de resurse Puppet de bază sau încorporate sunt scrise și întreținute de echipa Puppet.

Tipuri de resurse definite de marionete

Tipurile de resurse definite sunt tipuri de resurse ușoare scrise în limbajul declarativ Puppet folosind o combinație de tipuri de resurse existente.

Tipuri de resurse personalizate pentru marionete

Tipurile de resurse personalizate sunt tipuri de resurse complet personalizate scrise în Ruby.

Să explorăm mai în detaliu tipurile de resurse Puppet.

În terminal, tastați următoarea comandă pentru a afișa o listă de subcomenzi legate de Puppet:

Puppet --help

Tipuri de resurse personalizate pentru marionete

În cazul nostru, ne interesează subcomanda „resursă„, pe care le vom folosi pentru a găsi informații despre tipurile de resurse Puppet încorporate.

În terminal, tastați oricare dintre următoarele comenzi pentru a afișa o listă acțiuni asociat cu subcomanda Puppet „resursă„:

Puppet help resource		
Puppet resource --help		

Tipuri de resurse personalizate pentru marionete

În acest caz, avem resursă ca subcomandă și -tipuri ca acțiunea.

Puppet are 49 de tipuri de resurse de bază încorporate.

În terminal, tastați următoarea comandă pentru a afișa o listă cu tipurile de resurse Puppet încorporate disponibile:

puppet resource –types

Tipuri de resurse personalizate pentru marionete

Fiecare tip acceptă o listă de atribute. Aceste atribute oferă o descriere detaliată pe care Puppet o folosește pentru a gestiona resursa.

Pentru a afla toate atributele asociate cu un tip de resursă Puppet, utilizați următoarea comandă:

puppet describe <resource type name>	

Parametrii vor lista toate atributele disponibile pentru tipul de resursă respectiv.

păpușă descrie pachet

Tipuri de resurse personalizate pentru marionete

Este dificil pentru o persoană începătoare să înțeleagă și să relaționeze cu multe fișiere de cod Puppet negestionate. Aici avem nevoie de niște informații.ping pentru a lega operațiunile între ele. Scopul este de a rezolva o singură problemă, cum ar fi toate operațiunile necesare pentru a configura SSH pe un server, un serviciu NTP sau un server web complet sau un server de baze de date de la zero.

Ce sunt clasele de păpuși?

Clasele Puppet sunt colecții de resurse Puppet grupate ca o singură unitate.

Puppet a introdus clase pentru a face structura reutilizabilă și organizată.

Mai întâi, trebuie să definim o clasă folosind sintaxa de definire a clasei. Clasele trebuie să fie unice și pot fi declarate o singură dată cu același nume:

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

Exemplu:

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

Până acum, am definit doar clasa; nu am folosit-o nicăieri. Aceasta înseamnă că codul pe care l-am scris nu va fi executat niciodată decât dacă vom declara această clasă în altă parte.

Declarație de clasă

Pentru a utiliza o clasă definită în codul dvs., utilizați include cuvinte cheie.

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

Să înțelegem acest lucru cu un scenariu din lumea reală.

Instalare demonstrativă NTP

Mai întâi, asigurați-vă că pachetul NTP nu este deja prezent pe server. Următoarea comandă nu va returna nimic dacă pachetul NTP nu este prezent pe server:

rpm -qa | grep -i ntp

Demo Instalare NTP

După cum putem vedea, pachetul NTP este deja prezent pe server. Să eliminăm pachetul NTP existent:

yum remove ntp

După eliminarea pachetului, asigurați-vă că fișierul ntp.conf nu mai există:

ls -lrt /etc/ntp.conf

Demo Instalare NTP

Verificați dacă serviciul ntp nu există executând următoarea comandă:

systemctl status ntp

Demo Instalare NTP

Creați un nou fișier .pp pentru a salva codul. Din linia de comandă:

vi demontp.pp

Comutați în modul de inserare apăsând tasta i de pe tastatură.

Tastați următorul cod pentru a crea un fișier nou:

# 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",
    }
}

După ce ați terminat de editat, apăsați tasta ESC.

Pentru a salva fișierul, apăsați :wq!

Următorul pas este să verifica dacă codul are erori de sintaxă. Executați următoarea comandă:

puppet parser validate demontp.pp

Asigurați-vă că ați comutat la rădăcină utilizatorul să poată finaliza testul fără nicio eroare, executând comanda:

su root

Testare este următorul pas în procesul de creare a codului. Executați următoarea comandă pentru a efectua un test de fum:

Puppet applies demontp.pp --noop

Ultimul pas este să alerga Puppet în modul real și verificarea rezultatului.

puppet apply demontp.pp

Păpușa nu a interpretat nimic pentru că ora demonstrativă tocmai era... definit dar nu declarat.

Deci, până când nu declarați clasa Puppet, codul nu va fi aplicat.

Lasa-ne declara clasa demo în interiorul aceluiași cod folosind include numele clasei la sfarsitul codului:

# 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

Din nou, verifica dacă codul are erori de sintaxă. Executați următoarea comandă:

puppet parser validate demontp.pp

Asigurați-vă că ați comutat la rădăcină utilizatorul să poată finaliza testul fără nicio eroare, executând comanda:

su root

Testarea este următorul pas în procesul de creare a codului. Executați următoarea comandă pentru a efectua un test de fum:

Puppet apply demontp.pp --noop

Ultimul pas este să alerga Puppet în modul real și verificarea rezultatului.

puppet apply demontp.pp

De data aceasta, codul este aplicat deoarece clasa a fost definită și apoi declarată.

Demo Instalare NTP

Asigurați-vă că fișierul ntp.conf există acum:

ls -lrt /etc/ntp.conf

Verificați dacă serviciul ntp a fost pornit rulând următoarea comandă:

systemctl status ntpd

Demo Instalare NTP

Întrebări frecvente

Puppet este scris în Ruby. Folosește propriul limbaj declarativ specific domeniului (DSL), astfel încât administratorii să descrie starea dorită a sistemului în loc să scrie scripturi pentru fiecare pas. DSL-ul Puppet este inspirat de Ruby, dar nu este nevoie să cunoașteți Ruby pentru a scrie manifeste.

Puppet folosește un model declarativ, bazat pe agenți, și propriul DSL, astfel încât nodurile preiau cataloage de la un master. ansiblu este fără agenți și folosește strategii YAML prin SSH. Puppet se potrivește aplicării pe termen lung de către stat, în timp ce Ansible este mai simplu pentru o orchestrare rapidă și la cerere.

În mod implicit, Puppet master, numit și Puppet Server, ascultă pe portul TCP 8140. Agenții Puppet se conectează la acest port prin HTTPS pentru a trimite informații și a descărca cataloagele compilate. Asigurați-vă că portul 8140 este deschis în firewall-ul dintre agenți și master.

Puppet master trebuie să ruleze pe Linux. Agenții Puppet rulează pe multe platforme, inclusiv Linux, Windows, Solarisși Mac OS. Acest suport pentru agenți multi-platformă permite unui singur Puppet master să gestioneze o flotă mixtă de servere și stații de lucru dintr-un singur loc central.

Puppet Forge este depozitul public de module Puppet predefinite, partajate de Puppet și comunitate. În loc să scrieți manifeste de la zero, puteți descărca module care instalează și configurează software precum MySQL or Jenkins, apoi adaptați-le la mediul dumneavoastră.

Da. Puppet rămâne un instrument de gestionare a configurației și de infrastructură ca și cod utilizat pe scară largă, fiind acum întreținut de Perforce. Puppet 8 este versiunea majoră actuală și încă oferă suport atât pentru Open Source Puppet, cât și pentru versiunea comercială. Puppet Enterprise pentru gestionarea flotelor de servere la scară largă.

Asistenții inteligenți artificiali pot genera DSL-uri Puppet din solicitări în limbaj simplu, pot explica manifestele existente și pot semnala erorile de sintaxă sau logică înainte de a rula validarea analizorului puppet. Instrumente precum Chat GPT accelerați crearea, dar verificați întotdeauna resursele generate pentru căi corecte și idempotență.

Da. Copilotul GitHub completează automat manifestele Puppet, declarațiile de resurse și definițiile de clase dintr-un comentariu scurt sau un context de fișier. RevVizualizați rezultatul pentru tipurile de resurse, numele atributelor și dependențele corecte, deoarece codul generat poate face referire la module sau valori implicite învechite.

Rezumați această postare cu: