Giter VIP home page Giter VIP logo

adrianlois / docker-swarm-aws-asg-elb Goto Github PK

View Code? Open in Web Editor NEW
5.0 1.0 3.0 59.19 MB

Implementación de Docker Swarm en Amazon Web Services usando Auto Scaling Groups y Elastic Load Balancing

Home Page: https://www.zonasystem.com/2018/12/implementacion-docker-swarm-amazon-web-services-auto-scaling-groups-elastic-load-balancing.html

License: GNU General Public License v3.0

PHP 25.20% Shell 7.23% Dockerfile 67.57%
docker dockerswarm aws autoscaling loadbalancing wordpress amazon-web-services

docker-swarm-aws-asg-elb's Introduction

Implementación de Docker Swarm en Amazon Web Services usando Auto Scaling Groups y Elastic Load Balancing

Docker-Swarm-AWS-ASG-ELB

Descripción

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

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

portada-video-demo-youtube-dockerswarm-aws-asg-elb-adrianlois

Resumen

Diagrama: Dockerfile > Imagen > Docker Hub

Diagrama de la Infraestructura de AWS, Docker Swarm, Auto Scaling Groups y Elastic Load Balancing

Crear servicio con tareas de réplicas

ELB: Balanceo de carga entre instancias y DNS Name

Balanceo de carga entre instancias y contenedores

ASG: Scale-in a cero de forma manual

Eliminación de nodos "Down" del Swarm mediante bash scripting

docker-swarm-aws-asg-elb's People

Contributors

adrianlois avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.