Presentación charla puppet madrid devops 2012
-
Upload
jorge-moratilla-porras -
Category
Software
-
view
173 -
download
0
Transcript of Presentación charla puppet madrid devops 2012
![Page 1: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/1.jpg)
Gestión de la Configuración con
- Puppet -
@jmoratilla @ricbartm@madrid_devops
![Page 2: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/2.jpg)
Indice
Introducción> Qué es puppet?> Cómo lo hace?
Componentes> Lenguaje> Puppet client> Puppet Master
Puppet @ abstraPuppet @ tuenti
@jmoratilla @ricbartm
Ponentes
![Page 3: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/3.jpg)
![Page 4: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/4.jpg)
Qué es puppet?
-- Sistema de gestión de la configuración++ claaaroo... ¿Y eso para qué sirve?-- Sirve para configurar y mantener un grupo de máquinas, todas iguales, de forma fácil y sencilla.++ Ya! y algo más?-- Permite actualizar automáticamente la configuración de las máquinas, y auditarlas.++ Ok.
![Page 5: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/5.jpg)
Por qué puppet?
Consistencia y flexibilidad
● La configuración manual no es recomendable. Errores humanos.
● Las "Golden Images" son un quebradero de cabeza.
![Page 6: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/6.jpg)
Por qué puppet?
Consistencia y flexibilidad
● La configuración y el mantenimiento se realiza desde un control central.
● Permite reproducir configuraciones completas en caso de desastre (10th floor test).
![Page 7: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/7.jpg)
Por qué puppet?
Consistencia y flexibilidad
● Roles, clases y nodos: misma definición, misma configuración, o no ;)
● Un agente corre cada 30 minutos: cada 30 minutos se comprueba que todo está en su sitio, y si no, se vuelve a poner en su sitio.
![Page 8: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/8.jpg)
Por qué puppet?
Operativa
● La curva de aprendizaje y el <grin> "Time To Market" </grin> son muy cortos.
● Toda la lógica de configuración bajo Puppet: permite que cualquiera lo lea y entienda sin tener que indagar.
● No más páginas horribles explicando cómo configurar algo. Céntrate en el servicio en sí.
![Page 9: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/9.jpg)
Por qué puppet?
Portabilidad
● La configuración, al ser reproducible, permite llevar el servicio a una nube privada, pública, o a un entorno de pruebas aislado con facilidad.
● Si los módulos están bien escritos, no debería importar mucho si se trata de Debian, Ubuntu, CentOS o RHEL.
![Page 10: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/10.jpg)
Cómo lo hace?
Tecnología
● Basado en lenguaje ruby.● Utiliza un lenguaje específico de dominio
(DSL) orientado a "recursos"Recursos? Comandos, Usuarios, Ficheros, Paquetes de software, Servicios, Configuraciones específicas, etc.
![Page 11: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/11.jpg)
Cómo lo hace?
La práctica: Stand Alone (puppet apply)● El programa (agente) accede a unos ficheros de
definición (.pp)
● Verifica si el estado de los recursos indicados en el fichero coinciden con la situación actual.
● Si todo es correcto, aplica los cambios hasta coincidir con lo indicado en el fichero de definición.
nodo
SCM
init.pp
BinariosFuentes
![Page 12: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/12.jpg)
Cómo lo hace?
La práctica: Servidor (puppetmaster)● El cliente (agente) conecta al master y le envía
información de sí mismo. Parte de esa información podría ser reutilizada para generar el catálogo (IP, hostname, etc).
● El master compila un catálogo a medida para el nodo.
● Una vez el nodo dispone del catálogo éste se aplica localmente llegando hasta el estado deseado.
● Puppet Master tiene su propia interfaz para descarga de ficheros.
puppetmaster
SCM
init.pp
BinariosFuentes
BinariosFuentes
nodonodo
nodo
Otros
![Page 13: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/13.jpg)
![Page 14: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/14.jpg)
Componentes de la infraestructura de Puppet
![Page 15: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/15.jpg)
Componentes de puppet
Lenguaje Facter Puppet agent
Puppet Master
ConsolasExternal
Node Classifiers
Store Configs
Marionette Collective
Nivel fácil
Nivel Intermedio
Nivel Avanzado Nivel Experto
![Page 16: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/16.jpg)
El DSL de Puppet
![Page 17: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/17.jpg)
Lenguaje: Definición de Recursos
Recursos: elementos de un sistema operativo
FileDirectoryLink
Mount Points
UsersGroupsHosts Packages ...
Tipos Nombres Parámetros
![Page 18: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/18.jpg)
Recursosfile { "/etc/hosts":
ensure => present,
owner => root,
group => root,
mode => 0644
}
package {
"openjdk-6-jdk":
ensure => present,
provider => apt,
}
user {
"scarter":
ensure => present,
uid => 1000,
gid => 1000,
managehome => true,
"operator":
ensure => absent,
}
cron { "logrotate":
command => "/usr/sbin/logrotate",
user => root,
hour => ['2-4'],
minute => '*/10'
}
![Page 19: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/19.jpg)
Recursos: Paquetes y versionespackage { "openjdk-6-jdk": ensure => "present", provider => apt,}
package { "openjdk-6-jdk": ensure => "6b22-1.10.6-0ubuntu1", provider => apt,}
package { "openjdk-6-jdk": ensure => "latest", provider => apt,}
Instalar ....
.... esta versión ...
.... o ir a la última!
![Page 20: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/20.jpg)
Recursos: Tipos y Proveedoresservice {
"mongodb":
ensure => running,
provider => debian,
}
type: service
parameters: {name, path,ensure, enable, hasrestart,hasstatus,pattern, ...}
providers: { base, bsd, daemontoolsdebian, freebsd, gentooinit, launchd, redhatrunit, smf, src, ...}
![Page 21: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/21.jpg)
Recursos: GenéricosSirven tanto para un roto...
exec { "install glassfish":require => [Package["unzip"],User["glassfish"],File["upload
glassfish"]],command => "unzip /var/tmp/glassfish-3.1.1.zip",cwd => "/opt",user => "glassfish",creates => "/opt/glassfish3",path => ['/bin','/usr/bin','/usr/sbin']
}
![Page 22: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/22.jpg)
Recursos: Genéricos... como para un descosido
exec { "add jdbc-connection-pool":require => File["/opt/glassfish3/glassfish/lib"],command => "asadmin create-jdbc-connection-pool \
--datasourceclassname com.mysql.jdbc.jdbc2.optional.MysqlDataSource \--restype javax.sql.DataSource--property User=glassfish:Password=$mysql_password:\
Url=\"jdbc:mysql://localhost:3306/test\":\ZeroDateTimeBehavior=convertToNull DataChannelPool",
path => "/opt/glassfish3/bin",}
exec { "add jdbc-resource":require => Exec["add jdbc-connection-pool"],command => "asadmin create-jdbc-resource \
--connectionpoolid JotadebecePool jdbc/data",path => "/opt/glassfish3/bin",
}
![Page 23: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/23.jpg)
Variables, Facts, Condiciones y
Parámetros
![Page 24: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/24.jpg)
VariablesVariables personalizadas definidas en los manifests
Relativa$version = "3.1.1"
Global (concepto: 'namespaces' y 'namespace raíz' $::)$::version = "3.1.1"
De clase (namespace = clase::subclase::variable)$glassfish::params::version = "3.1.1"
External lookups Son siempre personalizados. Permiten definir los valores de una
variable personalizada consultando datos externos (un CSV, MySQL, etc).
Variables de sistema (obtenidas mediante facter, siempre globales)$hostname, $architecture, $memorysize, $memoryfree,...
![Page 25: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/25.jpg)
VariablesPersonalizadas
$openfire = "openfire_3_7_1.tar.gz"
file { "/var/tmp/$openfire":ensure => present,owner => "root",group => "root",mode => 644,source => "puppet:///modules/openfire/$openfire"
}
![Page 26: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/26.jpg)
FactsDe sistema
Afirmación: "kernelversion es un fact"
facter: programa auxiliar que recolecta y muestra información (facts) relativa al sistema.
Ej: facter kernelversion2.6.32
Puppet accede a estas variables (facts) para usarlas en las definiciones, como valores para asignar o para usarlas en las condiciones de puppet. Los facts pueden extenderse creando tus propios ... "custom facts".
![Page 27: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/27.jpg)
CondicionesSentencia if-elsif-else:
if condición { bloque } elsif condición { bloque } else { bloque }
if ($hostname == "calypso") {file{ "/home/user/.m2/settings.xml":
require => File["/home/user/.m2"],ensure => "present",mode => "644",source => "puppet:///modules/maven/settings.xml";
}}
![Page 28: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/28.jpg)
CondicionesSentencia case:
case variable {valor1: { bloque }valor2: { bloque }
}
case $architecture {x86_64,amd64: {
$arch = 'x64'}i386,i486,i586,i686: {
$arch = 'i586'}
}
![Page 29: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/29.jpg)
CondicionesSentencia selector:
$variable = $fact ? {valor1 => 'y',valor2 => 'z',default => 'x',
}
$arch = $architecture ? {x86_64,amd64 => 'x64',i386,i486,i586,i686 => 'i586',default => 'noarch',}
}
![Page 30: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/30.jpg)
ParámetrosTe permiten diseñar módulos genericos que sirven para diferentes tipos de servidor sin harcodear hostnames dentro de los manifests. Un ejemplo de cómo NO hacerlo:
class sysctl {case $hostname ? {
'database1.localdomain': {file { "/etc/sysctl.conf":
source => "puppet:///sysctl/etc/sysctl.conf.database",}
}}
}node database1.localdomain { include sysctl }
![Page 31: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/31.jpg)
ParámetrosUna forma más limpia de hacerlo (no me atrevo a decir que la correcta):
class sysctl ( $server_role = 'default' ) {file { "/etc/sysctl.conf":
source => "puppet:///sysctl/etc/sysctl.conf.$server_role",}
}
node database1.localdomain {class { 'sysctl': server_role => 'database' }
}node frontend1.localdomain {
class { 'sysctl': server_role => 'frontend' }}
![Page 32: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/32.jpg)
Nodos, Clases y Módulos
![Page 33: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/33.jpg)
NodosPuppet describe la configuración de un nodo, definiendo los recursos y sus parámetros, en ficheros llamadosmanifiestos (manifests o ficheros*.pp).
Un nodo se referencia por ...
● un nombre estático
'bm.ovh.net'
● una expresión regular
/^bm\..*$/
node '*.ovh.net' {
user { 'paquito':ensure => present,uid => 2000,gid => 2000,home => '/home/paquito',managehome => true,shell => '/bin/zsh',require => [Package['zsh'],Group['fulanito']],
}
group { 'fulanito':ensure => present,gid => 2000,
}
package { 'zsh':ensure => present,
}}
![Page 34: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/34.jpg)
Nodos
En un nodo puede definirse toda la configuración que necesite esa máquina.
No es lo más elegante, pero funciona.
Si quieres hacerlo elegante y mantenible, necesitarás definir roles y trabajar con diferentes clases.
![Page 35: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/35.jpg)
Clasesnode '*.ovh.net' {
user { 'paquito':ensure => present,uid => 2000,gid => 2000,home => '/home/paquito',managehome => true,shell => '/bin/zsh',require => [Package['zsh'],Group['fulanito']],
}
group { 'fulanito':ensure => present,gid => 2000,
}
package { 'zsh':ensure => present,
}}
class usuarios {user { 'paquito':
ensure => present,uid => 2000,gid => 2000,home => '/home/paquito',managehome => true,shell => '/bin/zsh',require => [Package['zsh'],Group['fulanito']],
}group { 'fulanito':
ensure => present,gid => 2000,
}}class zsh {
package { 'zsh':ensure => present,
}}node '*.ovh.net' {
include usuarios, zsh}
![Page 36: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/36.jpg)
Clases
Las clases sólo definen lo que debe llevar el sistema, para complementar estas definiciones, se necesitan ficheros, binarios, scripts, etc.
Para estructurar una clase y sus herramientas auxiliares se definen los módulos.
![Page 37: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/37.jpg)
Módulos
Puppet define módulos como: "re-usable bundles of code and data"
Contienen clases, binarios, imágenes, scripts, tests, incluso código adicional para extender las funcionalidades de puppet.
![Page 38: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/38.jpg)
Módulos
/etc/puppet/ manifests/ site.pp <== Definiciones Generales nodes.pp <== Definiciones de Nodos modules/ foo/ manifests/ init.pp <== Definición de la Clase foo.pp <== SubClase (foo::foo)
files/ foo.jar <== Ficheroslib/
facter/foo.rb <== "facts" personalizados
lib/puppet/
foo.rb <== Extensión de Puppet
![Page 39: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/39.jpg)
Relaciones de Orden
![Page 40: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/40.jpg)
Relaciones entre recursos
Puppet es declarativo, lo que importa es el final. El orden es cuestión de relaciones entre recursos, no de posición en un fichero de manifest.
Es responsabilidad nuestra establecer las relaciones entre recursos y controlar el orden de ejecución.
![Page 41: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/41.jpg)
Referencias a Recursos
Relaciones entre recursos
Recurso Referencia y Genéricos
user User
file File
package Package
exec Exec
... ...
![Page 42: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/42.jpg)
Relaciones entre recursos
before (antes) y require (después)notify (publisher) y subscribe (subscriber)
File before ExecExec require FileFile notify ExecExec subscribe File
![Page 43: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/43.jpg)
Relaciones entre recursosEjemplo del fichero modules/sysctl/manifests/init.pp donde desplegamos un fichero y solo si este cambia se ejecuta un comando.
class sysctl ( $server_role = 'default' ) {file { "/etc/sysctl.conf":
source => "puppet:///sysctl/etc/sysctl.conf.$server_role",}exec { "reload_sysctl":
command => "/sbin/sysctl -p",refreshonly => true,returns => [ 0,255 ],subscribe => File["/etc/sysctl.conf"],require => File["/etc/sysctl.conf"],
}}
Cuando una condición hace que algo no se evalúe siempre, no podemos hacer un Require de ello, sino un Before desde ello.
![Page 44: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/44.jpg)
Relaciones entre recursosEjemplo del fichero modules/sysctl/manifests/init.pp donde desplegamos un fichero y solo si este cambia se ejecuta un comando.
class sysctl ( $server_role = 'default' ) {file { "/etc/sysctl.conf":
source => "puppet:///sysctl/etc/sysctl.conf.$server_role",notify => File["/etc/sysctl.conf"],
}exec { "reload_sysctl":
command => "/sbin/sysctl -p",refreshonly => true,returns => [ 0,255 ],require => File["/etc/sysctl.conf"],
}}
Cuando una condición hace que algo no se evalúe siempre, no podemos hacer un Require de ello, sino un Before desde ello.
![Page 45: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/45.jpg)
Relaciones entre recursosEjemplo del fichero modules/rsync/manifests/server.pp donde algunos ficheros solo se despliegan en sistemas Debian, y han de desplegarse antes de levantar el servicio.
class rsync ( $server_role = 'default' ) {case $operatingsystem {
Debian: {file { "$rsync_default_config":
content => template("rsync/etc/default/rsync.erb.$server_role"),
notify => Service["$rsync"],before => Service["$rsync"],
}}
}
![Page 46: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/46.jpg)
Relaciones entre recursos
Podemos crear stages que funcionan como containers para tener un arbol de dependencias más limpio.
stage { "boot": before => Stage["os"] }stage { "service": }stage { "os": before => Stage["service"] }stage { "online": require => Stage["service"] }
class { 'apt': stage => 'boot' }class { 'rsyslog': stage => 'os' }class { 'zabbix': stage => 'os' }class { 'nginx': conf_role => 'default', vhost_role => 'f00', stage => 'service'}
![Page 47: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/47.jpg)
Enough!Vamos a por la chicha
( y sí, nos saltamos los templates )
![Page 48: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/48.jpg)
Componentes de puppet
Lenguaje Facter Puppet agent
Puppet Master
ConsolasExternal
Node Classifiers
Store Configs
Marionette Collective
Nivel fácil
Nivel Intermedio
Nivel Avanzado Nivel Experto
![Page 49: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/49.jpg)
Primeros pasos con Puppet
Instalación y práctica
![Page 50: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/50.jpg)
Instalación
Por paquetería# apt-get install puppet # yum install puppet
Verificar las versiones de puppet (2.7.x recomendado)
También se puede descargar el código fuente. Mejor leer la documentación para ello.
![Page 51: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/51.jpg)
Uso: Primeros pasos
# facter
![Page 52: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/52.jpg)
Uso: Primeros pasos
# puppet help
![Page 53: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/53.jpg)
Uso: Primeros pasos
# puppet describe [-h] [-l] [-p]
![Page 54: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/54.jpg)
Uso: Primeros pasos
# puppet resource user root
# pupet resource user
# puppet resource package
# puppet resource service
![Page 55: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/55.jpg)
Uso: Primeros pasos
# puppet resource package zsh ensure=latest
# puppet resource user paquito ensure=present managehome=true shell=/bin/zsh
![Page 56: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/56.jpg)
Uso: Primeros pasos# vi init.ppnode 'bm.ovh.net' { user { 'paquito': ensure => present, uid => 2000, gid => 2000, home => '/home/paquito', managehome => true, shell => '/bin/zsh', require => [Package['zsh'],Group['fulanito']], } group { 'fulanito': ensure => present, gid => 2000, } package { 'zsh': ensure => present, }}
# puppet apply init.pp
Con esto ya se puede trabajar.
Agrégale un repositorio de código o un servidor de ficheros (SMB o NFS) y una entrada en el crontab, y ya tienes una gestión de la configuración mínima.
![Page 57: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/57.jpg)
Y ahora... Master of Puppets!
![Page 58: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/58.jpg)
![Page 59: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/59.jpg)
Componentes de puppet
Lenguaje Facter Puppet agent
Puppet Master
ConsolasExternal
Node Classifiers
Store Configs
Marionette Collective
Nivel fácil
Nivel Intermedio
Nivel Avanzado Nivel Experto
![Page 60: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/60.jpg)
Puppet Master
● Compila el catálogo y parsea las templates para los nodos.
● Ofrece una PKI completa para emitir certificados SSL a los nodos. Gestiona su autenticación.
● Habilita la transferencia y backup de ficheros (puppet:/// y filebucket)
![Page 61: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/61.jpg)
Puppet Master
● Suele ser el encargado de servir los ficheros a los agentes.
● Suele ser el encargado de recibir y procesar informes de los nodos.
● Se recomienda utilizar Passenger con NGiNX o Apache y a ser posible Ruby Enterprise para un mejor rendimiento.
![Page 62: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/62.jpg)
Cómo funciona el puppet master?
A nivel plataforma es una aplicación web (puerto HTTP 8140) con autenticación SSL de cliente.
Puppetmaster corre sobre Webrick (un servidor web usado en rails), aunque también puede correr sobre {apache|nginx} + (passenger|mongrel).
Al ser web, es ampliamente escalable: sólo tienes que añadir más:
BalanceadoresBalanceadores
Sistemas de ficherosSistemas de
ficherosSistemas de ficheros
BalanceadoresNodos
Nodos
Otros:BBDDLDAP
Otros:BBDDLDAP
![Page 63: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/63.jpg)
Instalación del servidor
Por paquetería
# apt-get install puppetmaster# yum install puppet-server
También se puede descargar el código fuente. Mejor leer la documentación para ello.
![Page 64: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/64.jpg)
Puppet Master: Entornos
Concepto:Entorno es una agrupación de recursos a desplegar en un conjunto de nodos de forma estructural.
● Elemento de la configuración del master
● Permite mantener distintas versiones de recursos en directorios separados
● Permite mantener distintos proyectos separados en el mismo servidor puppet
● Por defecto: production.
● Se aplican con la opción --environment
puppetmaster
[development] [production]
recursov1.2recurso
v1.2
recursov1.2recurso
v1
![Page 65: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/65.jpg)
Puppet Master: CA
Puppet incorpora una CA para reconocer a todos los nodos que gestiona.=> el nombre del nodo se extrae del certificado=> el nodo genera el CSR y puppetmaster firma el certificado=> para que funcione, el cliente y el servidor deben de estar sincronizados (fallo de SSL)=> un nodo no puede cambiar de nombre una vez configurado. (necesita borrado de .pem)=> la CA está basada en openssl y es sencilla
![Page 66: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/66.jpg)
Puppet Master: CA
[nodo]#: puppet agent --test --onetime[puppet]#: puppet cert list [--all][puppet]#: puppet cert sign nodo[nodo]#: puppet agent --test --onetime
![Page 67: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/67.jpg)
Puppet Master: CA
Gestión de la CA
A través de comandos:A) puppet certB) puppetca (es lo mismo, aunque se está deprecando)
![Page 68: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/68.jpg)
Puppet @ abstra·cc
puppet
node1
Mercurialpull
sysadmin
Catalog
run
Apache + Passenger
push
node1node1prod
nodes
node1node1
node1dev nodes
BBDDstoreconfig store
![Page 69: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/69.jpg)
Puppet Master @ abstra·cc
● SCM: mercurial● puppet: pull data from SCM● puppet:
○ CA master○ RDBMS: store config en MySQL
![Page 70: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/70.jpg)
CAInvalidation
CatalogReports
Puppet @ Tuenti
puppet1 (NGINX +
Passenger)
puppet2(NGINX +
Passenger)
HAProxy
node1
SCMpull
sysadmin / developer
pdash1(NGINX +
Passenger)
push
Catalog
run
node1node1
node1node00
![Page 71: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/71.jpg)
Puppet Master @ Tuenti
● SCM: svn, git, mercurial● puppet1/puppet2: hacen pull del SCM.
Ambos atienden peticiones de catálogo. Podemos utilizar cuantos queramos.
● puppet1: CA master. los certificados son preferiblemente emitidos por ella y replicados a otros masters.
● puppet1: servicio de invalidación de CA, igual que el anterior.
● pdash1: reports (interfaz web y trabajos batch)
![Page 72: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/72.jpg)
Y hasta aquí por hoy...Nos quedan todavía muchas cosas que
contar, pero vendrán más adelante.
![Page 73: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/73.jpg)
Para la próxima charla/taller
Cosas que nos gustaría ver.
![Page 74: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/74.jpg)
Componentes de puppet
Lenguaje Facter Puppet agent
Puppet Master
ConsolasExternal
Node Classifiers
Store Configs
Marionette Collective
Nivel fácil
Nivel Intermedio
Nivel Avanzado Nivel Experto
![Page 75: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/75.jpg)
Componentes de puppet
Lenguaje Facter Puppet agent
Puppet Master
ConsolasExternal
Node Classifiers
Store Configs
Marionette Collective
Nivel fácil
Nivel Intermedio
Nivel Avanzado Nivel Experto
![Page 76: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/76.jpg)
Componentes de puppet
Lenguaje Facter Puppet agent
Puppet Master
ConsolasExternal
Node Classifiers
Store Configs
Marionette Collective
Nivel fácil
Nivel Intermedio
Nivel Avanzado Nivel Experto
![Page 77: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/77.jpg)
ReferenciasLibros
EnlacesMultimedia
![Page 78: Presentación charla puppet madrid devops 2012](https://reader031.fdocuments.net/reader031/viewer/2022020314/58a1a8e61a28abe6468b5d4d/html5/thumbnails/78.jpg)
Referencias
● [URL] Puppet Labs: http://docs.puppetlabs.com/
○ puppet.pdf y learning puppet vm
● [Libro] Pro Puppet: http://goo.gl/j2yat
● [Grupos] Puppet users: http://groups.google.com/group/puppet-users
● [Presentación] PyCon2011: http://rcrowley.org/talks/pycon-2011/
● [Presentación] Extending Puppet: http://rcrowley.org/talks/sv-puppet-2011-01-11
● [Utilidad] Gepetto: https://github.com/cloudsmith/geppetto