Cómo instalar y configurar el clúster Docker Swarm en Ubuntu
Docker Swarm es una herramienta que te permite desplegar un cluster de Docker Hosts. Es una herramienta nativa de clustering proporcionada por Docker que proporciona alta disponibilidad y alto rendimiento para tu aplicación distribuyéndola a todos los nodos dentro del cluster swarm.
En este tutorial, te mostraremos paso a paso cómo crear un clúster de enjambre utilizando Ubuntu 16.04. Crearemos un clúster de enjambre utilizando 2 máquinas servidoras de Ubuntu, 1 nodo servidor como gestor y otro como trabajador. Y luego intentaremos desplegar el servicio Nginx simple en el clúster de enjambre.
Requisitos previos
- 2 o más – Servidor Ubuntu 16.04
- manager 132.92.41.4
- trabajador01 132.92.41.5
- Privilegios de root
¿Qué vamos a hacer?
- Configurar los Hosts
- Instalar Docker-ce
- Inicialización de Docker Swarm
- Desplegar el primer servicio en el clúster
Paso 1 – Configurar los hosts
Antes de instalar cualquier paquete para el clúster del enjambre, configuraremos el archivo de hosts en ambos servidores.
Ejecuta los siguientes comandos en todos los servidores, ‘manager’ y ‘worker01’.
Edita el archivo ‘/etc/hosts’ con el editor vim.
vim /etc/hosts
Añade la siguiente configuración al final de la línea.
132.92.41.4 manager
132.92.41.5 worker01
Guarda y sal.
Ahora haz ping a todos los nodos utilizando el ‘nombre de host’ en lugar de la dirección IP.
ping -c 3 manager
ping -c 3 worker01
Y asegúrate de que funciona en todos los hosts.
Paso 2 – Instalar Docker-ce
Para crear el clúster del enjambre, necesitamos instalar Docker en todos los nodos del servidor. En este paso, instalaremos Docker-ce Community Edition en los servidores manager y worker01.
Instala las dependencias de Docker-ce con el comando apt que aparece a continuación.
sudo apt install apt-transport-https software-properties-common ca-certificates -y
Ahora añade la clave Docker y el repositorio Docker-ce a nuestros servidores.
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable" > /etc/apt/sources.list.d/docker-ce.list
Actualiza el repositorio e instala los paquetes Docker-ce utilizando el comando apt install que aparece a continuación.
sudo apt update
sudo apt install docker-ce -y
Una vez completada la instalación, inicia el servicio Docker y habilítalo para que se lance cada vez que se inicie el sistema.
systemctl start docker
systemctl enable docker
Ahora Docker-ce está instalado en nuestros nodos del servidor.
A continuación, configuraremos Docker para que se ejecute como un usuario normal o no root.
Crea un nuevo usuario llamado ‘mohammad’ y añádelo al grupo ‘docker’.
useradd -m -s /bin/bash mohammad
sudo usermod -aG docker mohammad
Ahora inicia sesión con el usuario ‘mohammad’ y ejecuta el comando docker hello-world como se indica a continuación.
su - mohammad
docker run hello-world
Y obtendrás el hello world de docker como se muestra a continuación.
Paso 3 – Crear el Cluster Swarm
En este paso, crearemos el Cluster de Enjambre de nuestros nodos. Y para crear los nodos del clúster de enjambre, necesitamos inicializar el modo de enjambre en el nodo «manager» y luego unir el nodo «worker01» al clúster.
Inicializa el modo de enjambre Docker ejecutando el siguiente comando docker en el nodo «manager».
docker swarm init --advertise-addr 132.92.41.4
Y obtendrás el resultado que se muestra a continuación.
Verás que el nodo «manager» ha generado el «join-token».
A continuación, tenemos que añadir el nodo ‘worker01’ al cluster ‘manager’. Y para ello, necesitamos un ‘join-token’ del nodo ‘manager’ del clúster, así que asegúrate de escribirlo en tu nota.
Ejecuta el comando docker swarm join en el nodo ‘worker01’.
docker swarm join --token SWMTKN-1-5p5ujrr67rl2rlmyvrj56fksblbcrtaeirf7fj5r4snid2vn6y-918gbqr02m64xct43i2ssi4qs 132.92.41.4:2377
Ahora obtendrás el resultado que se muestra a continuación.
El nodo ‘worker01’ se ha unido al clúster.
Compruébalo ejecutando el siguiente comando en el nodo «manager».
docker node ls
Ahora verás que el nodo ‘worker01’ se ha unido al cluster del enjambre.
El clúster de enjambre se ha creado.
Paso 4 – Desplegar el primer servicio en el clúster
En este paso, crearemos y desplegaremos nuestro primer servicio en el clúster de enjambre. Queremos crear un nuevo servicio de servidor web Nginx que se ejecutará en el puerto http 80 por defecto, y luego exponerlo al puerto 8080 en el servidor anfitrión, y después intentar replicar el servicio nginx dentro del cluster del enjambre.
Crear el servicio
Crea un nuevo servicio Nginx llamado ‘mi-web’ y expone el puerto HTTP del contenedor al puerto 8080 del host.
docker service create --name my-web --publish 8080:80 nginx:1.13-alpine
Y cuando esté creado, compruébalo utilizando el comando docker service que aparece a continuación.
docker service ls
Y obtendrás el resultado que se muestra a continuación.
El servicio Nginx ha sido creado y desplegado en el cluster del enjambre como un servicio llamado ‘mi-web’, está basado en Nginx Alpine Linux, expone el puerto HTTP del servicio del contenedor al puerto ‘8080’ en el host, y sólo tiene 1 réplica.
Réplicas y escalado del servicio
Ahora haremos réplicas para el servicio ‘mi-web’. Haremos 2 réplicas del servicio ‘mi-web’, para que el servicio sea accesible en los nodos ‘manager’ y ‘worker01’.
Para replicar el servicio ‘mi-web’, ejecuta el siguiente comando.
docker service scale my-web=2
Y una vez completado, vuelve a comprobarlo con el comando docker service.
docker service ls
Y ahora el servidor tiene 2 réplicas.
Abre tu navegador web y escribe la dirección IP del nodo gestor con el puerto 8080.
http://manager:8080/
Y obtendrás la página por defecto de Nginx.
A continuación se muestra el resultado del nodo ‘worker01’.
http://worker01:8080/
El Cluster de Enjambre se ha creado, y el servicio Nginx se ha terminado de desplegar en nuestro Cluster de Enjambre.