Volver a Docker

Publicacion 03

Cluster Docker Swarm de 3 nodos

Un recorrido introductorio por un cluster pequeno de Docker Swarm para entender managers, workers, redes overlay y servicios replicados.

8 min

Cluster Docker Swarm de 3 nodos

Que incluye el montaje

  • Un nodo manager.
  • Dos nodos worker.
  • Una red overlay para comunicacion entre nodos.
  • Un servicio PostgreSQL.
  • Un servicio API replicado dentro del cluster.

Una imagen API sencilla

La API puede mantenerse pequena. Solo necesita exponer un endpoint y confirmar que puede hablar con PostgreSQL desde la red de Swarm.

const express = require('express');
const { Pool } = require('pg');

const app = express();
const port = process.env.PORT || 3000;

const pool = new Pool({
  host: process.env.PGHOST || 'postgres',
  user: 'postgres',
  password: process.env.PGPASSWORD || 'secret',
  database: 'postgres',
  port: 5432,
});

app.get('/', async (req, res) => {
  const result = await pool.query('SELECT NOW()');
  res.json({ message: 'Hello from API', time: result.rows[0].now });
});

app.listen(port, '0.0.0.0', () => {
  console.log(`API running on port ${port}`);
});

Build y publicacion de la imagen

Si los workers necesitan descargar la imagen, publicarla en un registry es la opcion mas limpia.

docker build --tag rhonalchirinos/hello-api:latest .
docker login
docker push rhonalchirinos/hello-api:latest

Inicializar el Swarm

El manager es el punto de control del cluster.

Despues agregas los workers con el token que muestra el manager.

Si necesitas imprimir el token otra vez:

docker swarm join-token worker

Crear la red overlay

Los servicios distribuidos entre distintos nodos necesitan una red overlay para comunicarse sin depender de ruteo manual a nivel host.

docker network create -d overlay hello-net

Desplegar PostgreSQL como servicio

La base de datos puede correr dentro de la misma red overlay para que la API la resuelva por nombre de servicio.

docker service create \
  --name postgres \
  --env POSTGRES_PASSWORD=secret \
  --mount type=volume,source=testdb,target=/var/lib/postgresql/data \
  --network hello-net \
  postgres

Desplegar la API con replicas

Una vez que la red y la base existen, puedes crear el servicio API con varias replicas.

Puedes inspeccionar los servicios actuales con:

Y revisar los puertos publicados con:

docker service inspect some-api --format '{{json .Endpoint.Ports}}'

Que ensena este ejercicio

  • Swarm distribuye replicas de servicios entre nodos.
  • Las redes overlay eliminan gran parte de la configuracion manual entre hosts.
  • Los servicios se resuelven por nombres logicos, no por IP de contenedor.
  • El manager mantiene el estado deseado y los workers ejecutan las cargas.

Siguiente paso recomendado

Despues de que este cluster funcione, el siguiente paso valioso es probar updates de servicios, constraints y draining de nodos. Ahi es donde Swarm empieza a sentirse operativo y no solo demostrativo.

Siguiente lectura

Reverse proxy para microservicios

Enrutamiento de multiples servicios con NGINX, Docker Compose y Swarm para acercar la arquitectura a un escenario real.

Ir a la siguiente publicacion