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

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:latestInicializar 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 workerCrear 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-netDesplegar 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 \
postgresDesplegar 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