ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 126
Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 29
Abonament PDF

Automatizare folosind puppet

Claudiu Demian
Systems Administrator
@Yardi România



PROGRAMARE

Automatizarea reprezintă o componentă importantă în IT, atât în dezvoltarea software cât și în administrarea sistemelor și a infrastructurii. În cazul mediilor mari și dinamice, implementarea unei forme de automatizare reprezintă o nevoie esențială pentru a asigura un proces optim de management al resurselor.  

Puppet este un sistem de management al configurațiilor care permite administratorilor de sistem definirea stării infrastructurii IT. Orice modificare care trebuie efectuată se traduce într-o modificare în configurația puppet pentru respectiva resursa (fișier/pachet/nod/grup de noduri etc.), care este aplicată în mod automat pe toate serverele sau nodurile vizate de respectiva schimbare.  

Descrierea acestei stări se realizează folosind limbajul puppet, care este un limbaj declarativ. Configurația generală se găsește în fișierul /etc/puppet/manifests/site.pp. Aici sunt referite modulele, clasele și resursele definite în /etc/puppet/modules.

Puppet poate funcționa atât într-o arhitectură de tip client-server cît și stand-alone. În primul caz, serverul puppet poartă numele de puppetmaster. Pe mașina puppetmaster este definită configurația infrastructurii, care este mai apoi preluată de către clienți la intervale regulate de timp (modificabile de către administrator).

În continuare, oferim un exemplu elocvent pentru modul de utilizare a limbajului:

/etc/puppet/modules/lighttpd/manifests/init.pp:
class lighttpd {
package{'lighttpd':
  ensure => installed,
}
file{'/etc/lighttpd/lighttpd.conf':
  content => template('lighttpd/lighttpd.conf.erb'),
  notify  => Service['lighttpd'];
}

service{'lighttpd':
  ensure => running,
  enable => true,
}
}

Aceasta clasă prezintă o instalare a serverului web lighttpd, descriind fiecare componentă necesară. Astfel, putem identifica primele tipuri de resurse de care dispune puppet și care sunt probabil și cele mai folosite.

Un modul reprezintă un set de clase, definiții, template-uri și fișiere care împreună,îndeplinesc un singur scop. De aici rezultă și prima recomandare în scrierea unui modul: trebuie să îndeplinească o singură funcționalitate. Exemplu: un server LAMP ar putea fi gestionat cu un singur modul puppet care se ocupă de instalarea Apache-ului, a serverului MySQL, a PHP-ului și a oricăror alte servicii conexe din Linux (autentificare, NTP, etc.). Problema care apare este că acest modul riscă să ajungă prea mare și greu de gestionat. În plus, își pierde din portabilitate. O soluție mai elegantă este despărțirea configurațiilor în patru module separate, reducându-se astfel complexitatea fiecăruia.

Clasa reprezintă un bloc de cod care poate fi instanțiat. Fiecare modul are definită în fișierul manifests/init.pp clasa principală a modulului. Instanțierea unei clase la nivelul unui nod, astfel încât să se aplice schimbările sale se realizează folosind directiva include.

_/etc/puppet/manifests/site.pp_:
node /web\d+/ {
   include lighttpd
}

Clasele suportă moșteniri și pot fi instanțiate de mai multe ori în configurația generală puppet, care se găsește în fișierul site.pp. De asemenea, clasele pot fi parametrizate.

În cadrul unei clase definim starea dorită a sistemului folosind resurse de tipuri predefinite sau definite de administrator. În exemplul anterior, putem identifica următoarele resurse: pachetul lighttpd, fișierul /etc/lighttpd/lighttpd.conf și serviciul lighttpd. Fiecare resursă are un tip (package, file și respectiv service), un nume și unul sau mai multe atribute (ensure, content, notify, etc.). Puppet dispune de un număr satisfăcător de tipuri predefinite pentru resurse, foarte bine documentate în documentația lor oficială.

O altă funcționalitate utilă a puppet-ului este aceea de template-ing. Folosind limbajul ERB (Embedded Ruby), puppet oferă posibilitatea de a genera fișiere în funcție de parametri oferiți de administrator la instanțierea clasei sau de starea sistemului, folosind fact-uri. Împreună cu puppet-ul, pe sistem se instalează și un utilitar numit facter. Acesta aduna informații despre sistem și le expune ca fact-uri (exemplu: _ipaddress, fqdn, operatingsystem etc.). Aceasta funcționalitate poate fi extinsă cu _fact-_uri definite de administrator care, la rândul lor, pot fi utilizate în template-uri.

Datorită faptului că modulele sunt de sine stătătoare și refolosibile, puppet oferă serviciul PuppetForge prin care utilizatorii pot oferi gratuit module realizate de ei și pot descăra modulele altor utilizatori.

Pe lângă funcționalitatea de bază, aceea de a descrie starea sistemului, puppet poate fi extins pentru a aduna statistici despre infrastructură. Aceasta se realizează folosind serviciul puppetdb. Acesta are în spate o bază de date în care se agregă fact-urile tuturor sistemelor din infrastructură. Aceste informații pot fi utilizate ulterior în cadrul claselor pentru a genera dinamic resurse.

Un exemplu de utilizare al _puppetdb-_ului îl reprezintă un modul de gestionare a unei instanțe de Nagios. Acesta, folosind informații despre sisteme din puppetdb (hostname, ip, din care hostgroup-uri face parte), generează automat câte un fișier de configurare pentru fiecare nou host introdus în infrastructură. Administratorului îi rămâne doar sarcina de a defini comenzi, check-uri și hostgroup-uri.

O altă posibilitate de a extinde puppet-ul este folosind puppet-dashboard. Acest serviciu oferă o interfață web prin care ni se oferă mai multe informații și statistici despre infrastructură. În primul rând, fiecare client trimite către serverul pe care rulează puppet-dashboard un raport despre ultima rulare a clientului: dacă a rulat cu succes, dacă s-a modificat ceva, ce a crăpat etc. Putem vizualiza aceste rapoarte în aplicație, precum și statistici generate din aceste rapoarte.

De asemenea, puppet-dashboard ne oferă și un serviciu numit Inventory Service prin care să putem interoga starea sistemului, tot în funcție de fact-uri. Dacă folosind puppetdb putem folosi aceste informații în interiorul claselor, folosind Inventory Service avem acces la ele din exterior. Folosind API-ul lor, putem construi unelte/aplicații care să folosească aceste informații.

Acest articol s-a dorit a fi o introducere în puppet pentru cei care încă nu l-au introdus în mediul lor. Flexibilitatea și potențialul de a ușura munca administratoriloor pe care puppet le oferă pot reprezenta argumente convingătoare în favoarea adoptării acestuia. Nu susținem că puppet reprezintă soluția tuturor problemelor sau că este cel mai bun sistem de gestiune a configurațiior- mai sunt chef, cfengine sau alte sisteme comerciale- dar susținem ideea că orice administrator de sistem ar trebui să folosească un astfel de sistem în infrastructura pe care o gestionează.

VIDEO: NUMĂRULUI 126

Sponsori

  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • Connatix
  • BoatyardX
  • AboutYou
  • Telenav
  • .msg systems
  • Colors in projects