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:
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