Implementación de Docker Swarm en Amazon Web Services usando Auto Scaling Groups y Elastic Load Balancing
Se trata de un proyecto orientado a la alta disponibilidad y evitando los overhead con un óptimo aprovechamiento de los recursos usando contenedores Docker, auto escalado y balanceador de carga usando los servicios de Amazon Web Services. Se trata de crear un servicio para servir una página web (Wordpress, Apache2, MySQL y Supervisor) a partir de un fichero construído Dockerfile generar una imagen y subirla a un Docker registry público que serán los repositorios de Docker Hub.
Crear un cluster de nodos con Docker Swarm donde habrá un nodo manager y los nodos worker serán gestionados por el servicio de AWS Auto Scaling Groups, haciendo scale-out o scale-in elásticamente según unas "Scaling Polices". Las nuevas instancias EC2 estarán levantadas con ASG, se unirarán al Swarm y estarán distribuidas en las tres zonas de disponibilidad a, b y c de la región us-east-2 (Ohio). En el nodo manager se crea un servicio en base a la imagen subida a Docker Hub, se irá actualizando el servicio creando nuevas tareas de réplicas y que estas se repartan con un paralelismo de uno enntre los nodos worker disponibles y gestionados por ASG permitiendo así una mayor disponibilidad y balanceo de los recursos de contenedores con Docker Swarm.
Para unificar todo lo anterior y en una misma dirección pública de acceso a todas las instancias, se crea un Elastic Load Balancer que hará balanceo entre las instancias gestionadas por ASG y el nodo manager. ELB crea un DNS Name, se creará un registro CNAME en la gestión del dominio para que el subdominio "web.itgal.es" apunte al DNS Name del ELB.
Cuando se haga un scale-in de instancias con ASG los nodos en estado "Down" se eliminarán del Swarm de nodos a través de un bash script añadido como tarea programada que se ejecutará cada diez minutos en el nodo manager (eliminar-nodos-down.sh) consiguiendo que se eliminen los nodos Down que ya no forman parte del Swarm.
▶ Documentación proyecto: https://bit.ly/3ENHiWt
▶ Presentación Slides: https://bit.ly/3IJ4039
▶ Docker Cheat Sheet Docker: https://bit.ly/3J5376A
▶ Video demo (PoC): https://youtu.be/HzsBiJjgrOo