En este post voy a realizar un análisis somero de dos grandes herramientas de automatización remota y centralizada de servidores. Por el título supongo que ya sabréis que se trata de Puppet y CFEngine.
El análisis individual de cada paquete va a constar de los siguientes puntos: descripción breve, instalación, capacidades, características y motivos a favor y en contra a la hora de elegirlo frente a otras herramientas similares.
Puppet. Comenzaré con Puppet por seguir el orden indicado.
1.- Descripción breve
Puppet, al igual que otros paquetes similares tiene por objetivo la administración remota centralizada y automática de gran cantidad de servidores para descargar a los administradores de sistemas de las tareas rutinarias y que no aportan valor a su trabajo. Está desarrollada por Puppet Labs, su primera versión es de 2005, la última versión estable es la 2.7.14 de mayo del 2012. Es software libre con licencia Apache desde la versión 2.7.0, anteriormente tenía GPL.
2.- Instalación
Para describir el proceso de instalación, voy a elegir una de las distribuciones de software libre para servidores más usadas en la actualidad, CentOS 5. Es muy fácil usando el repositorio de yum situado en http://yum.puppetlabs.com/. Los pasos son los siguientes:
- $ sudo rpm -ivh http://yum.puppetlabs.com/el/5/products/i386/puppetlabs-release-5-1.noarch.rpm
- $ sudo yum install puppet (para los clientes)
- $ sudo yum install puppet-server (para el servidor)
- Configurar Puppet en /etc/puppet/puppet.conf según sea cliente o servidor.
- $ sudo service puppetmaster start
- $ sudo chkconfig puppetmaster on
Esto también resuelve e instala de forma automática las dependencias que necesita Puppet para funcionar (ruby-libs, ruby, facter, ruby-shadow, augeas-libs, ruby-augeas).
3.- Capacidades
Puppet permite:
- Gestión de configuraciones/ficheros
- Gestión usuarios, grupos
- Gestión paquetes
- Scripts, Cron, …
- Integración con subversion
- Puppet funciona sobre RedHat, CentOS, Fedora, Gentoo,Freebsd, Mac OS X
4.- Características
Utiliza típicamente (pero no siempre) el formato cliente-servidor, todos los clientes pueden hablar con uno o más servidores centrales. Cada cliente contacta con el servidor de forma periódica (cada media hora, de forma predeterminada), descarga de la última configuración y se asegura de que su configuración está actualizada. Una vez hecho esto, el cliente puede enviar un informe al servidor indicando si se necesita cambiar algo.
5.- Motivos de elección frente a otras herramientas similares
A favor:
- Madurez.
- Sintaxis fácil.
- Muy flexible.
- Tiene una capa de abstracción de recursos con muchas posibilidades.
- Curva de aprendizaje rápida.
- Instalación fácil.
- Muy potente.
- Usado por muchas y grandes empresas.
En contra:
- Necesita la instalación y mantenimiento de elementos especiales además del agente (rubi).
- Tiempo de realización de las tareas alto.
- Uso de recursos del sistema alto.
CFEngine. Ahora vamos con CFEngine.
1.- Descripción breve
Al igual que Puppet el objetivo es la administración remota centralizada y automática de gran cantidad se servidores para descargar a los administradores de sistemas de las tareas rutinarias y que no aportan valor a su trabajo. El proyecto lo inició, en 1993, Mark Burgess, siendo la última versión estable la 3.3.3 de mayo de 2012. Es software libre con licencia GPLv3.
2.- Instalación
Instalar CFEngine 3 requiere realizar una serie de pasos previos antes de la instalación en sí. Primero instalaremos las dependencias:
- $ sudo yum install db4-devel
- $ sudo yum install byacc
- $ sudo yum install openssl-devel
- $ sudo yum install flex
- $ sudo yum install gcc
Y después pasamos a instalar el producto:
- # wget http://cfengine.com/source-code/download?file=cfengine-3.3.3.tar.gz
- # tar zxvf cfengine-3.3.3.tar.gz
- # cd cfengine-3.3.3
- # ./configure && make && make install && cp /usr/local/sbin/cf-* /var/cfengine/bin
3.- Capacidades
Principalmente administra y gestiona:
- ficheros de configuración,
- puntos de montaje,
- procesos del cron,
- paquetes.
4.- Características
Utiliza arquitectura cliente-servidor, los cambios que se realizan en el servidor se propagan a los clientes, incluso si están apagados en el momento de la actuación, al arrancar verían que su nivel de configuración es menor y solicitarían la actualización al servidor.
5.- Motivos de elección frente a otras herramientas similares.
A favor:
- Madurez (desde 1993).
- No es necesario instalar y mantener elementos especiales además del agente.
- Uso de recursos del sistema bajo.
- Tiempo de realización de las tareas bajo.
- Muy potente.
- Usado por muchas y grandes empresas.
En contra:
- Sintaxis compleja.
- No tiene capa de abstracción de recursos.
- Complejidad de interpretación.
- Poca flexibilidad.
- Curva de aprendizaje lenta.
- Instalación un poco más compleja que Puppet.
Conclusiones
Vistos los datos anteriores, es difícil decidirse por uno de ellos ya que sus características y funcionalidades son similares, sin embargo cómo tengo que decidir qué instalar, mi opción ha sido CFEngine, que aunque tiene una curva de aprendizaje más lenta y una complejidad mayor que Puppet el uso de recursos del sistema es muy bajo y la realización de las tareas es muy rápida. Los administradores como queremos saber siempre el estado en el que están nuestros servidores, normalmente los cargamos con muchas tareas de monitorización que en algún caso que me ha pasado acaban comiéndose a la máquina, por eso, si la monitorización es buena y no carga al equipo es la opción mejor para mi, claro está que otros administradores o responsables del área de sistemas tendrán otras opiniones pero esta es la mía.
Hasta otra …
Referencias
- Puppet Labs. Introduction to Puppet. Web oficial de Puppet.
- Puppet and CFEngine compared: time and resource consumption. Jarle Bjorgeengen.
- Gestión centralizada de equipos. Irontec (Internet y Sistemas sobre GNU/Linux).
- CFengine. Why cfengine? Sitio official de CFEngine.
- Foro nixCraft. Linux/UNIX Tech Support Forum. CFengine Questions.
- Security Monitoring and Enforcement with Cfengine 3. Linux Journal. May 2011.
- Ejemplo práctico Cfengine: Actualización masiva de PHP.
- Puppet Camps.