Docker Swarm

Docker swarm, Photon, Portainer

DOCKER SWARM, PORTAINER Y PHOTON

En esta ocasión vamos hablar de como hacer un cluster de docker utilizando Photon como sistema operativo, muy ligero y tiene un kernel especial para vmware, administrándolo de manera fácil con Portainer CE, el cual dispone de una versión business totalmente gratis hasta 5 nodos.

Lo primero es ver que requisitos necesitamos para un cluster de docker:

Nodos: mínimo 3 nodos donde puede tolerar la caída de 1

Mínimo hardware: 4 core / 8 GB RAM / 200 GB hd para 3 nodos
Recomendado hardware: 8 core / 16 GB RAM / 200 GB hd para 3 nodos
Opcional hardware: 8 core+ / 16 GB RAM+ / 200 GB+ hd para 6 nodos

Como es un laboratorio levantaremos 3 máquinas más pequeñas en VirtualBox con Photon, os recomiendo bajaros la ISO y hacer la instalación, ya que la OVA os puede dar algún problema como que no encuentra la disquetera fd0. Podéis encontrar las descargas en https://github.com/vmware/photon/wiki/Downloading-Photon-OS

INSTALACIÓN PHOTON OS

Es muy sencilla y rápida como veréis a continuación.

Aceptar términos de vmware

Elegir disco

Que versión, para entorno producción la mínima.

Como queremos configurar la red, cada cual como sea su entorno pero por norma general manualmente para poner una ip fija

Ponemos los datos de red

Ahora el nombre de la máquina

Password de root y confirmación

Y por último confirmar

Y poco más, ya tendríamos nuestro primer nodo, desplegamos 2 más. Comentaros que si la instalación fuera en un entorno vmware habría un paso más donde te pide si quieres el kernel genérico o el kernel optimizado para vmware.

Photon viene con docker instalado pero desactivado simplemente ejecutar:

systemctl enable docker

systemctl start docker

Lo siguiente sería a gusto del consumidor, photon viene con iptables y teclado en inglés por defecto, para no extendernos vamos a desactivar iptables y poner el teclado en español.

En cada máquina ejecutar:

systemctl stop iptables

systemctl disable iptables

En esta distribución el gestor de paquetes es tdnf, ejectuamos para el teclado lo siguiente:

tdnf install kbd

loadkeys es

localectl set-keymap es

Por otro lado el servicio de ssh no permite el root login de forma remota, por comodidad a la hora de crear el cluster lo habilitaremos añadiendo PermitRootLogin en el fichero de configuración /etc/ssh/sshd_config

Y reiniciamos servicio

systemctl restart sshd

Una vez lo tenemos hecho en las tres máquinas vamos a crear el cluster

 

DOCKER SWARM

En el primer nodo ejecutamos lo siguiente

docker swarm init --advertise-addr 192.168.1.200

Aquí os voy hacer una matización para los que utilicen vmware con NSX, el puerto por defecto para la comunicación de VXLAN de NSX es UDP 4789 que es el que utiliza docker swarm para el tráfico de la red overlay, por lo tanto entraríamos en conflicto y tendríamos un problema, por lo tanto en vmware ejecutaríamos este comando para cambiar el puerto por ejemplo al 9789

docker swarm init --data-path-port=9789 --advertise-addr 192.168.1.200

Este conflicto es difícil de verlo pero cuando instalas el agente de portainer os dará el error context deadline exceeded (Client.Timeout exceeded while awaiting headers)

Devolviendo lo que debemos ejecutar en cada nodo para añadirlo como worker,

pero no vamos a ejecutarlo en este caso, vamos añadir las maquinas como manager y serán worker también, así tenemos un cluster multi-manager y multi-nodo, ya que necesitamos 3 para el quorum. Ejecutamos

docker swarm join-token manager

Y nos devuelve lo que tenemos que ejecutar en las otras dos máquinas para ser manager

docker swarm join --token SWMTKN-1-0lzh7zsccaajsgeccy64osgbtkzi3b1bt2cm9ofd7kww0f375q-d24p6xhclfrp8gpxg8m4hkzy2 1
92.168.1.200:2377

Lo ejecutamos en las otras dos y si todo está correcto aparecerá lo siguiente:

Para ver nuestro cluster:

docker node ls

Perfecto ya tenemos nuestro cluster donde podríamos empezar a trabajar, pero lo haremos fácil con Portainer CE.

 

Portainer CE

Podemos instalar portainer en el propio cluster pero es mejor que sea exterior, para en caso de caída ver que está sucediendo. Para ello nos instalamos otro docker pero en modo standlone y ejecutamos lo siguiente, es decir, podemos crear otra máquina igual que hemos hecho pero sin añadirlo al cluster, trabajando de manera independiente.

Primero creamos un volumen para que nuestros datos persistan:

docker volume create portainer_data

Y desplegamos:

docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
 
Ahora tenemos que ir al navegador y abrir https://ipdelamaquina:9443 y aceptar el certificado, ya que es un autofirmado que podréis sustituir en la configuración web.
Nos pide que pongamos el user and password o recuperar de un backup.
Una vez dentro nos dirigimos a Environments y hacemos click Add Environment a la derecha.

Seleccionamos docker swarm y pulsamos en start wizard.

En la siguiente pantalla elegimos agent y rellenamos Name y Environment adress con 192.168.1.200:9001, el resto de opciones es para asignar grupo, etiqueta para luego los permisos de usuario a los diferentes entornos.

Y ahora es tan simple como copiar y pegar el comando que nos indica en nuestro nodo principal, esperar a que instale el docker de agente y tras ello darle a Connect.

docker network create \ --driver overlay \ portainer_agent_network docker service create \ --name portainer_agent \ --network portainer_agent_network \ -p 9001:9001/tcp \ --mode global \ --constraint 'node.platform.os == linux' \ --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \ --mount type=bind,src=//var/lib/docker/volumes,dst=/var/lib/docker/volumes \ portainer/agent:2.18.3

Con esto ya podemos gestionar nuestro cluster de docker desde portainer haciéndote la vida más simple. Amo Portainer, enhorabuena Team por este pedazo de software que nos brindáis.

A partir de aquí les dejo a ustedes que descubran todas sus opciones, os puedo asegurar que os va a encantar.

Buen fin de semana!!!

TL.

Gracias por leer nuestros posts.

No hay comentarios

Comenta la entrada