Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Puppet en HA - BA Tech Talk #1

Puppet en HA - BA Tech Talk #1

Braian Leiva sobre cómo implementar Puppet en HA con AWS.

Avatar for Edrans Social

Edrans Social

August 24, 2017
Tweet

More Decks by Edrans Social

Other Decks in Technology

Transcript

  1. ¿Quién soy? - Braian Fabián Leiva - +5 años como

    Sysadmin/Devops - +3 años trabajando en Edrans en trabajos de infraestructura y automatización utilizando Puppet y AWS.
  2. ¿Qué veremos? Arquitectura cliente/servidor en High Availability (HA) No explicaremos

    código Puppet, sólo lo necesario para entender el aprovisionamiento. No explicaremos los servicios en AWS, sólo lo necesario para entender la infraestructura.
  3. ¿Por qué Puppet? Herramienta de automatización ágil y escalable que

    utilizan grandes compañías como Twitter, Verizon, Cisco, VMware, Sony, SalesForce, entre otras grandes marcas. Edrans partners exclusivos para América Latina y España.
  4. ¿Se puede usar otra cosa? No me gusta Puppet. Si

    obvio, pero nosotros usamos Puppet. Así que esta charla se habla de Puppet.
  5. Arquitectura HA Por un lado tendremos la arquitectura que soporta

    Puppet en AWS y por el otro los componentes de Puppet en sí mismo.
  6. Servicios Puppet Para el Puppetmaster, utilizaremos los siguientes servicios: •

    puppetserver • puppetdb • puppetboard • puppet agent • r10k
  7. Puppet - puppetserver El puppetserver es el servicio principal de

    la arquitectura cliente/servidor y el encargado de compilar los catálogos de los nodos agentes.
  8. Puppet - puppet agent Cliente encargado de conectarse al puppetserver

    y obtener el catálogo compilado y aplicarlo en el host localmente. Tanto el puppetmaster como los nodos agentes van a tener instalado el puppet agent.
  9. Puppet - puppetboard No es un servicio creado por puppet

    pero es opensource y es lo mejorcito que podemos encontrar en cuanto a dashboard.
  10. Puppet - r10k R10k nos permite manejar environments y versionado

    de repositorios de una manera muy sencilla a traves del command line. • Por cada branch, un environment. • En cada environment, un Puppetfile con el listado de módulos a utilizar.
  11. Servicios AWS Utilizaremos los siguientes servicios en Amazon Web Services

    para la creación de la infraestructura: • S3 • EC2 • ASG • ELB • RDS • EFS • Lambda
  12. AWS - S3 Utilizaremos S3 para el almacenamiento de: -

    El id_rsa para la clonación de repositorios. - Python script para remover los certificados (Lambda). - Pkcs7 key para la encriptación del Hiera eyaml.
  13. AWS - Launch Configuration El encargado de configurar los servidores

    de Puppet en el arranque inicial e instalar los agentes en los nodos clientes
  14. AWS - Launch Configuration - Master A continuación veremos un

    ejemplo de configuración para PuppetMaster.
  15. Instala el server y el agente. Clona el repo de

    instalación Aplica el repo Copia la key de s3
  16. AWS - Launch Configuration (LC) - Cliente A continuación veremos

    un ejemplo de configuración para los nodos clientes.
  17. AWS - Auto Scaling Group (ASG) El ASG nos va

    a permitir escalar el Puppetmaster. Esto puede ser dinámico o fijo dependiendo de las necesidades.
  18. AWS - Elastic Cloud Computing (EC2) Al utilizar el ASG,

    vamos a escalar las instancias automáticamente.
  19. AWS - Elastic Load Balancer (ELB) El balanceador nos va

    a permitir abstraer las peticiones a las instancias. Adjuntamos el ELB al ASG previamente creado.
  20. AWS - Relational Database Service (RDS) Utilizaremos RDS para almacenar

    la base de datos de Puppet. Este va a ser un PostgreSQL. Para Puppet 5 tiene que ser PGSQL => 9.4
  21. AWS - Elastic File System (EFS) Utilizaremos EFS para compartir

    los certificados entre los Puppetmaster. Directorio de certs: /etc/puppetlabs/puppet/ssl
  22. AWS - Lambda Utilizaremos Lambda para borrar los nodos de

    la infraestructura de Puppet cuando se terminen. Utilizaremos la API de Puppet para remover los nodos, como si hiciéramos un: - puppet node deactivate <node> - puppet cert clean <node>