Puppet permite hacer despliegues de máquinas de manera sencilla, rápida y desatendida. Para que todo fluya hay que configurar el entorno, mejor si es con un Master donde centralicemos todos los scripts, ejecutables, imágenes… Y crear los scripts que necesitemos, teniendo mucho cuidado en el desarrollo, pues puede originar graves problemas en entornos productivos.
Aquí voy a ir reuniendo todo lo que vaya practicando y aprendiendo, tanto buenos resultados ‘de libro’ como los errores, para no repetirlos. Hablaré en primera persona casi todo el tiempo, pero a veces se me va l pinza y hablo en plural porque es como si estuviera con vosotros haciendo todo esto.
Pongámonos en situación. Todo surge para evitar hacer las cosas como venía haciéndolas, virtualizar está muy bien para entornos de desarrollo y producción, pero el manejo de las imágenes, los inventarios, dejar dos máquinas idénticas para tener entornos 100% controlados… supone hilar muy fino y trabajar muy escrupulosamente cuando ya tienes algo desplegado. Buscando encontré que otros sysadmin del mundo DevOps ya trabajaban en otro siglo muy superior al mío. Me descubrieron Puppet y Chef, similares, había que apostar por alguno, venga pues Puppet. Y ya metidos, la última versión, la 3. Y como las charlas, conferencias, consultas de foros y listas de correos te pican, pues te haces con un libro, el Puppet 3 Beginner’s Guide que te lo cuenta todo desde cero. Perfecto. Pues manos a la obra.
Todo lo que voy a ir contando será desplegado y desarrollado sobre CentOS 6.4. Parto de un sistema instalado, con las DNS configuradas o al menos con el fichero hosts configurado para resolver los nombres de las máquinas que vayamos montando.
Para empezar, solo tendremos el Master. El PuppetMaster será nuestro repositorio de imágenes, manifiestos y todo lo que necesitemos distribuir. Por ahora un CentOS 6.4 de 20GB e disco nos va a sobrar, ya habrá tiempo de crecer.
- Configuración de red y hostname del equipo
- Añadir el repositorio EPEL (Extra Packages for Enterprise Linux)
- Actualizar repositorios y actualizar el equipo
- Instalar Puppet 3
Configuro el hostname del equipo y lo añado al hosts local
# hostname puppetmaster.local # sudo vi /etc/hosts 127.0.0.1 puppetmaster.local
Añadir el repositorio EPEL para CentOS 6
# sudo rpm -ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm
Descomprimir e instalar el paquete RPM
# rpm -ivh epel-release-6-8.noarch.rpm
Añadir la llave GPG del paquete. En este paso habría que descargarse un fichero con la llave pública con wget:
# wget https://fedoraproject.org/static/0608B895.txt
Pero me da error, así que en un navegador, abro la url y guardo el fichero txt a local, y se lo copio al puppetmaster por SSH
# scp 0608B895.txt root@puppetmaster.local:~/
Mover el fichero
# mv 0608B895.txt /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Importar la nueva llave
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Verificar que se ha añadido bien
# rpm -qa gpg* gpg-pubkey-0608b895-4bd22942
Verificar la lista de repositorios
# yum repolist Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile * base: centos.mirror.xtratelecom.es * epel: mirror.uv.es * extras: distrib-coffee.ipsl.jussieu.fr * updates: distrib-coffee.ipsl.jussieu.fr repo id repo name status base CentOS-6 - Base 6.381 epel Extra Packages for Enterprise Linux 6 - x86_64 9.172 extras CentOS-6 - Extras 12 puppetlabs-deps Puppet Labs Dependencies El 6 - x86_64 48 puppetlabs-products Puppet Labs Products El 6 - x86_64 281 updates CentOS-6 - Updates 647 repolist: 16.541
En este punto que tengo la lista de paquetes actualizada lanzo una actualización de paquetes del sistema
# yum update
Bien pues ahora, por fin, instalamos Puppet 3
# yum install puppet-server
que nos instala las dependencias del agente Puppet, Facter, Hiera y Ruby.
Una vez acabada la instalación se crea el fichero /etc/init.d/puppetmaster para arrancar el demonio del agente de Puppet. Para verificar que todo ha sido correcto podemos comprobar que nos devuelve la versión instalada:
# puppet --version
3.2.2
En otro mensaje continuaré con la introducción a los conceptos de los manifiestos Puppet, los recursos, nombres y atributos. Con la estructura de directorios, los nodos, paquetes, módulos… El viaje solo acaba de comenzar.