Cómo desplegar Portainer en Docker Swarm
Portainer es una solución que te va a ayudar con la administración de tu clúster de Docker, Docker Swarm y Kubernetes. En este tutorial, te muestro como desplegarlo en Docker Swarm.
Como comentaba en la bajada de este artículo, Portainer nos va ayudar mucho con la administración de un host o un clúster de Docker o Kubernetes. Nos da una interfaz web que nos permite no solo administrarlo de una manera más amigable, sino también delegar "recursos" para que otras personas puedan desplegar sus contenedores sin necesidad de darle acceso a una terminal.
En este tutorial, te voy a mostrar lo sencillo que es desplegar Portainer en un clúster de Docker Swarm el cual se compone de dos servidores, un Manager y un Worker.
Si estás interesado en saber cómo armar un clúster de Docker Swarm, te dejo este artículo que escribí recientemente:
Arrancamos
Antes de desplegar, debemos entender la arquitectura de Portainer. Esta solución tiene dos componentes, El Portainer mismo, que es el que tiene la interfaz web y desde donde haremos toda la magia y un agente, que debe instalarse en cada nodo de Docker Swarm que queremos manejar con Portainer, para que esto suceda, por lo general, desplegaremos el agente con el mode: global, para que corra un contenedor con ese agente en cada nodo.
Veamos el contenido del archivo portainer.yml que es que vamos a desplegar para este tutorial:
version: '3.2'
services:
agent:
image: portainer/agent
environment:
# REQUIRED: Should be equal to the service name prefixed by "tasks." when
# deployed inside an overlay network
AGENT_CLUSTER_ADDR: tasks.agent
# AGENT_PORT: 9001
# LOG_LEVEL: debug
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
networks:
- agent_network
deploy:
mode: global
placement:
constraints: [node.platform.os == linux]
portainer:
image: portainer/portainer
command: -H tcp://tasks.agent:9001 --tlsskipverify
ports:
- "9000:9000"
- "8000:8000"
volumes:
- data:/data
networks:
- agent_network
deploy:
mode: replicated
replicas: 1
placement:
constraints: [node.role == manager]
networks:
agent_network:
driver: overlay
volumes:
data:
Lo que vamos a desplegar aquí es el agente, que como les comente, vamos a hacerlo en modo global, para que el mismo se instale en todos los nodos del clúster y le vamos a exponer como volumen, la ruta /var/lib/docker/volumes, así como también el socket de Docker.
Si alguna vez seguiste este tutorial y cambiaste la carpeta donde trabaja Docker, la ruta de los volúmenes de Docker tiene que estar de acuerdo a su ubicación.
Lo siguiente que especificamos aquí es una red del tipo overlay y no mucho más.
Luego, vemos que vamos a desplegar un contenedor con el Portainer "Server", noten que exponemos dos puertos, uno es el 9000 que es por donde vamos a entrar a la UI de Portainer y el puerto 8000 está reservado para los agentes hablen a través de SSH de manera segura con el servidor. Especificamos un volumen para hacer persistente la configuración y lo metemos en la misma red que el agente.
Definimos la red y el volumen data y ya con esa configuración, así como esta, estamos listos para desplegar.
¡Desplega querido!
Para desplegar, lo vamos a hacer como un Stack, para este caso, vamos a ejecutar lo siguiente en el Manager de Docker Swarm:
$ docker stack deploy portainer -c portainer.yml
Si todo sale bien, debemos ver algo como esto:
Creating network portainer_agent_network
Creating service portainer_agent
Creating service portainer_portainer
Para ver cómo va el despliegue, ejecutamos:
$ docker service ls
La devolución debería ser algo como esto:
ID NAME MODE REPLICAS IMAGE PORTS
ngvbdywoej8o portainer_agent global 2/2 portainer/agent:latest
uq7zsmd5badq portainer_portainer replicated 1/1 portainer/portainer:latest *:8000->8000/tcp, *:9000->9000/tcp
Si ven algo como esto de aquí arriba quiere decir que nuestro despliegue se realizó correctamente. Como pueden ver, el agente tiene dos replicas corriendo, eso es así porque hay una instancia corriendo en el Manager del Swarm y el otro en el Worker.
Lo siguiente que haremos es apuntar nuestros navegadores hacia la IP del nodo Manager de Docker Swarm por el puerto 9000.
En mi caso quedó así:
http://172.30.225.238:9000/
La respuesta debería ser algo como esto:
Lo siguiente que vamos a hacer es configurar el usuario de administrador, si nuestra instancia de Portainer va a estar expuesta a Internet, te recomiendo elegir otro nombre de usuario, elegimos la contraseña y hacemos un clic en "Create User".
Lo siguiente que veremos será nuestro Portainer listo para empezar a trabajar.
Para ir cerrando
Como ves el despliegue de Portainer es muy sencillo y en unos minutos estamos listos para manejar nuestro clúster de Docker Swarm desde una interfaz amigable y potente, que consume muy pocos recursos.
Les dejo aquí el Github donde esta hosteado el archivo portainer.yml:
En otros artículos veremos como sacarle provecho y por supuesto veremos como desplegarlo para administrar nuestros clúster de Kubernetes.
Si algo no anduvo, no dudes en dejar algún comentario aquí abajo.