Eines d’automatització d’infraestructures

logossense
Eines d’automatització d’infraestructures

El nombre de servidors que han de gestionar els administradors de sistemes augmenta. La tendència és mantenir més servidors que s’especialitzen en la seva feina, són més lleugers i tenen una vida més curta, fet que es veu potenciat per la virtualització.

Per donar suport a aquest entorn cal automatitzar les configuracions al màxim, funció que realitzen els gestors de configuració.

Plantejament del problema

El nombre de servidors que han de gestionar els administradors de sistemes augmenta. La tendència és mantenir més servidors que s’especialitzen en la seva feina, són més lleugers i tenen una vida més curta, fet que es veu potenciat per la virtualització.

La virtualització facilita la creació d’instàncies per funcionalitats concretes, enlloc de tenir només un servidor que realitzi moltes funcions. Aquesta facilitat per crear instàncies és necessària ja que els desenvolupadors necessiten tenir disponibles diverses plataformes de testing, desenvolupament i explotació. Per això moltes vegades cal repetir la mateixa configuració però amb versions diferents d’una mateixa aplicació, com ara un gestor de bases de dades, de continguts o de servidors web.

Per donar suport a aquest entorn cal automatitzar les configuracions al màxim, funció que realitzen els gestors de configuració. Aquestes eines proporcionen als administradors un mitjà per poder definir la configuració dels servidors i les seves aplicacions de manera programada i centralitzada.

Eines d'automatització d'infraestructures

La utilitat d’aquestes eines ve donada per algunes de les seves característiques:

  • Són idempotents: es poden executar més d’una vegada sense produïr cap error. Això s’utilitza per executar periòdicament algunes parts de la configuració, proporcionant integritat als sistemes. Tenen la màxima de assegurar que el sistema compleix l’estat descrit per l’usuari. Si l’estat ha canviat, es corregeix. Si es vol canviar la configuració s’haurà de crear fitxers en un format concret, en els que es descriu l’estat de la configuració que volem en el nostre sistema.
  • Són multiplataforma: Tenim el mateix codi per diferents plataformes, diverses distribucions de Linux, en alguns casos de MS Windows. Aquest fet permet utilitzar les mateixes receptes a servidors diferents i, d’aquesta manera, centrar-nos en la configuració del software.
  • Són una evolució dels llenguatges de shell scripting i corregeixen moltes de les seves limitacions: els scripts fets en aquests llenguatges definien accions concretes que eren massa dependents del projecte i la plataforma a la que anaven destinats.

A continuació tenim un esquema (Figura 1) que representa la configuració genèrica d’un sistema com dels que estem parlant. Tenim un master controlat per l’usuari i amb diversos fitxers de configuració que apliquem al client.

Figura 1.

El següent esquema (Figura 2) representa la configuració d’un altre sistema genèric en el que tenim un master i diversos grups de servidors (clients). Apliquem una configuració o altra en funció del grup de servidors.

Figura 2.

Solucions actuals

Una primera generació de les eines de configuration management va ser CFengine. Després va aparèixer una segona generació amb Puppet i Chef, tots dos basats en Ruby. Actualment, la tercera generació amb Saltstack i Ansible, basats en Python.

Hem revisat les característiques de quatre d'aquestes eines de gestió de la configuració. Totes elles disposen de llicència open source i la majoria d’elles estan formades per un equip master i una sèrie de clients. El master conté les configuracions que més endavant s’aplicaran als clients.

L’usuari escriu estats que descriuen com vol que es gestioni les aplicacions d’un servidor i com s’han de configurar. En general, aquests estats descriuen una sèrie de recursos que s’haurien de trobar en un estat particular: paquets que s’haurien d’instal·lar, serveis que haurien d’estar funcionant o fitxers que s’haurien d’escriure. El software de gestió de la configuració s’assegura que cada recurs està correctament configurat i corregeix aquells recursos que no es troben en l’estat desitjat.

A continuació veiem 2 exemples que il·lustren els funcionament de les eines anteriors:

El primer exemple està escrit amb Puppet i pretén instal·lar i configurar el servei ntp (Network Time Proto).

# Instal·lar i configurar ntp
class ntp {
 case $operatingsystem {
   centos, redhat: {
     $service_name = 'ntpd'
     $conf_file    = 'ntp.conf.el'
   }
   debian, ubuntu: {
     $service_name = 'ntp'
     $conf_file    = 'ntp.conf.debian'
   }
 }
package { 'ntp':
   ensure => installed,
 }
 file { 'ntp.conf':
   path    => '/etc/ntp.conf',
   ensure  => file,
   require => Package['ntp'],
   source  => "/root/examples/answers/${conf_file}"
 }
 service { 'ntp':
   name      => $service_name,
   ensure    => running,
   enable    => true,
   subscribe => File['ntp.conf'],
 }
}

El segon exemple està escrit en Saltstack i descriu la creació d’una nova carpeta i la seva configuració:

# Crear carpeta Saltstack
/home/soft/tools:
 file.managed:
    - directory: True
    - name: /home/soft/tools
    - user: root
    - group: root
    - dir_mode: 700

Beneficis

El software de gestió de la configuració aporta molts avantatges als administradors de sistemes i facilita la gestió d'entorns més complexos:

  • Permet mantenir un control de versions de la configuració.
  • Permet executar-se múltiples vegades de manera segura i amb la confiança de que no es trencarà res.
  • Permet executar-se en múltiples servidors fàcilment.
  • Permet donar suport a un nombre creixent de servidors.
  • Verifica els servidors per comprovar que el seu estat de configuració és correcte.
  • Permet configurar determinats servidors fàcilment (web, bases de dades, etc.)
  • Dóna suport a les plantilles dels fitxers de configuració.

Referències

Puppet Labs: http://puppetlabs.com/

Chef: http://www.getchef.com/

SaltStack: http://www.saltstack.com/

Ansible: http://www.ansible.com/home