Docker Cluster - Swarm Parte I.
¿ Qué es Swarm ? ¿ Cómo usarlo y para que sirve ?.
“Swarm” es la manera con que Docker llama a los clusters de contenedores.
Un cluster Docker brinda los servicios necesarios para configuraciones masivas, distribuidas y complejas, provee redundancia, balanceo de peticiones y persistencia.
Un ejemplo real sería una empresa con varios Datacenters en distintas partes del mundo, que debe dar un servicio WEB, Base de datos, Servidores Redis y Servidores MongoDB (NoSQL).
Tiene una gran cantidad de clientes y deberá mantener funcionando decenas de servidores WEBs, varios servidores Redis, dos o mas servidores de base de datos replicados, y todo esto en cada datacenter, donde se conectarán clientes de distintos paises.
Ademas, dependiendo del dia y horarios puede que tenga que aumentar el número de servidores WEBs para soportar una carga de peticiones mayor, quizas inicialmente en los datacenters en Oriente, luego en los Europeos y luego en los Americanos.
Al mismo tiempo cuando la carga de trabajo se va reduciendo, ir quitando contenedores que no se necesiten. Con esto se reducen los recursos de CPU, RAM y Disco, que repercuten en una reducción del costo de Housing o Cloud utilizado.
Sobre las bases de datos y servidores NoSQL, mantener réplicas o master-master en distintos datacenters para brindar una mejor calidad de servicio local, manteniendo los datos replicados. Sea por contingencia, D.R. o por calidad de servicio.
Si esa empresa comenzará a brindar sus servicio en, por ejemplo, Australia, podrá montar servidores Docker como Nodos, para montar los contenedores necesarios (web, datos, redis, etc) y evitar el tráfico de paquetes desde Australia a otros paises.
Este tipo de soluciones son bastante mas complejas, requieren servidores DNS externos, Balanceadores, Firewalls y otros servicios.
Algunos conceptos sobre un “swarm”.
-
El cluster de contenedores funciona sobre el propio motor de “dockerd” y el cliente “docker” es quien lo gestiona. No necesitarás otro producto adicional, uno o mas equipos con un S.O. y Docker instalado.
-
Existe un servidor Docker definido como el “Manager” que gestiona otros servidores Docker llamados “Workers/Nodos”.
-
Un servidor Docker puede tener nodos Manager y Worker corriendo al mismo tiempo.
-
En los servidores Docker en modo Workers/Nodos podemos tener corriendo Servicios.
-
Docker denomina “Servicio” a una configuración de contenedor + tareas + puertos + funciones + puertos + volúmenes. Sería una unidad mas compleja que un contenedor (aunque realmente use un contenedor).
-
El Nodo Manager enviará unidades de trabajo llamadas “tasks/tareas” a los nodos que tenga asignados.
-
El Manager gestionará los recursos, Nombres DNS, dirección IP, cantidad de contenedores corriendo, parará y arrancará lo que le indiquemos, podrá balancear los Contenedores en los Workers, agrega o quita contenedores y gestionará los denominados “servicios”.
-
El Manager y demas nodos publicarán los puertos externos.
-
El Manager gestionará los tasks mediante un balancéo de carga entre nodos.
-
El diseño admite ser centralizado o descentralizado, podemos tener todo funcionando en el mismo servidor Docker o usando varios servidores reales en distintos datacenters del mundo.
-
Los servicio que brindemos pueden estar en uno o mas nodos, locales o remotos y requieren tener conectividad/visibilidad entre ellos.
-
El Manager mantiene el modelo de servicio, donde un contenedor puede dar un servicio para nuestra aplicación, además gestiona las relaciones entre Nodos (aplicación, balanceador, base de datos, otro)
-
Escalabilidad, en cada servicio/contenedor se pueden definir una serie de tareas que, al agregar o quitar nodos, el gestor Swarm agrega o quita esas tareas manteniendo la misma configuración deseada.
-
Cada Manager monitoriza los nodos y contenedores, aplica las diferencias entre la configuración planificada y la actual. Como ejemplo, si tenemos funcionando 5 servidores webs (5 contenedores/nodos) y uno de ellos se cae, el Manager arrancará un nuevo contenedor en un nodo worker y lo configurará igual que antes para seguir dando el mismo servicio.
-
Swarm se encarga de gestionar el balanceo de cada a la red externa, puede gestionar/colocar los contenedores en los nodos que tengamos asignados. Exportará/mostrará que puertos son los usados por los servicios.
-
Implementación de cambios. En caso de tener que implementar cambios en los servicios de ciertos contenedores, con el manager podemos indicar el proceso de despliegue, de una manera parcial, en distintos nodos, algunos contenedores de ciertos nodos y en caso que identifiquemos un problema hacer un “rollback” a la versión anterior y cancelar el despliegue.
Este tipo de soluciones requiere tener toda la red, los servicios, versiones de contenedores, aplicaciones y personas debidamente documentados y coordinados. Las soluciones técnicas que ofrece Swarm son muy buenas pero requiere una gestión muy meticulosa.
- Seguridad, Se mantiene la seguridad mediante certificados TLS entre el cliente “docker, el servicio “dockerd” Manager, todos los nodos y la encriptación de las comunicaciones entre todos ellos.
Sea un certificado de una entidad externa (root CA) o autofirmado por nosotros mismos, podemos utilizar claves de 4096 bits para aumentar la seguridad de las comunicaciones.
- En los servidores Docker que funcionen como “Nodos” también se podrán instalar contenedores aislados de manera directa, el Swarm es un concepto para la automatización de taréas y gestión pero admite acciones directas al mismo servidor Docker.
Los puertos que utiliza Swarm son,
- tcp 2377 para comunicaciones al Manager
- tcp/udp 7946 comunicaciones entre nodos
- udp 4789 para el tráfico de nuestra red docker. (“overlay”)
En el próximo post definiremos un Cluster con Docker y ejemplos de uso.