Cómo administrar Docker Swarm con Swarmpit
En este artículo, te voy a mostrar cómo desplegar esta solución para la administración de Docker Swarm.
Hace unos días, escribí un artículo acerca de cómo desplegar Docker Swarm y para seguir complementando el mismo, hoy te voy a mostrar cómo desplegar Swarmpit.
¿Qué es Swarmpit?
Swarmpit es una solución para la administración de clusters que corren Docker Swarm. Nos permite manejar nuestros stacks, servicios, secretos, volumenes, redes y más. Entre otras cosas es capaz de darnos estadísticas a través de InfluxDB, además, tiene un manejo para roles para todo un equipo, con lo cual lo hace mucho más interesante.
Arrancamos
Antes de arrancar, debemos tener en cuenta que Swarmpit tiene varios componentes. Veamos un poco acerca de ellos:
- App: Este componente es el principal, si bien no se lo nombra como el servidor, lo es, ya que funciona como tal.
- Agent: Cada nodo de Docker Swarm que querramos subir a Swarmpit para manejarlo debe correr su agente, es por esto, que veremos más adelante que el despliegue del agente debe hacerse en modo "global" para que corra en cada uno de los nodos.
- CouchDB: Corre una instancia de esta base de datos para el almacenaje de todo los datos de la App.
- InfluxDB: En este caso, InfluxDB es recomendable para explotar las estadísticas desde la misma aplicación. El docker-compose.yml que tiene en su Github, hace mención a la versión 1.7. Yo usaré la versión 1.8.
Lo primero que vamos a hacer es crear una red "overlay", para eso, vamos a ejecutar lo siguiente:
docker network create --driver=overlay swarmpit_net
Desplegamos
La siguiente parte es la más divertida, porque es la que vamos a desplegar nuestro stack, que, como comenté más arriba, incluye la App, el agente, InfluxDB y CouchDB. Lo que vamos a ejecutar es lo siguiente:
version: '3.3'
services:
app:
image: swarmpit/swarmpit:latest
environment:
- SWARMPIT_DB=http://db:5984
- SWARMPIT_INFLUXDB=http://influxdb:8086
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
ports:
- 888:8080
networks:
- swarmpit_net
deploy:
resources:
limits:
cpus: '0.50'
memory: 1024M
reservations:
cpus: '0.25'
memory: 512M
placement:
constraints:
- node.role == manager
db:
image: couchdb:2.3.0
volumes:
- ./couchdb:/opt/couchdb/data
networks:
- swarmpit_net
deploy:
resources:
limits:
cpus: '0.30'
memory: 256M
reservations:
cpus: '0.15'
memory: 128M
influxdb:
image: influxdb:1.8.0
volumes:
- ./influxdb:/var/lib/influxdb
networks:
- swarmpit_net
deploy:
resources:
limits:
cpus: '0.60'
memory: 512M
reservations:
cpus: '0.30'
memory: 128M
agent:
image: swarmpit/agent:latest
environment:
- DOCKER_API_VERSION=1.35
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- swarmpit_net
deploy:
mode: global
labels:
swarmpit.agent: 'true'
resources:
limits:
cpus: '0.10'
memory: 64M
reservations:
cpus: '0.05'
memory: 32M
networks:
swarmpit_net:
external: true
Para que esto se convierta en unos preciosos contenedores, vamos a correr lo siguiente:
docker stack deploy swarmpit -c swarmpit.yml
La terminal nos devolverá algo como esto:
Creating service swarmpit_influxdb
Creating service swarmpit_agent
Creating service swarmpit_app
Creating service swarmpit_db
Al cabo de unos segundos/minutos (depende de la velocidad de la conexión a Internet para bajar las imágenes) al ejecutar lo siguiente:
docker service ls
Deberíamos ver nuestro stack con sus servicios corriendo:
ID NAME MODE REPLICAS IMAGE PORTS
a2z3rlw1spyn swarmpit_agent global 1/1 swarmpit/agent:latest
u696qiskvtjp swarmpit_app replicated 1/1 swarmpit/swarmpit:latest *:888->8080/tcp
rnqjpissl16s swarmpit_db replicated 1/1 couchdb:2.3.0
jkr1z6jddbyu swarmpit_influxdb replicated 1/1 influxdb:1.8.0
Configuremos y veamos...
Bueno, todo parece estar bien, vamos a terminar de configurar Swarmpit. Para esto, vamos apuntar nuestros navegadores hacia http://localhost:888. En este caso, veremos lo siguiente:
Acá debemos crear la cuenta de admin, no se desesperen, una vez que ponen su usuario y contraseña toma un segundo y estamos listos. Si todo salió bien, lo próximo que verán será algo como esto y si llegamos acá, no hay más nada que tocar, esta es toda la configuración que se necesita:
Noten lo siguiente, Swarmpit nos da un pantallazo con el estado del Cluster. En mi caso es un cluster de un solo nodo, información sobre Storage, Memoria y CPU. Más abajo, pueden notar las gráficas de utilización de memoria y CPU por nodo, gracias a InfluxDB.
Desde el apartado "Registries" puede configurar su cuenta de Docker Hub o de alguna otra registry, para que descargue de ahí las imágenes si es que elegimos desplegar Stacks o servicios desde Swarmpit.
Acá podemos ver nuestros stacks desplegados, en mi caso, solo tengo uno que es el de Swarmpit.
Los servicios, que son un conjunto de contenedores y que pueden ser o no parte de un stack:
Las tasks que son básicamente los contenedores. Si vieron el yml más arriba, vieron que hay limitaciones para el uso de recursos, bueno, esos mismos recursos los vemos definidos aquí, en esta sección, incluso, nos indica cuál es el porcentaje de uso en función de esa definición.
También seremos capaz de ver las redes, los nodos, los volumenes, secretos y configuraciones adicionales que podremos guardar:
Para ir cerrando
Como podés ver, no es difícil y si estás recién arrancando con Docker Swarm por ahí tener una interfaz web no es tan intimidatorio como ejecutar algo en la línea de comando, también puede venir bien para dar acceso a determinados acciones a personal que no necesita o no son los administradores de la plataforma.
Si querés saber más sobre Swarmpit, podés darte una vuelta por si su sitio web:
Si querés contribuir, podés hacerlo desde su Github: