Está en la página 1de 32

Administración centralizada

con Puppet

Manuel Gómez Gómez


manuelmgg@yaohoo.es
Administrador Informático
Introducción

Problemas al Administrar diferenentes PC


Introducción a Puppet
Instalación Puppet
Ejemplos de Puppet
Bibliografia
Problemas al Administrar Diferentes PC
Ficheros de Configuracción

Distintas versiones del mismo


archivo.
Poca portabilidad entre
instalaciones:
Entre distintos Sisema
Operativos
Entre distintas versiones del
mismo sistema operativo
Cambio de criterio en el tiempo.
Problemas al Administrar Diferentes PC
Gestión manual del software

Tener que hacer por cada


ordenador las mismas
tareas y tener que hacerlo
uno a uno
Perdida de tiempo y
esfuerzo
Problemas al Administrar Diferentes PC
Restauración de N servidores

Llevar N sistema de Backup es


complicado, además de que
siempre son las mismas
operaciones para todos
¿Tenemos backup reciente del
sistema operativo?
¿La instalación es adecuada
para el nuevo hardware?
¿Qué cambios adecuaciones le
hicimos cuando lo instalamos?
Tiempos de recuperación y
cortes de servicio excesivamente
altos
Problemas al Administrar Diferentes PC
¡Escalabilidad!

A MAYOR cantidad de servidores


MAYOR carga de mantenimiento!

Mucho Trabajo y Tiempo perdido


Puppet
Componentes y características

Es un “paso evolutivo” al cfengine.


Lenguaje declarativo.
Estructura Cliente / Servidor.
Funcionamiento de tipo “pull”.
Bibliotecas de abstracción de recursos.
Modular.
Puppet
Esquema de Funcionamiento
Puppet
Abstracción de recursos

Independencia de la implementación:
“providers”
Pensamiento en alto nivel:
“package”
“user”
...
Recursos relacionables entre si:
“subscribe” / “notify”
“require” / “before”
Funcionamiento de Puppet
Componentes y características

Puppet se centra en la administración de


“recursos”.
Se usa para describir el “estado” de un recurso, y
no “cómo” lograr dicho estado.
Evita la “superposición” 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
configuración.
Funcionamiento de Puppet
Tipos de recursos

Usuario (user)
Archivo (file)
Paquete de software
(package)
Servicio (service)
Tarea periódica (cron)
Comandos (exec)
...
Funcionamiento de Puppet
Tipos de recursos (usuario)

User (crea o modifica los usuarios)


Home (Su home)
Uid (El identificador de usuario)
Gid (El identificador de grupo)
Groups (sus grupos)
Shell (el shell a utilizar)
Ensure (Asegurarse )
Comment (Comentario)
Funcionamiento de Puppet
Tipos de recursos (Ficheros)

File (manejo de ficheros)


Checksum (comprobar si es correcto)
Content (contenido)
Backup (copia de seguridad)
ensure (absent/present , file/directory)
User (propietario)
Group (grupo al que pertenece)
Source (de donde se copia)
Mode (propiedades)
Funcionamiento de Puppet
Tipos de recursos (Paquetes)

Package
ensure (absent, purged, present/installed)
Responsefile
Status (Estado)
Funcionamiento de Puppet
Tipos de recursos (Servicios)

Service
ensure (running/stopped) (Arrancar o parar)
enable (true/false) (Activar o no)
Hasrestart
Hasstatus
Funcionamiento de Puppet
Tipos de recursos (Cron)

Cron
Command
User
Hour
Minute
Month
weekday
Instalacción Puppet
Servidor (puppermaster)

# apt-get install puppetmaster


Cuando queramos usar el servidor realmente,
querremos que:
Sirva ficheros que puedan ser copiados en los clientes.
Tener una lista de acciones y clientes en donde
aplicarlas
Instalacción Puppet
Servidor (puppermaster)

Por defecto el servidor de ficheros está


desactivado ”/etc/puppet/fileserver.conf”

[files]
path /etc/puppet/files
allow 172.23.76.0/23

Esto significa que cualquier ordenador de la red


172.23.76.0/23 puede pedir ficheros situados en /
etc/puppet/files en el servidor.
Instalacción Puppet
Servidor (puppermaster)
Fichero de Configuracion: /etc/puppet/puppet.conf
[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
rundir=/var/run/puppet
factpath=$vardir/lib/facter
#certname=puppetinstituto
#pluginsync=true
syslogfacility=
runinterval=10800 # tiempo en consultar con puppet
[puppetmasterd]
ssldir=/var/lib/puppet/ssl
certname=172.23.76.2
templatedir=/var/lib/puppet/templates
autosign=true
Instalacción Puppet
Servidor (puppermaster)

El siguiente paso es crear el esqueleto del fichero


manifest:

root@vain:~# mkdir -p /etc/puppet/manifests/

El fichero que busca puppet es site.pp, así que


crearemos el fichero con el siguiente contenido
Y en crearemos los nodos a los que les
aplicaresmos las reglas
El nodo (node) Default, se ejecuta en todo los
ordenadores
Instalacción Puppet
Cliente(puppet)

El siguiente trabajo es instalar el cliente puppet


en cada ordenador que quieres que sea
controlado.
# apt-get install puppet

Una vez se haya instalado necesitarás configurar


el cliente con el nombre de tu servidor maestro.
Por defecto el cliente intentará buscar el nombre
de host puppet y conectarse a él.
Instalacción Puppet
Cliente(puppet)

Actualiza el fichero /etc/puppet/puppetd.conf para


que quede similar a lo siguiente:

[puppetd]
server =172.23.76.2
logdir = /var/log/puppet
vardir = /var/lib/puppet
rundir = /var/run
Instalacción Puppet
Cliente(puppet)

Para que el cliente se conecte con el servidor, el


servidor tiene que aceptar el certificado que le
envia el cliente.
Nosotros ahora mismo acceptamos todo los
certificados.
Si tubieramos que aceptar los certificados se
haria de la siguiente forma:
puppetca --list
Para aceptar un certificado
puppetca --sign <nombre del nodo o pc>
Programación Puppet
Nodos (node)

Los nodos son los diferentes ordenadores que


vamos a poder administrar.
Hay un nodo principal que todo lo que se ponga
en el se ejecutara en todos los nodos, el nodo se
llama default
Definición de nodo
Puede haber herencia entre nodo ”inherits”
Node default { Node a001-pro {
.. .. .. ..
.. .. .. ..
} }
Programación Puppet
Classes (class)

class unix { Estructura que engloba


file {“/etc/passwd”: recursos individuales
owner => “root”,
Utilizable una vez por
group => “root”, host (ej: un servicio)
mode => 644;
Soporta jerarquía de
“/etc/shadow”:
herencia
owner => “root”,
group => “root”,
mode => 440;
}
}
Programación Puppet
Classes (class)

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)
Programación Puppet
Plantilla (templates)

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

Permite simplificar configuraciones similares


entre nodos
Utilizan la potencia del lenguaje ruby.
El servidor itera sobre este archive antes de enviarlo
al cliente.
Programación Puppet
Otras Caracteristicas

Selectores
If / then
Case
Funciones
Variables / Arrays
Facts
Ejemplos de Puppet
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]
}
}
Ejemplos Puppet
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 }
}
}
Ejemplos Puppet
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
}
Bibliografia

http://www.linux-mag.com/id/4141/
http://reductivelabs.com/trac/puppet/wiki/DocumentationStart
http://people.redhat.com/dlutter/puppet-app.html
http://www.infrastructure.org
Lucas Di Pentima<lucas@di-pentima.com.ar>

También podría gustarte