1 D.C. Administration w/ Puppet ( Happy SysAdmin w/ Puppet)
2 Happy SysAdmin w/ Puppet Tony García [email protected] www.tonyskapunk.net
3 Que es Puppet? FOSS, Software Libre [1] y Gratuito [2], Distribuido bajo GPLv2. Puppet es una plataforma escrita en ruby enfocado en automatización y configuración de sistemas. Utiliza un Lenguaje Declarativo que hace que sea sencillo de aprender y esta pensado para "describir" la configuracion de uno o varios sistemas. [1] Codigo disponible en github. [2] A partir del primero de Febrero de 2011 se anuncio una version Empresarial la cual tiene un costo.
4 Quién esta detras de Puppet? La compañia privada Puppet Labs, antes conocida como Reductive Labs, localizadas en Portland OR. Fundada en 2005 por el actual CEO Luke Kanies
5 En qué plataformas o sistemas operativos se puede utilizar? En prácticamente todo lo que soporte ruby. Linux(Debian, RedHat), BSDs, MAC, Unix(HPUX, AIX, Solaris), Windoze.
6 Breve historia de Puppet... Luke Kanies fundador y CEO de la compañia es graduado de la Universidad de Reed en Portland, OR, tiene una Ingenieria en Quimica, trabajo varios años como Unix SysAdmin y con el paso de los años se dio cuenta de que mantener multiples nodos en diferentes Data Centers de manera manual era tonto e innecesario, empezó a considerar la opcion de trabajar de una manera proactiva más que reactiva, esto a principios de 2000, En 2001 gracias a LISA(Large Installation System Administrator) conocio al autor de ISconf, una herramienta que ayuda a automatizar instalaciones, asegurandose de seguir el mismo orden de pasos para tratar de llegar a un estado consistente, esta idea le parecio muy interesante e incluso participo en codigo de ISconf, con el paso del tiempo se dio cuenta de las limitaciones de esta herramienta pero fue una gran influencia para Luke. Poco tiempo despues fue el turno de Cfengine una herramienta de administración de sistemas, en el cual el orden no lo es todo como en el caso de ISConf, aqui lo interesante fue la mezcla de los dos sistemas para llevar a cabo su cometido " Administrar Sistemas ", en donde el resultado final fue terminar usando Cfengine pero esto lo ayudo a darse cuenta de la falta de control en actividades a nivel de OS como control de usuarios, paquetes entre otros, ademas de tener una gran dificultad al manejar diferentes tipos de plataformas. Ante esta situacion y la falta de desarrolladores en Cfengine en 2004 decidio hacer un fork del proyecto y llamarlo cnfg, el cual no sobrevivio por mucho tiempo, con todas estas ideas Luke decidio crear un pequeño prototipo que las mantendria vivas llamandolo Blink. Despues de algún tiempo y tratar de compartir sus ideas y encontrar la solución perfecta, sin que nadie lo tomara mucho en cuenta, decidio continuar con su prototipo y empezar con las ideas básicas que hoy Puppet tiene, Luke siendo un desarrollador de Perl se dio cuenta de las limitaciones que enfrentaría, Python era la otra opcion viable pero no era lo suyo, un amigo recomendo Ruby y decidio darse una oportunidad, en cuestion de horas pudo finalmente tener un prototipo funcional y como él mismo lo dice nunca se ha arrepentido de esta decision. En Marzo de 2005 despues de varios problemas economicos y laborales, Luke decidio fundar Reductive Labs, cambio el nombre de Blink a Puppet y asi fue como nacio la empresa; el dominio reductivelabs.com fue registrada el 24 de Febrero de 2005.
7 Breve historia de Puppet.... 2006- ??? 2007 19 Marzo 2007 - 0.22.2 (grover) 29 Enero 2007 - 0.22.1 (kermit) 18 Junio 2007 - 0.23.0 (fozzie) 20 Julio 2007 - 0.23.1 (beaker) 13 Diciembre 2007 - 0.24.0 (misspiggy) 2008 Enero 2008 - Pulling Strings with Puppet James Turnbull 7 Julio 2008 - 0.24.5 (scooter) 22 Octubre 2008 - 0.24.6 (camila) 15 Diciembre 2008 - 0.24.7 (gonzo)
8 Breve Extensa historia de Puppet.... 2009 28 Febrero 2009 - 0.24.8 (beauregard) 2010 4 Septiembre 2009 - 0.25.0 (elmo) 1 Septiembre 2009 - 0.25.1 (zoot) 8 Diciembre 2009 - Puppet Dashboard 1 Enero 2010 - Puppet Docs 24 Marzo 2010 4 Enero 2010 - 0.25.2 (zoe) 27 Mayo 2010 - Puppet Modules 19 Julio 2010 - 2.6.0 (rowlf)
9 Breve Extensa (Zzz..) historia de Puppet.... 2011 4 Abril 2011 - Puppet Dashbard 1.1.0 2.7.0 (statler) 2.8.0 (telly) Y despues....
10 Cómo funciona Puppet? Cada nodo envia al maestro sus facts, los que son usados para generar un catalogo de recursos que es luego enviado al nodo, compararando el estado actual del sistema y realiza los cambios según sean necesarios para mantener el estado del sistema que le fue predefinido.
11 Que es lo que puede controlar puppet? Servicios Paquetes Archivos Usuarios Grupos Cron Mount(puntos de montajes) Execución de comandos.
12 Que no puede hacer puppet? ● Cosas que no puedas definir como un estado, por ejemplo reiniciar el equipo. ● Tampoco puede controlar aquello que tu no has definido explicitamente, es decir no puedes asumir que puppet va a remover un paquete sólo porque no has definido ese paquete. ● Entonces Puppet sólo puede tener control sobre lo que tu defines.
13 Manos en Puppet....
14
15 ● Obtener Ips de cada equipo y crear entradas para cada uno en /etc/hosts e.g.. 192.168.1.1 puppet.ags.mx 192.168.1.2 centos.ags.mx 192.168.1.3 ubuntu.ags.mx ● Instalar GIT y clonar un repositorio (con repos de yum para instalar Puppet, en el PuppetMaster). # yum install git -y \ mkdir /opt/git/ \ pushd /opt/git \ git clone git://github.com/tonyskapunk/repos.git
16 Copiar repositorios e Instalar Puppet Server en el maestro:. # cp repos/* /etc/yum. # yum install puppet-server ruby-rdoc -y Copiar repositorios e Instalar Puppet en clientes:. CentOS: # cp repos/* /etc/yum. # yum install puppet ruby-rdoc -y Ubuntu: $ sudo apt-get install puppet -y # cp repos/* /etc/yum. # yum install puppet-server ruby-rdoc -y
17 Iniciar el servicio de Puppet.... Mar 30 04:18:38 gnucloud puppet-master[6193]: Signed certificate request for ca Mar 30 04:18:38 gnucloud puppet-master[6193]: Rebuilding inventory file Mar 30 04:18:38 gnucloud puppet-master[6193]: gnucloud.tonyskapunk.net has a waiting certificate request Mar 30 04:18:38 gnucloud puppet-master[6193]: Signed certificate request for gnucloud.tonyskapunk.net Mar 30 04:18:38 gnucloud puppet-master[6193]: Removing file Puppet::SSL::CertificateRequest gnucloud.tonyskapunk.net at '/var/lib/puppet/ssl/ca/requests/gnucloud.tonyskapunk.net.pem' Mar 30 04:18:38 gnucloud puppet-master[6193]: Removing file Puppet::SSL::CertificateRequest gnucloud.tonyskapunk.net at '/var/lib/puppet/ssl/certificate_requests/gnucloud.tonyskapunk.net.pem' Mar 30 04:18:38 gnucloud puppet-master[6204]: Reopening log filesMar 30 04:18:38 gnucloud puppet-master[6204]: Starting Puppet master version 2.6.7
18 SSL.... /var/lib/puppet/ssl /var/lib/puppet/ssl/ca ca_crl.pem ca_crt.pem ca_key.pem ca_pub.pem inventory.txt private requests serial signed /var/lib/puppet/ssl/certs ca.pem gnucloud.tonyskapunk.net.pem /var/lib/puppet/ssl/private_keys gnucloud.tonyskapunk.net.pem /var/lib/puppet/ssl/public_keys gnucloud.tonyskapunk.net.pem puppet cert
19 Configurar Puppet Master con dos ambientes (production, test). 1. Detener puppet master: # service puppetmaster stop 2. Crear en el master: # mkdir -p /opt/puppet/{production,test} 3. Bajar configuracion de prueba del repositorio en github: # pushd /opt/git; git clone git://github.com/tonyskapunk/puppet-flisol.git 4. Copiar configuraciones a ambos ambientes: # cp manifests/* /opt/puppet/production/ -R; cp manifests/* /opt/puppet/test/ -R 5. Cambiar permisos para que puppet pueda leer: # chown puppet:puppet /opt/puppet -R 6. Copiar config de puppet: # cp config/puppet.conf /etc/puppet/ 7. Iniciar puppet master: # service puppetmaster start 8. Iniciar puppet manual: # puppet master --verbose --no-daemonize puppet master
20 Configuración de Puppet.... [main] # The Puppet log directory. # The default value is '$vardir/log'. logdir = /var/log/puppet # Where Puppet PID files are kept. # The default value is '$vardir/run'. rundir = /var/run/puppet # Where SSL certificates are kept. # The default value is '$confdir/ssl'. ssldir = $vardir/ssl [master] # environments environments = production,test # Module Path modulepath = /opt/puppet/production/modules # Manifest Site (default $manifestdir/site.pp) manifest = /opt/puppet/production/site.pp [production] # Module Path modulepath = /opt/puppet/production/modules # Manifest Site (default $manifestdir/site.pp) manifest = /opt/puppet/production/site.pp [test] # Module Path modulepath = /opt/puppet/test/modules # Manifest Site (default $manifestdir/site.pp) manifest = /opt/puppet/test/site.pp [agent] classfile = $vardir/classes.txt
21 Puppet Agent.... puppet agent # puppet agent -t --environment=test notice: foo.bar.com has a waiting certificate request En el maestro ejecutar: # puppet cert -l Firmar el requerimiento: # puppetca -s foo.bar.com notice: Signed certificate request for foo.bar.com notice: Removing file Puppet::SSL::CertificateRequest foo.bar.com at '/var/lib/puppet/ssl/ca/requests/foo.bar.com.pem'
22 Puppet – Lenguaje y Estructura.... http://docs.puppetlabs.com /opt/puppet/test/ classes modules nodes site.pp /opt/puppet/modules/ http load motd motdi modules files manifests templates facts lib/facter
23 Puppet – Modulos y Facts. http load motd motdi modules files manifests templates facts lib/facter
24 Proyectos Relacionados Foreman – http://theforeman.orghttp://theforeman.org Mcollective – http://puppetlabs.com/mcollectivehttp://puppetlabs.com/mcollective
25 Puppet Enterprise: Cuál es la diferencia? ● Provee en un solo paquete facilitando la instalación. (Puppet servidor y agente, Dashboard, Module Tool, Facter, Ruby) ● Contiene paquetes para escalarlo(Apache, Phusion Passenger) ● Soporte con PuppetLabs. ● Precio, varia dependiendo del numero de Nodos: ● 25 Nodos $2,475.00 usd. ● Soporte Premium $26,950.00 usd. ● 2,500 Nodos $185,625.00 usd. ● Soporte Premium $215,950.00 usd.
26 Ventajas de Puppet? ● Estructuración por modulos, permitiendo reusar codigo. ● Provee una capa de transparencia para la administración de equipos, es lo mismo que si es un Debian, que si es un RedHat. ● Sobrecarga de codigo de puppet. ● Creación de tus propios "facts".
27 Mis comentarios de Puppet: Ya sea que se utilicen un par de maquinas o miles de ellas, yo recomiendo puppet por que te permite tener que hacer una configuración otra vez, esto te permite tener mas tiempo para arreglar otras cosas o mejorar otras.
28 Sus comentarios de Puppet ?
29 annA Lee – Por su paciencia, comprensión y apoyo incondicional en lo que creo y quiero, por todo el tiempo invertido en esto. GRACIAS !! @chitopunk – Por su inspiración e introducirme a GNU/Linux. Beto – Por el espacio y apoyo para realizar este evento.
30 Contacto Tony García [email protected] www.tonyskapunk.net
31 http://docs.puppetlabs.com/ http://projects.puppetlabs.com/projects/puppet/wiki/Cheat_Sheets http://projects.puppetlabs.com/projects/puppet/wiki/Documentation_Start http://tmz.fedorapeople.org/repo/puppet/ http://devopscafe.org/show/2010/12/20/episode-17.html http://www.linkedin.com/in/lukekanies http://madstop.com/2008/11/01/a-short-history-of-puppet-pt http://madstop.com/2008/11/06/a-short-puppet-history-pt-2-cfengine http://www.isconf.org http://cfng.tigris.org https://github.com/puppetlabs http://tmz.fedorapeople.org/repo/puppet/epel/puppet.repo http://projects.puppetlabs.com/projects/1/wiki/Downloading_Puppet http://docs.puppetlabs.com/references/latest/type.html Referencias