Cómo administrar Docker Swarm con Swarmpit

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.

Llevando a Docker más allá con Docker Swarm
En este artículo, te voy a mostrar cómo crear un cluster de Docker Swarm. Fácil, rápido y efectivo.

¿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.

swarmpit/swarmpit
Lightweight mobile-friendly Docker Swarm management UI - swarmpit/swarmpit

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:

❤️ Swarmpit en todo su esplendor

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:

Swarmpit
Lightweight Docker Swarm Management UI

Si querés contribuir, podés hacerlo desde su Github:

swarmpit/swarmpit
Lightweight mobile-friendly Docker Swarm management UI - swarmpit/swarmpit