Com s'utilitzen els mòduls Puppet per a l'automatització d'infraestructures de TI?

Un tutorial pràctic sobre titelles que parla sobre l’escriptura d’un mòdul de titelles i l’ús d’un manifest per automatitzar i mantenir la infraestructura de TI d’una organització.

Anteriorment, els administradors de sistemes feien servir scripts d’intèrpret d’ordres per executar els seus servidors i aquest mètode no tenia escalabilitat. És una tasca descoratjadora modificar constantment els scripts de centenars o milers de servidors en constant canvi i les seves configuracions de sistema.



En aquest article sobre mòduls de titelles i manifestos vegem com podríem utilitzar mòduls titella per automatitzar la configuració del servidor, la instal·lació de programes i la gestió del sistema.

Aquest bloc tractarà els temes següents:

Introducció a la Programació de Titelles

Titella és una de les eines DevOps més populars que s’utilitza àmpliament per a la gestió de configuracions. S'utilitza per produir consistència a la infraestructura. Puppet pot definir la infraestructura com a codi, gestionar diversos servidors i aplicar la configuració del sistema, ajudant així a automatitzar el procés de gestió de la infraestructura.



Titella téel seu propi llenguatge de configuració, Titella DSL . Igual que amb altres programes de DevOps, Puppet automatitza els canvis, eliminant els canvis manuals basats en scripts. Tanmateix, Puppet no és simplement un altre llenguatge shell, ni tampoc un llenguatge de programació pur, com ara PHP. En canvi, Puppet utilitzaa enfocament basat en models declaratius a l'automatització de TI. Això permet a Puppet definir la infraestructura com a codi i aplicar la configuració del sistema amb els programes.

Abans de continuar amb la demostració, analitzem alguns aspectes bàsics de la programació de titelles.

com declarar matriu dinàmica a Java

Termes clau en la programació de titelles

Manifestes

Es diu un programa de titelles manifest i té un nom de fitxer amb .pp extensió. El manifest principal per defecte de Puppet és /etc/puppet/manifests/site.pp . (Això defineixconfiguracions globals del sistema, com ara configuració LDAP, servidors DNS o altres configuracions que s’apliquen a tots els nodes).



Classes

Dins d’aquests manifestos hi ha blocs de codi anomenats classes altres mòduls poden trucar. Les classes configuren trossos de funcionalitat grans o mitjanes, com ara tots els paquets, fitxers de configuració i serveis necessaris per executar una aplicació. Les classes faciliten la reutilització del codi Puppet i milloren la llegibilitat.

Recursos

El codi de titelles està format principalment per declaracions de recursos. A recurs descriu un element específic sobre l’estat desitjat del sistema. Per exemple, pot incloure que hagi d'existir un fitxer específic o que s'hagi d'instal·lar un paquet.

Mòduls de titelles

Llevat del principalsite.ppmanifest,emmagatzema manifestosdins mòduls .

Tot el nostre codi Puppet s’organitza en mòduls que són els components bàsics de titelles que podem reutilitzar i compartir. Cada mòdul gestiona una tasca específica a la infraestructura, com ara instal·lar i configurar un programari.

Els mòduls contenen classes de titelles, tipus definits, tasques, plans de tasques, capacitats, tipus de recursos i connectors, per exemple, tipus personalitzats o fets. Instal·leu mòduls al Puppetcamí-mòdul. Puppet carrega tot el contingut de tots els mòduls de la ruta del mòdul, fent que aquest codi estigui disponible per al seu ús.

Mòduls - Programació de titelles - EdurekaPuppetlabs té mòduls predefinits que podem utilitzar instantàniament descarregant-los PuppetForge . També podeu crear un mòdul de titelles personalitzat que s’adapti a les vostres necessitats.

Flux de treball del programa de titelles

Utilitzarem el llenguatge declaratiu de Puppet per descriure l’estat desitjat del sistema en fitxers anomenats manifestos. Els manifestos descriuen com heu de configurar els recursos de la xarxa i del sistema operatiu, com ara fitxers, paquets i serveis.

Titella compila manifestacions en catàlegs i aplica cada catàleg al seu node corresponent per garantir aquesta configuració de tel node és correctea través de la vostra infraestructura.

Demostració: Automatització de la instal·lació d'Apache i MySQL

Aquest article sobre mòduls de titelles és pràctic, que mostrarà dues maneres d’utilitzar un mòdul de titelles i també us ensenyarà a fer-ho automatitzar la instal·lació d’un servidor configurat amb aquests dos mòduls.

Per començar, assegureu-vos que teniu preparada una infraestructura de titelles que inclogui un servidor mestre de titelles i dos agents de titelles.

  • Puppet Master: Ubuntu 18.04
  • Agent 1: Ubuntu 18.04
  • Agent 2:CentOS7

Aquí teniu un resum del que aconseguirem en aquesta pràctica:


Comencem, doncs, amb la pràctica:

Creació d’un mòdul des de zero

En aquest mòdul titella, ens ocuparem de tasques com la descàrrega del paquet Apache, la configuració de fitxers i la configuració d’amfitrions virtuals.

  • Des del Puppet Master, aneu al directori de mòduls de Puppet i creeu el directori Apache:
    cd / etc / puppet / modules sudo mkdir apache
  • Des del directori apache, creeu subdirectoris: manifestos, plantilles, fitxers i exemples.
    cd apache sudo mkdir {manifestos, plantilles, fitxers, exemples}
  • Aneu al directori de manifest:
    CD es manifesta
  • A partir d’aquí, separarem el mòdul en classes segons els objectius d’aquesta secció de codi.

init.pp -> per descarregar el paquet Apache

params.pp -> per definir qualsevol variable i paràmetre

config.pp -> per gestionar qualsevol fitxer de configuració del servei Apache.

vhosts.pp -> per definir els amfitrions virtuals.

Aquest mòdul també farà ús de Hiera (un sistema integrat de cerca de dades de configuració de valor-clau, que s’utilitza per separar les dades del codi Puppet), per emmagatzemar variables per a cada node.

Pas 1: descàrrega del paquet Apache

Crea una classe init.pp

Ara crearem un fitxerinit.pparxiu al directori de manifest per contenir el paquet apache.
Com que tenim 2 sistemes operatius diferents (ubuntu i CentOS7) que fan servir diferents noms de paquets per a Apache, haurem d’utilitzar una variable$ apachename.

/etc/puppetlabs/code/environments/production/modules/apache/manifests/init.pp

class apache {package {'apache': name => $ apachename, sure => present,}}

paquet resource permet la gestió d'un paquet. S’utilitza per afegir, eliminar o assegurar-se que hi hagi un paquet.

En la majoria dels casos, el nom del recurs (apatxe, a sobre) ha de ser el nom del paquet que s'està gestionant. A causa de les diferents convencions de denominació,anomenem el nom real del paquetamb el nom referència. Tan nom , demana la variable encara no definida$ apachename.

assegurar La referència assegura que el paquet éspresent.

Creeu un fitxer params.pp

Elparams.ppfitxer definirà les variables necessàries. Tot i que podríem definir aquestes variables dins del fitxerinit.pp, ja que caldrà utilitzar més variables fora del propi tipus de recurs, mitjançant un fitxerparams.ppfitxer permet definir variables asideclaracions i s'utilitzen en diverses classes.

Crea unparams.ppi el codi següent.

/etc/puppetlabs/code/environments/production/modules/apache/manifests/params.pp

class apache :: params {if $ :: osfamily == 'RedHat' {$ apachename = 'httpd'} elsif $ :: osfamily == 'Debian' {$ apachename = 'apache2'} else {fail ('això no és una distribució compatible. ')}}

Fora de l'original init.ppclasse, el nom de cada classe ha de derivar-seapatxe. A aquesta classe l’anomenem com apache :: params . El nom després dels dos punts ha de compartir un nom amb el fitxer. AnsiLa declaració s'utilitza per definir els paràmetres a partir de la informació proporcionada per Factor , Puppet té instal·lació de facter com a part de la seva instal·lació. Aquí, Facter eliminarà la família del sistema operatiu (osfamília), per discernir si és aixíbarret vermello béBasat en Debian.

Amb els paràmetres definits finalment, hem de trucar al fitxer params.pp i els paràmetres ainit.pp. Per fer-ho, hem d'afegir els paràmetres després del nom de la classe, però abans del claudàtor d'obertura({).

Doncs elinit.ppque hem creat anteriorment hauria de ser semblant a això:

class apache ($ apachename = $ :: apache :: params :: apachename,) hereta :: apache :: params {package {'apache': name => $ apachename, sure => present,}}

La cadena de valor $ :: apache :: params :: value diu a Puppet que tregui els valors del fitxer apatxe mòduls, params class, seguit del nom del paràmetre. El fragment hereta :: apache :: params permetinit.ppper heretar aquests valors.

Pas 2: gestioneu els fitxers de configuració

El fitxer de configuració d'Apache serà diferent segons si esteu treballant en un sistema basat en Red Hat o Debian.

Podeu trobar els fitxers de dependència següents al final d'aquesta demostració:httpd.conf(Barret vermell),apache2.conf(Debian).

  • Copieu el contingut de httpd.conf iapache2.confen fitxers separats i deseu-los al fitxer Fitxers directoria / etc / puppetlabs / code / environnements / production / modules / apache / files .
  • Editeu els dos fitxers a inhabilitar mantenir amb vida. Haureu d’afegir la línia KeepAlive Off alhttpd.confdossier. Si no voleu canviar aquesta configuració, hauríem d'afegir un comentari a la part superior de cadascundossier:
    /etc/puppetlabs/code/environments/production/modules/apache/files/httpd.conf
#Aquest fitxer està gestionat per titelles

Afegiu aquests fitxers al fitxerinit.ppfitxer, de manera que Puppet sabrà la ubicació d’aquests fitxers tant al servidor principal com als nodes d’agent. Per fer-ho, fem servir el fitxer dossier recurs.

/etc/puppetlabs/code/environments/production/modules/apache/manifests/init.pp

file {'configuration-file': path => $ conffile, sure => file, source => $ confsource,}

Com que tenim els fitxers de configuració en dues ubicacions diferents, donem al recurs el nom genèric fitxer de configuració amb el fitxer Camí definit com a paràmetre ambCamíatribut.

assegurar assegura que és un fitxer.

font proporciona la ubicació al mestre de titelles dels fitxers creats anteriorment.

Obriu el fitxerparams.ppdossier.

Definim el $ conffile i $ confsourcevariables dins del fitxersideclaració:

/etc/puppetlabs/code/environments/production/modules/apache/manifests/params.pp

si $ :: osfamily == 'RedHat' {... $ conffile = '/etc/httpd/conf/httpd.conf' $ confsource = 'titella: ///modules/apache/httpd.conf'} elsif $: : osfamily == 'Debian' {... $ conffile = '/etc/apache2/apache2.conf' $ confsource = 'titella: ///modules/apache/apache2.conf'} else {...

Hem d'afegir els paràmetres al començament del fitxerapatxedeclaració de classe ainit.ppfitxer, similar a l’exemple anterior.

Quan el fitxer de configuració canvia, Apache ha de reiniciar-se. Per automatitzar això, podem utilitzar el recurs del serveien combinació amb el notificar atribut, que cridarà al recurs que s'executarà sempre que es canviï el fitxer de configuració:

/etc/puppetlabs/code/environments/production/modules/apache/manifests/init.pp

file {'configuration-file': path => $ conffile, sure => file, source => $ confsource, notification => Service ['apache-service'],} service {'apache-service': name => $ apachename, hasrestart => true,}

servei resource utilitza el paràmetre ja creat que va definir el nom d'Apache als sistemes Red Hat i Debian.
hasrestart L'atribut s'utilitza per activar un reinici del servei definit.

Pas 3: creeu els fitxers d'amfitrió virtual

En funció de la distribució del vostre sistema, els fitxers de l’amfitrió virtual es gestionaran de manera diferent. Per això, inclourem el codi per als amfitrions virtuals en un fitxersideclaració, similar a la que s'utilitza al fitxerparams.ppclasse però que conté recursos reals de titelles.

  • Des de dins delapache / manifests /directori, creeu i obriu un fitxervhosts.ppdossier. Afegiu l’esquelet delsideclaració:

/etc/puppetlabs/code/environments/production/modules/apache/manifests/vhosts.pp

class apache :: vhosts {if $ :: osfamily == 'RedHat' {} elsif $ :: osfamily == 'Debian' {} else {}}

La ubicació del fitxer d’amfitrió virtual al nostre servidor CentOS 7 és/etc/httpd/conf.d/vhost.conf . Heu de crear el fitxer com a plantilla al Puppet master. Feu el mateix amb el fitxer d’amfitrions virtuals d’Ubuntu, que es troba a/etc/apache2/sites-available/example.com.conf, substituintexample.comamb l’FQDN del servidor.

exemple de control de vista de model java
  • Aneu a plantilles fitxer dins del fitxer apatxe i, a continuació, creeu dos fitxers per als vostres amfitrions virtuals:

Per als sistemes Red Hat:
/etc/puppetlabs/code/environments/production/modules/apache/templates/vhosts-rh.conf.erb

ServerAdmin ServerName ServerAlias ​​www. DocumentRoot / var / www // public_html / ErrorLog /var/www//logs/error.log CustomLog /var/www//logs/access.log combinat

Per als sistemes Debian:
/etc/puppet/modules/apache/templates/vhosts-deb.conf.erb

ServerAdmin ServerName ServerAlias ​​www. DocumentRoot / var / www / html // public_html / ErrorLog /var/www/html//logs/error.log CustomLog /var/www/html//logs/access.log combinatsRequeriu tots els concedits

Utilitzem només dues variables en aquests fitxers: correu d’administració i nom de servidor . Els definirem de forma node per node, dins desite.ppdossier.

vés a ordenar c ++
  • Torna alvhosts.ppdossier. Les plantilles creades ara es poden fer referència al codi:

/etc/puppetlabs/code/environments/production/modules/apache/manifests/vhosts.pp

class apache :: vhosts {if $ :: osfamily == 'RedHat' {file {'/etc/httpd/conf.d/vhost.conf': sure => file, content => template ('apache / vhosts-rh .conf.erb '),}} elsif $ :: osfamily ==' Debian '{file {' /etc/apache2/sites-available/$servername.conf ': sure => file, content => template (' apache /vhosts-deb.conf.erb '),}} else {fail (' No és una distribució compatible. ')}}

Les dues famílies de distribució criden aldossierrecurs i assumiu el títol de la ubicació de l’amfitrió virtual a la distribució respectiva. Per a Debian, això significa una vegada més fer referència a$ servernamevalor. Elcontingutattribute crida a les plantilles respectives.

  • Tots dos fitxers d'amfitrió virtual fan referència a dos directoris. No es troben als sistemes per defecte. Podem crear-los mitjançant l'ús del fitxerdossierrecurs, cadascun dins desideclaració. El completvhosts.confel fitxer hauria d’assemblar-se a:

/etc/puppetlabs/code/environments/production/modules/apache/manifests/vhosts.pp

class apache :: vhosts {if $ :: osfamily == 'RedHat' {file {'/etc/httpd/conf.d/vhost.conf': sure => file, content => template ('apache / vhosts-rh .conf.erb '),} fitxer {[' / var / www / $ servername ',' / var / www / $ servername / public_html ',' / var / www / $ servername / log ',]: sure => directori,}} elsif $ :: osfamily == 'Debian' {file {'/etc/apache2/sites-available/$servername.conf': sure => file, content => template ('apache / vhosts-deb. conf.erb '),} fitxer {[' / var / www / $ servername ',' / var / www / $ servername / public_html ',' / var / www / $ servername / logs ',]: sure => directory ,}} else {fail ('No és una distribució compatible.')}}

Pas 4: proveu el mòdul

  • Aneu aapache / manifests /directori, executeu el fitxer analitzador de titelles a tots els fitxers per assegurar-se que la codificació de titelles és sense error:

sudo / opt / puppetlabs / bin / puppet parser validate init.pp params.pp vhosts.pp

Ha de tornar buit, sense problemes.

  • Aneu a exemples directori dins del fitxerapatxemòdul. Crea uninit.ppi incloure les classes creades. Substituïu els valors de$ servernamei$ adminemailamb el vostre:

/etc/puppetlabs/code/environments/production/modules/apache/examples/init.pp

serveremail = 'administrador web@example.com' $ nom_servidor = 'titella.example.com' inclou apache include apache :: vhosts
  • Prova el mòdul executant aplicar titella amb el –Noop etiqueta:
    sudo / opt / puppetlabs / bin / puppet apply --noop init.pp

No hauria de retornar cap error i la sortida que activarà actualitzacions dels esdeveniments. Per instal·lar i configurar apache al Puppet master, torneu a executar sense–Noop, si es vol.

  • Navegueu de nou al directori principal de Puppet i després aes manifestacarpeta (noel present al mòdul Apache).

cd / etc / puppetlabs / code / Environments / Production / Manifests

Crea unsite.ppdossier,i incloure el mòdul Apache per a cada node agent. Introduïu també les variables per al fitxercorreu d’administració i nom de servidorparàmetres. La vostrasite.pphauria d’assemblar-se al següent:

/etc/puppetlabs/code/environments/production/manifests/site.pp

node 'puppet-agent-ubuntu.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'puppet.example.com' include apache include apache :: vhosts} node 'puppet-agent-centos.example .com '{$ adminemail =' webmaster@example.com '$ servername =' titella.example.com 'inclou apache include apache :: vhosts}

Per defecte, el servei d’agent de titelles als vostres nodes gestionats comprovarà automàticament amb el mestre un cop cada 30 minuts i aplicarà qualsevol configuració nova del mestre. També podeu invocar manualment el procés de l'agent Puppet entre les execucions automàtiques de l'agent. Per executar manualment el nou mòdul als nodes de l'agent, inicieu sessió als nodes i executeu:

sudo / opt / puppetlabs / bin / puppet agent -t

Ara que hem après a crear un mòdul des de zero, aprenem a utilitzar un mòdul preexistent de la forja de titelles de titelles.

Utilitzeu un mòdul de PuppetForge

Titella Forja ja té molts mòduls per executar el servidor. Els podem configurar tan extensament com un mòdul que heu creat i podem estalviar temps, ja que no és necessari crear-lo des de zero.

Assegureu-vos que esteu a / etc / puppetlabs / codi / entorns / producció / mòduls i instal·leu el directori El mòdul MySQL de Puppet Forge de PuppetLabs. Això també instal·larà tots els mòduls previs.

cd / etc / puppetlabs / codi / entorns / producció / mòduls

sudo / opt / puppetlabs / bin / puppet module install puppetlabs-mysql

Utilitzeu Hiera per crear bases de dades

Abans de crear els fitxers de configuració per al mòdul MySQL, tingueu en compte que potser no voldreu utilitzar els mateixos valors en tots els nodes d’agent. Per proporcionar a Puppet les dades correctes per node, fem servir Hiera. Utilitzarà una contrasenya d’arrel diferent per node, creant així diferents bases de dades MySQL.

  • Aneu a/ etc / titellai creeu el fitxer de configuració de Hierahiera.yamlprincipalmenttitelladirectori. Utilitzarà els valors predeterminats de Hiera:

/etc/puppetlabs/code/environments/production/hiera.yaml

--- versió: 5 jerarquia: - nom: Camí comú: common.yaml per defecte: data_hash: yaml_data datadir: data
  • Creeu el fitxercomú.yaml. Definirà el valor per defecte arrel contrasenya per a MySQL:

/etc/puppetlabs/code/environments/production/common.yaml

mysql :: servidor :: root_password: 'contrasenya'

Utilitzem el fitxercomú.yamldossierquan una variable no es defineix en cap altre lloc. Això significa que tots els servidors compartiran la mateixa contrasenya d’arrel MySQL. Aquestes contrasenyes també es poden resumir per augmentar la seguretat.

  • Per utilitzar els valors predeterminats del mòdul MySQL, podeu afegir-ne un inclou ‘:: mysql :: server’ línia alsite.ppdossier. Tanmateix, en aquest exemple, substituireu alguns dels valors predeterminats del mòdul per crear una base de dades per a cadascun dels vostres nodes.

Editeu el fitxersite.ppamb els valors següents:

node 'Puppetagent-ubuntu.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostname.example.com' inclou apache include apache :: els hosts inclouen mysql :: server mysql :: db {'mydb_ $ {fqdn} ': user =>' el meu usuari ', contrasenya =>' mypass ', dbname =>' mydb ', host => $ :: fqdn, grant => [' SELECT ',' UPDATE '], tag = > $ domain,}} node 'Puppetagent-centos.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostname.example.com' include apache include apache :: vhosts include mysql :: server mysql :: db {'mydb _ $ {fqdn}': user => 'myuser', password => 'mypass', dbname => 'mydb', host => $ :: fqdn, grant => ['SELECT', ' ACTUALITZACIÓ '], tag => $ domini,}}

Automatització de la instal·lació dels mòduls de titelles de titellaire a agent de titelles

  • Podeu executar aquestes actualitzacions manualment a cada node mitjançant SSHing a cada node i emetent l'ordre següent:

sudo / opt / puppetlabs / bin / puppet agent -t

  • En cas contrari, el servei d’agent de titelles dels vostres nodes gestionats comprovarà automàticament amb el mestre un cop cada 30 minuts i aplicarà qualsevol configuració nova del mestre.

El catàleg s'ha aplicat correctament a l'agent Ubuntu

El catàleg s'ha aplicat correctament a l'agent CentOS

Per tant, es fa tota la instal·lació automatitzat als nodes de l'agent només aplicant el catàleg.Es poden trobar els fitxers de codi i les dependències utilitzades per a aquesta demostració aquí .

Espero que aquesta demostració us hagi ajudat a tenir una idea clara dels mòduls i manifestos de titelles i del seu ús per automatitzar la infraestructura de TI.En aquest cas, el vostre treball es fa tan fàcil, només cal que especifiqueu les configuracions a Puppet Master i que els agents Puppet avaluin automàticament el manifest principal i apliquin el mòdul que especifica la configuració d'Apache i MySQL. Si teniu problemes de consulta, no dubteu a publicar-los .

Si ho trobeu Tutorial de titelles rellevant, fes un cop d'ull al per Edureka, una empresa d'aprenentatge en línia de confiança amb una xarxa de més de 250.000 estudiants satisfets repartits per tot el món. El curs de formació en certificació Edureka DevOps ajuda els estudiants a adquirir experiència en diversos processos i eines DevOps com Puppet, Jenkins, Nagios i GIT per automatitzar diversos passos en SDLC.