Parte 4 – Depliegue Docker Swarm

Vamos a dar mas disponibilidad a nuestro Docker, con Docker Swarm podremos montar cluster de Docker que balancea el acceso entre servicios de Docker.

Swarm mode overview | Docker Documentation

Para la creación de un cluster docker Swarm, necesitaremos minimo una máquina como manager y máquinas de Worker, para el ejemplo usaremos 1 Manager y 2 Workers.

Swarm mode cluster

Requisitos

Para nuestro entorno necesitaremos tener instalado en todas las máquinas Docker engine.

sudo apt update && sudo apt upgrade -f
curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.sh

Puertos requeridos en el firewall.

  • TCP port 2377 for cluster management communications
  • TCP and UDP port 7946 for communication among nodes
  • UDP port 4789 for overlay network traffic

Crear el Swarm

Para crear un Cluster Swarm nada más facil.

docker swarm init --advertise-addr <IP del Manager>

Revisamos el servidor manager docker info, buscamos el apartado de Swarm debería aparecer en activo.

Vemos que en la lista de nodos ya tenemos el manager, docker node ls

Añadir Nodos Worker

Ahora vamos a agregar nodos Worker a nuestro Swarm. introducimos el comando que nos aparecía al crear el Swarm docker swarm join –token <codigo_token> IP_Manager:2377

docker swarm join --token SWMTKN-1-43597u5hmxj497zl2703zdwt1dxfa2nz31r3kvbyz7nwrc1ncc-dyjpaxnttqj3pwkfbonnzevii 192.168.60.81:2377

Repetir en todos los nodos Worker.

Si no tenemos el toker ejecutar el comando siguiente para que nos los muestro.

docker swarm join-token worker

Añadir Nodo Manage

Para añadir un nuevo nodo manage al Swarm, necesitaremos un token de manager.

docker swarm join-token manager

Pegamos el comando que nos ha dado en el nuevo nodo.

Remover Worker

Si necesitaremos remover un nodo de nuestro Swarm.

docker swarm leave 
#Para forzar --force

Nos aparecera en nuestro Swarm como Down.

Ahora lo removemos del cluster, desde el manager ejecutamos el comando.

docker node rm <ID>

SERVICE

Vamos a ver como trabajar con los servicios en Swarm.

CREATE

Lo siguiente es crear un servicio en Swarm.

  • Replicas, número de Containers.
  • name, nombre del servicio.
  • imagen.
docker service create --replicas 3 --name DemoSwarm -p 80:80 wordpress

Para ver nuestros servicios.

Podremos ver que en cada worker nos ha creado un Container.

Eliminar Service

Para eliminar el servicio docker service rm <ID>

docker service rm 88g924zbd2tejbya3730yuggp

INSPECT

Para ver los detalles de nuestros servicios dentro de nuestro Swarm

docker service inspect --pretty <Servicio>

SCALE

Para cambiar el número de replicas/Scale lanzaremos el siguiente comando.

docker service scale <Service>=<numero Scale>

Update Image

Para actualizar la imagen del servicio.

docker service update <Service> --image <imagen>

Node Availability

Los nodos tienes tres opciones de disponibilidad Active/Drain/pause, para ello basta con

docker node update –availavility <estado> <ID Nodo>

docker node ls
docker node update --availability drain <ID Nodo>

Por defecto, los nodos manager también acepta carga como worker, para dejarlos solo para la administración poner el availability a Drain.

Promote/demote Nodo

Según nuestras necesidades podremos agregar o eliminar nodos a Manager o Worker.

Convertir Worker a Manager

docker node promote <Nodo>
docker node update <Nodo> --role manager

Convertir Manager a Worker

docker node demote <Nodo>
docker node update <Nodo> --role worker

Fault Tolerance

Como en todos los sistemas de cluster lo recomendado es tener 3 o más (Impar) manager para que el quorum esté disponible.

Administer and maintain a swarm of Docker Engines | Docker Documentation

Distribute manager nodes

Mordor Blog – Parte 1 – Instalar Dockers en Raspberry-Pi

Mordor Blog – Parte 2 – Instalar Docker Compose

Mordor Blog – Parte 3 – Desplegar Pi-Hole con DoH y Docker Compose

Mordor Blog – Parte 5 – Docker Volumenes

Mordor Blog – Parte 6 – Docker Networking

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *