Docker Swarm para lograr una alta disponibilidad



Este blog sobre Docker Swarm, explica el poder de configurar un clúster de motores Docker a través de Docker Swarm configurado para lograr alta disponibilidad.

¿Cuál es la característica más importante de cualquier aplicación basada en web? Hay muchos, pero para mi alta disponibilidad es lo mas importante. ¡Eso es lo que Docker Swarm nos ayuda a lograr! Ayuda a que la aplicación esté altamente disponible.

En mi blog anterior , Expliqué cómo funciona Docker Compose. Este blog sobre Docker Swarm es una continuación del anterior y aquí se explican los beneficios de usar Docker Swarm para contener cualquier aplicación de múltiples contenedores.





En el caso de este blog, es solo una aplicación Angular que será Docker Swarm.
Nota : El método para contener la aplicación MEAN Stack es el mismo.

Entonces, ¿qué es Docker Swarm?

Enjambre de Docker es una técnica para crear y mantener un grupo de Motores Docker . Los motores Docker se pueden alojar en diferentes nodos, y estos nodos que se encuentran en ubicaciones remotas forman un Racimo cuando está conectado en modo Swarm.



¿Por qué utilizar Docker Swarm?

¡Por las razones ya mencionadas! Logrando alta disponibilidad sin ningún tiempo de inactividad es una prioridad para todos los proveedores de servicios. ¿La alta disponibilidad impresionará a sus clientes? Bueno, no quedarán impresionados si se enfrentan a un tiempo de inactividad. Eso es una obviedad.

Otros beneficios de Docker Swarm

Como muchos otros servicios, Docker Swarm hace balanceo de carga para nosotros. Por lo tanto, no es necesario que los ingenieros de DevOps enruten las solicitudes de procesamiento a otros nodos cuando uno falla. El administrador del clúster realizará automáticamente el equilibrio de carga por nosotros.

Acceso descentralizado es otro beneficio. ¿Qué significa eso? Significa que se puede acceder fácilmente a todos los nodos desde el administrador. El administrador también avisará a los nodos de forma regular y hará un seguimiento de su estado para hacer frente al tiempo de inactividad. Sin embargo, los nodos no pueden acceder ni rastrear los servicios que se ejecutan en otros nodos / administradores.



Puede consultar el no. de contenedores que se ejecutan en un nodo, aumentar proporcionalmente el no. de contenedores o reducir el no. según nuestro requisito, con solo ejecutar un solo comando.

Incluso después de que se haya implementado una aplicación, podemos emitir actualizaciones continuas y asegúrese de que se logre CI (Integración continua). Las actualizaciones continuas se envían a un nodo tras otro, lo que garantiza que no haya tiempo de inactividad y que la carga se distribuya entre otros nodos del clúster.

Entonces, ¿qué sigue? Hacer lo obvio. Empiece a utilizar Docker Swarm si ya ha trabajado en Docker o si su organización desea contener un servicio web fiable.

Nota : Los motores Docker se instalan en hosts / servidores independientes o en varias VM en un host.

Introducción al modo Swarm

Docker Swarm es iniciado por el administrador, o déjeme decirlo de esta manera, la instancia que inicia el clúster Swarm se convierte en el administrador. El comando para iniciar el clúster es:

$ docker swarm init --advertise-addr dirección IP

Aquí, la marca '–advertise-addr' se utiliza para anunciarse a otros nodos que desean unirse al clúster. La dirección IP del administrador debe especificarse junto con la bandera. A continuación se muestra la captura de pantalla de muestra.

comando docker init - docker swarm - edureka

Cuando se inicia el grupo Swarm, se genera un token al final del administrador. Este token debe ser utilizado por otros nodos para unirse al clúster de enjambre.

cómo clonar un objeto en java

¿Cómo es exactamente? Copie todo el token generado en el motor de la ventana acoplable del administrador, péguelo en el motor de la ventana acoplable del nodo y ejecútelo. La parte resaltada de la captura de pantalla anterior es un token. Cuando el token se ejecuta en un nodo trabajador, se verá como la siguiente captura de pantalla.

Cualquier nodo que se una al clúster puede luego ascender a administrador. En caso de que desee que un motor de ventana acoplable se una como administrador, ejecute el siguiente comando al final del administrador:

$ docker swarm join-token manager

Y en un momento posterior, si desea que el token de un nodo se una al clúster, ejecute el siguiente comando:

$ docker swarm join-token nodo

Continúe y ejecute el token en cada nodo que desee para unirse al clúster. Una vez hecho todo esto, puede ejecutar un comando de lista de nodos de la ventana acoplable para verificar cuántos nodos se han unido al clúster junto con su estado. El comando es:

$ nodo docker ls

La captura de pantalla está a continuación:

Creación de una imagen de Docker para una aplicación angular

Si todo está bien, entonces podemos iniciar nuestro servicio Swarm, siempre que la imagen de Docker esté construida. La imagen de Docker se puede crear a partir de Dockerfile. El Dockerfile utilizado para construir las aplicaciones es el siguiente:

DESDE el nodo: 6 EJECUTAR mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache clean EJECUTAR npm install COPY. / usr / src / app EXPOSE 4200 CMD ['npm', 'start']

El Dockerfile se usa para ejecutar un conjunto de comandos juntos para crear una imagen de Docker personalizada a partir de una imagen base. Como puede ver, la imagen base que he usado es 'Nodo: 6'. NodeJS es la imagen I de Docker Hub que está etiquetada con la versión 6.

Luego estoy creando un nuevo directorio de Docker dentro del contenedor y lo estoy convirtiendo en el directorio de trabajo dentro de mi contenedor.

Estoy copiando el archivo 'package.json' de mi máquina local al directorio de trabajo del contenedor. Luego estoy especificando los comandos 'EJECUTAR npm cache clean' y 'EJECUTAR npm install'. npm install El comando descarga la versión de las dependencias mencionadas en el archivo package.json.

Luego estoy copiando todos los códigos del proyecto de la máquina local al contenedor, exponiendo el número de puerto 4200 para acceder a la aplicación Angular en el navegador y, finalmente, estoy especificando el comando npm start que contiene la aplicación.

Ahora, para crear la imagen de Docker basada en este Dockerfile, ejecute el siguiente comando:

$ docker build -t imagen-angular.

Nota: Las imágenes de Docker deben compilarse en todos los nodos del clúster. Sin él, los contenedores no se pueden girar en otros motores Docker.

Inicio del servicio Docker Swarm

Dado que nuestra imagen de Docker está construida, podemos hacer girar un contenedor a partir de esta imagen. Pero haremos algo mejor: crear un servicio Docker Swarm a partir de él. El comando para crear un servicio de enjambre es:

$ docker service create --name 'Angular-App-Container' -p 4200: 4200 imagen angular

Aquí, la bandera 'nombre' se usa para dar un nombre a mi servicio y la bandera 'p' se usa para exponer el puerto del contenedor al puerto del host. En el archivo package.json, he especificado el puerto del contenedor en el que se debe alojar la aplicación Angular. Y el 4200 en este comando ayuda a asignar el puerto 4200 del contenedor al puerto 4200 del host. 'Imagen angular' es el nombre de la imagen que construí anteriormente.

Recuerda : Cuando creamos un servicio, se puede alojar en cualquier motor de ventana acoplable del clúster. El administrador del enjambre decidirá dónde se alojará. Pero, sin importar en qué nodo esté alojado, se puede acceder a la aplicación en localhost: 4200 desde cualquiera de los nodos conectados en el clúster.

¿Cómo es eso posible? Porque Swarm expone internamente los números de puerto para que todos los demás nodos del clúster puedan acceder a ellos. Eso significa, puerto no. 4200 en cualquier nodo / administrador del clúster representaría la aplicación Angular.

¿Ahora que? ¿Está activo el contenedor?

Puede verificar si el servicio está en contenedores ejecutando el comando docker service list. Sin embargo, puede que el contenedor tarde un minuto en desplegarse. A continuación se muestra el comando:

$ docker service ls

Este comando enumerará todos los servicios administrados por el clúster Swarm. En nuestro caso, debería mostrar un contenedor activo. Mire la captura de pantalla a continuación como referencia.

Aquí, 'REPLICAS = 1/1' indica que hay un solo 'servicio' de ese contenedor, en el clúster. Y 'MODO = replicado' indica que el servicio se replica en todos los nodos del clúster.

Ahora, para identificar en qué nodo / administrador está alojada la aplicación, podemos ejecutar el comando docker service ps command seguido del nombre del contenedor. El comando es:

$ docker service ps Angular-App-Container

La captura de pantalla de la misma se encuentra a continuación.

Esto menciona detalles sobre el nodo en el que se aloja la aplicación junto con el comando utilizado para iniciar el servicio.

El comando 'docker ps' arroja luz sobre los detalles sobre el contenedor activo. El comando es:

$ docker ps

Mire la captura de pantalla a continuación como referencia.

Pero este comando solo funcionará en el administrador del clúster y el nodo donde el servicio está realmente alojado.

Para comprobar cuántos nodos se están ejecutando, ejecute el comando de lista de nodos. El comando es:

$ nodo docker ls

Para verificar los contenedores que se ejecutan en un host en particular, ejecute el comando node ps. El comando es:

$ nodo docker ps

Si recuerda, mencioné anteriormente que el servicio se está ejecutando actualmente en MODO replicado. Esto significa que el servicio se replica en todos los nodos de los clústeres. ¿Crees que existe una alternativa?

¡Absolutamente! Hay algo llamado MODO Global. En este modo, hay un servicio de este contenedor que se ejecuta en cada administrador individual del clúster. Recuerde detener el servicio / contenedor actual antes de girar otro conjunto de contenedores.

El comando para eso es:

$ docker service rm Angular-App-Container

El comando para girar el contenedor en modo global es:

$ docker service create --name 'Angular-App-Container' -p 4200: 4200 --mode global angular-image

Esto crearía 3 servicios en los 3 nodos de nuestro clúster. Puede verificarlo ejecutando el comando docker service list. La captura de pantalla de esto está a continuación.

Cuando se ejecuta el comando docker service ps, verá algo como esto:

Como puede ver, dice que el modo está replicado y las réplicas de este contenedor son 3. Ahora viene la mejor parte de este blog.

Para tener 2 réplicas de los servicios ejecutándose entre los tres contenedores, podemos usar el indicador de réplicas. Mira el comando a continuación:

$ docker service create --name 'Angular-App-Container' -p 4200: 4200 --replicas = 2 angular-image

Observará que estos 2 servicios tienen un equilibrio de carga entre los tres nodos del clúster. Ejecute el comando del proceso de servicio de Docker para verificar en qué nodos están activos los contenedores. Mire la captura de pantalla a continuación como referencia. Los contenedores están activos en un nodo administrador y un nodo trabajador.

Desde el nodo Worker, puede verificar que el contenedor se está ejecutando ejecutando el comando 'docker ps'.

Docker Swarm para alta disponibilidad

Ahora, para verificar realmente que existe una alta disponibilidad en nuestro clúster, necesitamos experimentar un escenario en el que uno de los nodos se cae y otros nodos en el clúster lo compensan. Podemos generar ese escenario deteniendo manualmente el contenedor desde uno de los nodos usando este comando:

$ docker stop Contenedor de aplicación angular

Ejecute el comando anterior en el nodo: Worker-1 donde se ejecuta el contenedor.Desde el administrador, ejecute el comando:

$ docker service ps Angular-App-Container

Ahora notará que el contenedor ahora se está ejecutando en el nodo: Worker-2 y Manager. Sin embargo, se ha cerrado desde el nodo: Worker-1. Lo mismo es visible en la siguiente captura de pantalla.

Así es como Alta disponibilidad de Docker se consigue. yoA pesar de que el contenedor está inactivo en Worker-1, la aplicación se puede procesar en el puerto número 4200 en ese nodo de trabajo. Esto se debe a que está conectado internamente a otros nodos del clúster y puede representar la aplicación en el navegador.

Alta disponibilidad después de ampliar los servicios

Ya sea en modo replicado o en modo global, podemos ampliar la cantidad de servicios que se ejecutan en nuestro clúster. E incluso después de la ampliación, podremos mantener una alta disponibilidad. Impresionante, ¿no?

secuencia de fibonacci java para bucle

Pero volviendo a nuestro punto, veamos lo fácil que es ampliar la cantidad de servicios en nuestro clúster. Suponiendo que tenemos 2 o 3 réplicas en nuestro clúster, escalemos los servicios a 5 con solo ejecutar un solo comando. El comando es:

$ docker service scale Angular-App-Container = 5

La captura de pantalla de esto está a continuación.

Al ejecutar el comando docker service list, puede notar que la cantidad de réplicas ahora es 5. Y al ejecutar el comando docker service ps junto con el nombre del servicio, puede ver cómo los 5 servicios están equilibrados y distribuidos en los 3 nodos. . Los comandos son:

$ docker service ls $ docker service ps Angular-App-Container

Y finalmente, en una configuración de Docker Swarm, si no desea que su gerente participe en los procedimientos y lo mantenga ocupado solo para administrar los procesos, entonces podemos drenar al administrador para que no aloje ninguna aplicación. Porque así es como funciona en el mundo, ¿no? Los gerentes son solo para administrar a otros trabajadores. De todos modos, el comando para hacer eso es:

$ actualización del nodo docker - administrador de drenaje de disponibilidad-1

Puede verificar si el administrador ahora participa en el clúster ejecutando el comando docker node list y el comando docker service ps:

$ docker node ls $ docker service ps Angular-App-Container

Ahora puede notar que los servicios de contenedor se han dividido entre los nodos de trabajador y el nodo de administrador se ha drenado de contener cualquier servicio. La captura de pantalla está a continuación.

Entonces, eso pone fin a este blog sobre Docker Swarm. Espero que este blog explique lo importante que es implementar el modo Swarm para lograr una alta disponibilidad. Esté atento a más blogs en esta serie de tutoriales de Docker.

Alternativamente, puede ver el video a continuación para comprender cómo funciona Docker Swarm. Todos los conceptos explicados anteriormente se han cubierto en el video.

Docker Swarm para alta disponibilidad | Tutorial de Docker | Tutorial de DevOps

Ahora que ha aprendido sobre Docker, consulte el por Edureka, una empresa de aprendizaje en línea de confianza con una red de más de 250.000 alumnos satisfechos repartidos por todo el mundo. Este curso de formación de certificación de Edureka Docker ayuda a los alumnos a adquirir experiencia en la implementación de Docker y su dominio.

Tienes una pregunta para nosotros? Menciónalo en la sección de comentarios y nos comunicaremos contigo.