You are on page 1of 31

Administracin centralizada con Puppet

Cuando las marionetas son cosa de grandes

UNNOBA Javier Brtoli <javier@netmanagers.com.ar>

Qu veremos

Problemas comunes de un (sys|net)admin Cmo trata de resolverlos Puppet Ejemplos de aplicacin Temas para seguir estudiando

Problemas comunes de un (sys|net)admin


Scripts personalizados

Distintas versiones del mismo archivo. Poca portabilidad entre instalaciones:

Entre distintos sistemas operativos Entre distintas versiones del mismo sistema operativo Cambio de criterio en el tiempo.

Problemas comunes de un (sys|net)admin


Gestin manual del software

Esfuerzo directamente proporcional al nmero de servidores. Tareas repetitivas que tienden a provocar errores.

Problemas comunes de un (sys|net)admin


Configuraciones ad-hoc

Distintos criterios con el paso del tiempo. Difcil implementacin de un nuevo criterio. Diferencia de estilo por cada persona en el equipo. Barrera de entrada alta para nuevos integrantes.

Problemas comunes de un (sys|net)admin


Restauracin bare metal de un servidor

Tenemos backup reciente del sistema operativo? La instalacin es adecuada para el nuevo hardware? Qu cambios / adecuaciones le hicimos cuando lo instalamos? Tiempos de recuperacin y cortes de servicio excesivamente altos.

Problemas comunes de un (sys|net)admin


Restauracin bare metal de N servidores

OUCH!!!! Llevar backups de sistema de N servidores es muy tedioso y costoso. La diferencia real entre los servidores puede ser mnima. Reordenar servicios entre servidores puede ser complejo.

Problemas comunes de un (sys|net)admin


Documentacin

Qu servicios estn activos? Dnde estn instalados esos servicios? Qu particularidades tiene cada sistema instalado? Dnde estn los drivers necesarios? Qu usuarios estn habilitados en cada sistema? Que tan actualizada est la documentacin?

Problemas comunes de un (sys|net)admin


Escalabilidad!

A MAYOR cantidad de servidores MAYOR carga de mantenimiento! Esto no es negocio!

Puppet
Componentes y caractersticas

Es un paso evolutivo al cfengine. Lenguaje declarativo. Estructura Cliente / Servidor. Funcionamiento de tipo pull. Bibliotecas de abstraccin de recursos. Modular. Portable (en la actualidad, entre Un*xes).

Puppet
Esquema de funcionamiento

Puppet
Abstraccin de recursos

Independencia de la implementacin:

providers package user ... subscribe / notify require / before

Pensamiento en alto nivel:


Recursos relacionables entre si:


Puppet
Lenguaje declarativo

Puppet se centra en la administracin de recursos. Se usa para describir el estado de un recurso, y no cmo lograr dicho estado. Evita la superposicin de declaraciones: Un recurso puede ser manejado en un nico lugar. Idempotencia: se obtiene el mismo resultado sin importar las veces que se aplique la configuracin.

Puppet
Tipos de recursos

Usuario (user) Archivo (file) Paquete de software (package) Servicio (service) Tarea peridica (cron) ...

Puppet
Tipos de recursos (cont.)

user

home uid gid groups shell ensure comment

Puppet
Tipos de recursos (cont.)

file

checksum content backup ensure (absent/present , file/directory) user group source mode

Puppet
Tipos de recursos (cont.)

package

ensure (absent, purged, present/installed) responsefile status

Puppet
Tipos de recursos (cont.)

service

ensure (running/stopped) enable (true/false) hasrestart hasstatus

Puppet
Tipos de recursos (cont.)

cron

command user hour minute month weekday

Puppet
Classes

class unix { file { /etc/passwd: owner => root, group => root, mode => 644; /etc/shadow: owner => root, group => root, mode => 440; } }

Estructura que engloba recursos individuales Utilizable una vez por host (ej: un servicio) Soporta jerarqua de herencia

Puppet
Defines

define svn_repo($path) { exec { "/usr/bin/svnadmin create $path/$title": unless => "/bin/test -d $path", } } svn_repo { puppet: path => "/var/svn" }

Como las clases, pero con argumentos. Utilizable en casos parametrizables por host (ej: virtualhosts en apache)

Puppet
Nodes

import classes/* node default { include unix } node webserver1 inherits default { include apache } node nameserver inherits default { include bind }

Como las clases, pero se aplican a los hosts. Se utilizan para asignar clases y definiciones a los clientes. Soportan herencia.

Puppet
Templates

<VirtualHost *> ServerAdmin <%= admin %> DocumentRoot <%= docroot %> ServerName <%= domain %> </VirtualHost>

Permiten simplificar configuraciones similares entre distintos nodos. Utilizan la potencia del lenguaje ruby. El servidor itera sobre este archivo antes de enviarlo al cliente.

Puppet
Otras caractersticas

Selectores If / then Case Funciones Variables / Arrays Facts

Puppet
Ejemplos
Configurar vim como editor preferido
class vim { package { vim: ensure => present, } exec { update-alternatives set editor /usr/bin/vim.basic: path => /bin:/usr/bin, unless => ls -al /etc/alternatives/editor | grep vim.basic, } }

Puppet
Ejemplos
Deshabilitar login de root en sshd
class norootssh { package { openssh-server: ensure => present } service { ssh: require => Package[openssh-server], ensure => running } exec { perl -pi -e 's/^PermitRootLogin yes$/PermitRootLogin no/' /etc/ssh/sshd_config: path => /bin:/usr/bin:/sbin:/usr/sbin, unless => grep 'PermitRootLogin no' /etc/ssh/sshd_config, notify => Service[ssh] } }

Puppet
Ejemplos
Virtualhosts de apache
define vhost ( $domain, $admin, $docroot, $enable = true ) { $vhpath = /etc/apache/conf.d/$domain.conf file { $vhpath: notify => Service[apache], require => File[$docroot], ensure => $enable ? { true => present, false => absent }, content => template(vhost.erb), owner => root, group => root, mode => 640, } file { $docroot: ensure => $enable ? { true => directory, false => absent } }

Puppet
Ejemplos
Template: vhost.erb
<VirtualHost *> ServerAdmin <%= admin %> DocumentRoot <%= docroot %> ServerName <%= domain %> </VirtualHost>

Uso en una clase


vhost { mi_sitio: domain => intranet, admin => webmaster@$domain, docroot => /srv/$name, enable => true }

sto no termina ac!

Reportes Grficas Extensibilidad


Funciones Providers Facts

Enlaces para seguir investigando

http://www.linux-mag.com/id/4141/ http://reductivelabs.com/trac/puppet/wiki/Docume ntationStart http://people.redhat.com/dlutter/puppet-app.html http://www.infrastructure.org

Administracin centralizada con Puppet


Agradecimientos

UNNOBA (por invitarme una vez ms) Lucas Di Pntima (por permitirme usar su presentacin como... ejem... plantilla :) Uds. (por aguantarme :)

UNNOBA Javier Brtoli <javier@netmanagers.com.ar>

You might also like