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:
192.168.0.131 servmanager01.ochobits.local
192.168.0.135 servworker01.ochobits.local
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:
apt update
apt upgrade
Descargamos el paquete con los repositorios y los añadimos al sistema:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
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:
sudo apt update
sudo apt-get install -y docker-ce
sudo systemctl start docker
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’
sudo docker swarm init --advertise-addr 192.168.0.131
Con el resultado que se muestra en la imagen:
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:
Desde el nodo manager, para ver todos los nodos:
docker node ls
Con el resultado:
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’
sudo curl -L https://downloads.portainer.io/portainer-agent-stack.yml \
-o portainer-agent-stack.yml
sudo docker stack deploy --compose-file=portainer-agent-stack.yml portainer
Desplegamos y a continuación comprobamos el estado del stack:
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:
Para visualizar la información de los nodos del clúster, justo en la columna de la izquierda, marcamos sobre «Swarm»
También podemos utilizar la vista de «Cluster visualizer»
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