Si ha estado organizando su flujo de trabajo de desarrollo en contenedores, estará de acuerdo en que Docker es una de las mejores opciones para el control de versiones. Sin embargo, Docker Swarm es una de las funciones de Docker que se utiliza para orquestar aplicaciones complejas.

El mecanismo de trabajo de Docker Swarm puede ser difícil de descifrar al principio. Pero no te preocupes, lo desglosaremos en este artículo. Entonces, ¿qué es Docker Swarm? ¿Por qué usarlo? Y, ¿cómo funciona?

¿Qué es Docker Swarm y cómo funciona?

Docker Swarm se refiere a un grupo de hosts Docker (computadoras) conectados en red como un clúster para entregar tareas específicas. Cada host de Docker en este clúster es un nodo, también llamado nodo trabajador.

Para garantizar la distribución eficiente de tareas, necesita un nodo administrador. Idealmente, una inicialización del modo Docker Swarm comienza con el nodo administrador y los nodos posteriores se convierten en trabajadores.

Como operador, solo necesita interactuar con el nodo administrador, que pasa instrucciones a los trabajadores. Invariablemente, los nodos trabajadores reciben la asignación de tareas del nodo administrador y las ejecutan en consecuencia.

instagram viewer

Sin embargo, el nodo administrador también puede participar en la ejecución de tareas (como trabajador) o enfrentarse directamente a la administración. Puede evitar la programación de tareas en el administrador cambiando su estado de activo a fuga. Pero su decisión de asignar esta doble función puede depender de varios factores. Esencialmente, desea asegurarse de que tenga suficientes recursos para manejar varios roles antes de hacerlo.

Los nodos fallan. Entonces, el nodo administrador monitorea activamente el estado de cada nodo trabajador y activa un mecanismo tolerante a fallas para reprogramar la tarea de un nodo fallido a otro.

Pero, ¿y si el nodo administrador también se bloquea? Curiosamente, el enjambre sigue corriendo. El único inconveniente es que ya no podrá comunicarse con el nodo administrador para controlar el clúster.

El enfoque común a prueba de fallas para evitar esto es asignar la función de administrador a muchos nodos (Docker recomienda un máximo de siete por clúster). A continuación, puede seleccionar el nodo de administrador principal de ellos. Cuando el administrador principal falla, uno de los administradores en espera asume el rol.

Sin embargo, no tiene que preocuparse por el cambio de roles entre los nodos o el mantenimiento del estado en un clúster. El algoritmo de consenso de balsa (un método tolerante a fallas) integrado en Docker SwarmKit se encarga de esto.

¿Por qué usar Docker Swarm?

Docker Swarm es útil para implementar aplicaciones complejas con perspectivas de alta escalabilidad. Uno de sus principales casos de uso es descentralizar microservicios. Luego, cada microservicio comparte un contenedor similar con los de otros nodos trabajadores.

Otra razón para usar Docker Swarm es que varios hosts ejecutan tareas al mismo tiempo en un clúster. Esto contrasta con Docker Compose, que solo le permite ejecutar varios contenedores en un motor de Docker.

Este atributo escalable de Docker Swarm permite que las aplicaciones estén disponibles constantemente con latencia cero. Es incluso una de las razones por las que desea elija Docker sobre otras herramientas de virtualización.

¿Y lo que es más? A diferencia de los contenedores Docker individuales, donde un contenedor se detiene cuando falla, Docker Swarm redistribuye automáticamente las tareas entre los nodos trabajadores disponibles cada vez que uno falla.

Docker Swarm también mantiene una copia de seguridad de cada estado. Por lo tanto, siempre puede revertir las nuevas configuraciones de enjambre al estado de una anterior. Digamos que el nodo administrador en un enjambre anterior falla; puede iniciar un nuevo clúster con más nodos administradores y revertirlo para adaptar la configuración del anterior.

También es importante mencionar que la interacción entre el nodo administrador y los nodos trabajadores es segura.

Docker tiene muchas alternativas, y uno de los más cercanos es Kubernetes. Sin embargo, Docker Swarm es fácil de usar y está más automatizado. Por ejemplo, si bien es posible que deba equilibrar la carga manualmente en otras herramientas de orquestación como Kubernetes, Docker Swarm presenta un equilibrio de carga automático, lo que facilita la vida de DevOps.

La arquitectura Docker Swarm

La arquitectura de Docker Swarm gira en torno a servicios, nodos y tareas. Sin embargo, cada uno tiene un papel que desempeñar para ejecutar la pila con éxito.

Servicios

El servicio Docker Swarm detalla la configuración de la imagen de Docker que ejecuta todos los contenedores en un enjambre. Incluye información sobre las tareas en un clúster. Por ejemplo, un servicio podría describir un Configuración del servidor SQL dockerizado.

Cuando ejecuta un servicio, obliga al nodo administrador a sincronizarse con sus configuraciones. Luego, el nodo administrador ejecuta el resto de los nodos trabajadores en función de la configuración especificada en el servicio.

Los servicios en Docker Swarm pueden ser globales o replicados.

La diferencia entre ellos es que, mientras que los servicios globales definen solo una tarea para todos los nodos de un clúster, los servicios replicados especifican la cantidad de tareas por nodo.

Nodos

Un nodo en Docker Swarm es una instancia de todo el tiempo de ejecución de Docker, también conocido como el motor de Docker. Los nodos de enjambre pueden ser máquinas físicas o virtuales. Piense en esto como una red de computadoras que ejecutan procesos similares (contenedores).

Sin embargo, por lo general, los nodos abarcan varias computadoras y servidores que ejecutan el motor Docker en aplicaciones de la vida real. Y como se mencionó anteriormente, un nodo puede ser un administrador o un nodo trabajador, según el rol.

El nodo administrador escucha el latido del enjambre y controla los nodos trabajadores, que ejecutan las tareas que les asigna el nodo administrador. Como se indicó anteriormente, puede tener más de un nodo administrador en un enjambre. Pero idealmente, intente limitar el número a menos de siete, ya que agregar demasiados nodos de administrador podría reducir el rendimiento del enjambre.

Tareas

Una tarea define el trabajo asignado a cada nodo en un Docker Swarm. En segundo plano, la programación de tareas en Docker Swarm comienza cuando un orquestador crea tareas y las pasa a un programador, que crea una instancia de un contenedor para cada tarea.

Luego, el nodo administrador usa el programador para asignar y reasignar tareas a los nodos según se requiera y se especifique en el servicio de Docker.

Enjambre Docker vs. Docker Compose: ¿Cuáles son las diferencias?

La gente a menudo usa Docker Compose y Docker Swarm indistintamente. Aunque ambos implican ejecutar múltiples contenedores, son diferentes.

Mientras que Docker Compose le permite ejecutar varios contenedores en un solo host, Docker Swarm los distribuye entre varios motores Docker en un clúster.

Utiliza Docker Compose cuando necesita activar contenedores separados para cada servicio en su aplicación. Por lo tanto, cuando un componente falla, no interfiere con los demás. Sin embargo, cuando la máquina anfitriona falla, toda la aplicación también falla.

Sin embargo, Docker Swarm lo ayuda a ejecutar muchos contenedores en nodos agrupados. Entonces, cada componente de su aplicación se encuentra en varios nodos. Y cuando un nodo que maneja un componente de la aplicación falla, el enjambre asigna su tarea a otro nodo dentro del clúster y reprograma las tareas en ejecución, evitando el tiempo de inactividad.

Por lo tanto, si bien es posible que tenga tiempo de inactividad en Docker Compose, Docker Swarm garantiza que su aplicación siga funcionando con la ayuda de servidores de respaldo (nodos de trabajo). Sin embargo, Docker 1.13 admite la implementación de Docker Compose en modo Swarm mediante el despliegue de la pila acoplable dominio.

Docker Swarm lo ayuda a implementar aplicaciones complejas

La contenedorización ha superado a las máquinas virtuales en el diseño de software de integración continua y entrega continua (CI/CD). Por lo tanto, comprender el meollo del mecanismo de Docker Swarm es una habilidad adicional si está buscando convertirse en un invaluable experto en DevOps.

Probablemente sepa cómo hacer girar un contenedor Docker o incluso ejecutar un Docker Compose para varios contenedores en un host. Pero Docker Swarm es más útil para implementar aplicaciones con una arquitectura compleja. Divide los procesos en unidades, mejora el acceso al tiempo de ejecución y reduce o incluso elimina las posibilidades de tiempo de inactividad.