¿Qué es Docker Swarm?

Categoría
Descripción

Swarm es un modo de trabajo que apareció en Docker versión 1.12 (verano de 2016) que permite el orquestado de contenedores. Distingue 2 tipos de nodos:

  • Nodos manager: se encargan de la gestión del swarm. Cada nodo dispone de una copia local de la base de datos llamada Raft, que contiene la configuración y información de autoridad necesaria dentro del swarm. La comunicación entre nodos está encriptada y diseñada para garantizar la integridad y la confianza de que cualquier nodo se puede gestionar de forma segura.
    • De entre todos los nodos manager, se escoge uno con el rol de líder. Por defecto, es el primer nodo manager creado.
  • Nodos worker: son los encargados de la ejecución real de las tareas

Los nodos pueden ser a la vez managers y workers, y se pueden promocionar de un rol a otro. En el swarm pueden existir tantos nodos como se desee, con la única condición de que deben ejecutar la misma versión de Docker.

Cuando se trabaja en un swarm, la forma de trabajo cambia con respecto a la forma clásica de trabajar con un servidor Docker único. En el manager se configura un service (servicio), que sustituiría al clásico docker run. En el servicio, se indica la imagen que se quiere usar y se pueden indicar ciertos parámetros, como el número de réplicas a manejar por ejemplo. A estas réplicas se las conoce como tasks (tareas). Cada una de estas tasks (tareas) se encargará de la gestión de un contenedor. Los nodos manager se encargarán de decidir dónde ejecutar los contenedores a medida que se necesiten.

Inicialización modo Swarm

Mediante docker info, podemos saber si el modo swarm está activo o inactivo. Para inicializar el modo swarm, se usará el comando docker swarm init, que llevará a cabo las siguientes tareas:

  • Se crea el certificado root para el swarm
  • Se suministra este certificado para el primer nodo manager que se acaba de crear
  • Se crea el token que permitirá a nuevos nodos unirse al swarm
  • Se crea la base de datos Raft, que permite almacenar todos los CAs, secrets, passwords, etc...
    • Esta base de datos se encuentra encriptada en el disco
    • Se encarga de la persistencia de la información necesaria para la gestión del swarm
    • Se replica en todos los nodos manager mediante comunicaciones TLS

Almacenamiento de secrets en el Swarm

Desde la versión Docker 1.13.0, existe la base de datos Swarm Raft. Esta base de datos está encriptada y se almacena en el disco de los nodos manager. Esto permite el almacenamiento seguro de secrets (pares usuario/contraseña, claves ssh, certificados TLS...). Como la comunicación entre nodos es segura, esta información se puede enviar a los contenedores sin riesgo.

Los secrets primero se almacenan en el swarm y posteriormente se asignan a los servicios creados. Únicamente los contenedores asignados a ese servicio pueden ver esos secretos. Estos secrets se ven en el interior del contenedor como ficheros del sistema de ficheros, dentro de /run/secrets. El nombre del fichero es el nombre o alias del secret:

/run/secrets/<nombre_secreto>
/run/secrets/<alias_secreto>