Docker Swarm: Contenedores en alta disponibilidad

En la entrada de hoy vamos a hablar de Docker Swarm, una plataforma que nos permitirá tener un entorno de alta disponibilidad con Docker y GNU/Linux

Empecemos por el principio.

¿Qué es Docker Swarm?

Docker Swarm es una herramienta de agrupación y programación para los contenedores de Docker. Permite a los administradores de IT y los desarrolladores poder establecer y administrar un grupo de nodos Docker, como un solo sistema virtual.

El modo Swarm también existe de forma nativa para Docker Engine, la capa entre el sistema operativo y las imágenes de contenedor. Integra las capacidades de orquestación de Docker Swarm en Docker Engine 1.12 y versiones más recientes.

La agrupación en clústeres es una característica importante para la tecnología de contenedores; crea un grupo cooperativo de sistemas que pueden proporcionar redundancia, lo que permite la conmutación por error Docker Swarm, si uno o más nodos experimentan una interrupción o caída. También proporciona a los administradores y desarrolladores la capacidad de agregar o restar contenedores.

Para saber más, podemos consultar la documentación oficial (en inglés)

Creación de entorno con Docker Swarm

Vamos a crear un entorno con tres nodos, uno con el rol de ‘manager’ y dos con el de ‘worker’, utilizando el sistema operativo Ubuntu 18.04, en este laboratorio los nodos son los siguientes:

  1. 192.168.0.131 servmanager01.ochobits.local
  2. 192.168.0.135 servworker01.ochobits.local
  3. 192.168.0.136 servworker02.ochobits.local

En este caso, podemos añadir estos registros en nuestro servidor DNS local, o bien añadir los registros en el fichero ‘/etc/hosts/’, de cada nodo.

Añadimos los repositorios de Docker e instalamos Docker Engine, en su versión comunitario, en los tres nodos.

Primaramente actualizamos:

  1. apt update
  2. apt upgrade

Descargamos el paquete con los repositorios y los añadimos al sistema:

  1. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  2. sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

Volvemos a actualizar e instalamos. Encendemos el servicio y lo añadimos al arranque:

  1. sudo apt update
  2. sudo apt-get install -y docker-ce
  3. sudo systemctl start docker
  4. sudo systemctl enable docker

Configuración de nodo Manager

En el nodo que vamos a utilizar como Manager, ejecutamos el siguiente comando, en mi caso utilizando la IP del servidor ‘servmanager01.ochobits.local’

  1. sudo docker swarm init --advertise-addr 192.168.0.131

Con el resultado que se muestra en la imagen:

Creamos el clúster con Docker Swarm en el Manager

Configuración de nodos Workers

En la parte anterior nos muestra la línea que debemos ejecutar en los nodos ‘workers’ de la siguiente manera:

Añadimos los nodos con el rol de worker

Desde el nodo manager, para ver todos los nodos:

  1. docker node ls

Con el resultado:

Listamos nodos del clúster (click para ampliar)

Docker Swarm controlado con Portainer

La versión comunitaria de Swarm no lleva incluido las piezas UCP, para manejar graficamente el clúster, ni DTR, para llevar un control de las imágenes. Ya que estas son de la versión de pago enterprise. Aún así podemos utilizar herramientas muy interesantes, dentro del mundo del software libre. Entre ellas está Portainer, de la que ya os hablé en la web de Colaboratorio.net

Para ello debemos desplegar un stack dedicado para ello, previa descarga del fichero de configuración en formato YAML, desde el nodo con el rol de ‘manager’

  1. sudo curl -L https://downloads.portainer.io/portainer-agent-stack.yml \
  2. -o portainer-agent-stack.yml
  3. sudo docker stack deploy --compose-file=portainer-agent-stack.yml portainer

Desplegamos y a continuación comprobamos el estado del stack:

Despliegue del stack de Portainer (click para ampliar)

Se observa que el despliegue del stack ha sido un éxito, ya que los agentes de Portainer se han desplegado en todos los nodos.

Ahora ya nos podemos ir a la URL del manager, ya sea con la IP o con el nombre del servidor, para acceder a la interfaz gráfica de Portainer:

Aspecto interfaz Portainer

Para visualizar la información de los nodos del clúster, justo en la columna de la izquierda, marcamos sobre «Swarm»

Información de los nodos de Swarm en Portainer

También podemos utilizar la vista de «Cluster visualizer»

Vista visualización de clúster

Y esto es todo por hoy, tengo pensado hacer más artículos al respecto, aunque también os dije lo mismo de Ansible e Icinga 2, así que se me junta el trabajo… poco a poco, y lo que me apetezca cada día. Estad atentos!!

Fuentes consultadas

Clouding.io –  Docker Swarm en Ubuntu 18.04

Portainer Documentation