Presentación para el evento de Sloth en la ciudad de Cancún, Qroo en su primera edición en el año 2019.
Se tratan temas de como podemos orquestar contenedores bajo entornos de producción y con que herramientas podemos lograr todo esto, desde la infraestructura como código (terraform), pasando al entender el por qué del uso de contenedores (docker), hasta como podemos orquestarlo sobre la plataforma de AWS (Kubernetes).
2. Whoami • Ingeniería en Software - Universidad Politécnica de
Quintana Roo
• Amante de la tecnología y el desarrollo de software
• Auditor de Código en Grupo Xcaret
• Contacto: _@enriquetejeda.com
etejeda@mx:$HOME/acerca_de_mi$
Orquestando Contenedores en la Nube – Enrique Tejeda Rodríguez – Contacto: _@enriquetejeda.com
3. ¿Dequéva todoesto?
Orquestando Contenedores en la Nube – Enrique Tejeda Rodríguez – Contacto: _@enriquetejeda.com
1. Contenedor con nuestra aplicación
2. Orquestador que gestionará nuestros
contenedores
3. Infraestructura en la nube
4. Contenedores
¿Una moda? ¿Qué utilidad tiene?
Orquestando Contenedores en la Nube – Enrique Tejeda Rodríguez – Contacto: _@enriquetejeda.com
5. ¿Contenedores?Docker
• Open Source
• Desarrollado en Go
• Capacidad para desplegar multitud de
contenedores en un mismo equipo físico.
• Nuestra aplicación web empaquetada en un
“contenedor” listo para usarla en otro dispositivo sin
necesidad de configurar o instalar dependencias,
todo al estilo “Plug & Play”.
• Estos contenedores podemos utilizarlos tanto en
Windows, Mac o GNU/Linux, Kubernetes.
• Crear un contenedor a nuestra medida y este
reutilizarlo en todos nuestros proyectos.
• Hay diferentes run-time (ContainerD, CRI-O), el
más aceptado actualmente es Docker.
Orquestando Contenedores en la Nube – Enrique Tejeda Rodríguez – Contacto: _@enriquetejeda.com
6. DRUPAL 7
(PHP <= 7.1) ? ? ? ? ?
DRUPAL 6
(PHP <= 5.3)
? ? ? ? ?
WEBAPP
(JAVA 8 & TOMCAT)
? ? ? ? ?
Base de Datos
(MySQL/MongoDB)
? ? ? ? ?
API REST
(Nodejs, Express)
? ? ? ? ?
Laptop Servidor QA
Servidor
Producción
Tu Laptop Mi abuelita
Orquestando Contenedores en la Nube – Enrique Tejeda Rodríguez – Contacto: _@enriquetejeda.com
7. DRUPAL 7
(PHP <= 7.1)
DRUPAL 6
(PHP <= 5.3)
WEBAPP
(JAVA 8 & TOMCAT)
Base de Datos
(MySQL/MongoDB)
API REST
(Nodejs, Express)
Laptop Servidor QA
Servidor
Producción
Tu Laptop Mi abuelita
Orquestando Contenedores en la Nube – Enrique Tejeda Rodríguez – Contacto: _@enriquetejeda.com
8. Crearuncontenedor
• Podemos ocupar uno ya creado por la comunidad o
por grupos oficiales todo en DockerHUB
• Es muy sencillo de crear basta con solo crear un
“Dockerfile”
FROM ubuntu
MAINTAINER SatoshiNakamoto
RUN apt-get install -y apache2
EXPOSE 80
ENTRYPOINT ["/usr/sbin/apache2"]
CMD ["-D", "FOREGROUND"]
Orquestando Contenedores en la Nube – Enrique Tejeda Rodríguez – Contacto: _@enriquetejeda.com
9. ¿Ycómousamos
uncontenedorpara
producción?
Hasta ahora solo encendíamos nuestro contenedor y
si cambiabamos de versión apagabamos y
encendíamos de nuevo con la nueva imagen.
¿Cómo lo haríamos en la nube, si no solo tenemos un
solo servidor y queremos alta disponibilidad?
Orquestando Contenedores en la Nube – Enrique Tejeda Rodríguez – Contacto: _@enriquetejeda.com
10. Kubernetes,de GoogleparaelMundo
Open Source
Desarrollado en Golang
Facilita la Gestión
Aislamiento de recursos
Portabilidad entre nubes y distribuciones: Funciona en
Ubuntu, RHEL, CoreOS, tu datacenter físico, Google Cloud,
AWS, Azure.
Provee de alta disponibilidad
Distribución inteligente de los contenedores entre los
nodos/servidores
Orquestando Contenedores en la Nube – Enrique Tejeda Rodríguez – Contacto: _@enriquetejeda.com
12. Orquestando Contenedores en la Nube – Enrique Tejeda Rodríguez – Contacto: _@enriquetejeda.com
Contenedor Imagen docker, contiene todo nuestro
aplicativo en un entorno aislado.
Pod Un conjunto de contenedores, es mortal y
además de tener una red compartida entre
ellos.
Deployment Es donde especificamos cuantas "réplicas" debe
tener nuestro pod para asegurarnos que esten
en los distintos nodos (workers) de nuestro
clúster
Service Una abstracción que define un conjunto de
pods que implementan un micro-servicio, nos
ofrece una direccion virtual y la conectividad al
servicio puede ser interior (desde otros pods) o
exterior.
13. Terraform
Open Source y desarrollado en Go.
Infraestructura como código, esto permite que un modelo de su
centro de datos sea versionado y tratado como lo haría con cualquier
otro código. Además, la infraestructura puede ser compartida y
reutilizada.
Podemos hacer uso de templates para distintos servicios para
distintos proveedores de computación en la nube.
Permite que una única configuración se utilice para administrar
múltiples proveedores e incluso manejar dependencias entre nubes.
HashiCorp Configuration Language (HCL) o, en su defecto, el
formato JSON
Orquestando Contenedores en la Nube – Enrique Tejeda Rodríguez – Contacto: _@enriquetejeda.com
15. ¿Ycómoorquestamostodoenlanube?
1. Empaquetar nuestro aplicativo en un contenedor y guardarlo en algún repositorio de imágenes
(Docker & Docker Hub, ECR, etc)
2. Levantar nuestro clúster en kubernetes (Instancias master y workers) con ayuda de Terraform
sobre AWS
3. Desplegar nuestros contenedores obteniendolos desde Docker Hub con ayuda de Kubernetes
4. Configurar el uso de Ingress y de balanceadores de carga para redirigir nuestro tráfico.
Orquestando Contenedores en la Nube – Enrique Tejeda Rodríguez – Contacto: _@enriquetejeda.com
16. DEMO
Imagen Docker con Tomcat y una web
sencilla hecha con Vert.X (Java).
Deployment, Service y Ingress con 3 réplicas
de nuestro contenedor para distribuirlos en
los workers (Alta Disponibilidad)
Uso del servicio EKS (Masters gestionados
por AWS) e 2 instancias EC2 para nuestros
workers, así como también un Balanceador
de Carga de tipo aplicación.
Orquestando Contenedores en la Nube – Enrique Tejeda Rodríguez – Contacto: _@enriquetejeda.com
https://github.com/EnriqueTejeda/EKS-SLOTH2019
https://hub.docker.com/r/etejeda/sloth-vertx-demo
17. Y lo quequeda...
Kubeless (The Kubernetes Native Serverless Framework)
K3s (Lightweight Kubernetes A binary of less than 40 MB. Only 512 MB
of RAM required to run)
Jenkins-X/GitOps (CI/CD)
Orquestando Contenedores en la Nube – Enrique Tejeda Rodríguez – Contacto: _@enriquetejeda.com