Compartir comentarios
Las respuestas se generan en base a la documentación.

Conceptos clave del modo Swarm

Este tema presenta algunos de los conceptos exclusivos de las características de orquestación y gestión de clústeres de Docker Engine 1.12.

¿Qué es un swarm?

Las características de orquestación y gestión de clústeres integradas en Docker Engine están construidas usando swarmkit. Swarmkit es un proyecto independiente que implementa la capa de orquestación de Docker y se utiliza directamente dentro de Docker.

Un swarm consta de múltiples hosts de Docker que se ejecutan en modo Swarm y actúan como administradores (managers), para gestionar la pertenencia y la delegación, y trabajadores (workers), que ejecutan servicios del swarm. Un host de Docker determinado puede ser un administrador, un trabajador o realizar ambos roles. Cuando creas un servicio, defines su estado óptimo: número de réplicas, recursos de red y almacenamiento disponibles, puertos que el servicio expone al mundo exterior, entre otros. Docker trabaja para mantener ese estado deseado. Por ejemplo, si un nodo trabajador deja de estar disponible, Docker programa las tareas de ese nodo en otros nodos. Una tarea es un contenedor en ejecución que forma parte de un servicio de swarm y es gestionado por un administrador de swarm, a diferencia de un contenedor independiente.

Una de las ventajas clave de los servicios de swarm sobre los contenedores independientes es que puedes modificar la configuración de un servicio, incluidas las redes y volúmenes a los que está conectado, sin necesidad de reiniciar manualmente el servicio. Docker actualizará la configuración, detendrá las tareas del servicio con la configuración desactualizada y creará unas nuevas que coincidan con la configuración deseada.

Cuando Docker se ejecuta en modo Swarm, aún puedes ejecutar contenedores independientes en cualquiera de los hosts de Docker que participan en el swarm, así como servicios de swarm. Una diferencia clave entre los contenedores independientes y los servicios de swarm es que solo los administradores de swarm pueden gestionar un swarm, mientras que los contenedores independientes se pueden iniciar en cualquier demonio. Los demonios de Docker pueden participar en un swarm como administradores, trabajadores o ambos.

De la misma manera que puedes usar Docker Compose para definir y ejecutar contenedores, puedes definir y ejecutar pilas (stacks) de servicios de Swarm.

Continúa leyendo para conocer los detalles sobre los conceptos relacionados con los servicios de Docker Swarm, incluidos los nodos, servicios, tareas y balanceo de carga.

Nodos

Un nodo es una instancia de Docker Engine que participa en el swarm. También puedes pensar en esto como un nodo de Docker. Puedes ejecutar uno o más nodos en una sola computadora física o servidor en la nube, pero los despliegues de producción de swarm normalmente incluyen nodos de Docker distribuidos en múltiples máquinas físicas y en la nube.

Para desplegar tu aplicación en un swarm, envías una definición de servicio a un nodo administrador. El nodo administrador envía unidades de trabajo llamadas tareas a los nodos trabajadores.

Los nodos administradores también realizan las funciones de orquestación y gestión de clústeres necesarias para mantener el estado deseado del swarm. Los nodos administradores eligen un único líder para llevar a cabo las tareas de orquestación.

Los nodos trabajadores reciben y ejecutan las tareas enviadas desde los nodos administradores. Por defecto, los nodos administradores también ejecutan servicios como nodos trabajadores, pero puedes configurarlos para ejecutar exclusivamente tareas de administración y ser nodos exclusivos de administración. Un agente se ejecuta en cada nodo trabajador e informa sobre las tareas que tiene asignadas. El nodo trabajador notifica al nodo administrador el estado actual de sus tareas asignadas para que el administrador pueda mantener el estado deseado de cada trabajador.

Servicios y tareas

Un servicio es la definición de las tareas a ejecutar en los nodos administradores o trabajadores. Es la estructura central del sistema swarm y la raíz principal de interacción del usuario con el swarm.

Cuando creas un servicio, especificas qué imagen de contenedor utilizar y qué comandos ejecutar dentro de los contenedores en ejecución.

En el modelo de servicios replicados, el administrador del swarm distribuye un número específico de tareas de réplica entre los nodos basándose en la escala que establezcas en el estado deseado.

Para los servicios globales, el swarm ejecuta una tarea para el servicio en cada nodo disponible en el clúster.

Una tarea transporta un contenedor de Docker y los comandos a ejecutar dentro de él. Es la unidad de planificación atómica de swarm. Los nodos administradores asignan tareas a los nodos trabajadores de acuerdo con el número de réplicas establecidas en la escala del servicio. Una vez que una tarea se asigna a un nodo, no se puede mover a otro nodo. Solo se puede ejecutar en el nodo asignado o fallar.

Balanceo de carga

El administrador del swarm utiliza el balanceo de carga ingress para exponer los servicios que deseas poner a disposición externa del swarm. El administrador del swarm puede asignar automáticamente al servicio un puerto publicado o puedes configurar un puerto publicado para el servicio. Puedes especificar cualquier puerto no utilizado. Si no especificas un puerto, el administrador del swarm asigna al servicio un puerto en el rango de 30000-32767.

Los componentes externos, como los balanceadores de carga en la nube, pueden acceder al servicio en el puerto publicado de cualquier nodo en el clúster, independientemente de si el nodo está ejecutando actualmente la tarea para el servicio. Todos los nodos del swarm redirigen las conexiones ingress a una instancia de tarea en ejecución.

El modo Swarm tiene un componente DNS interno que asigna automáticamente una entrada DNS a cada servicio en el swarm. El administrador del swarm utiliza el balanceo de carga interno para distribuir las solicitudes entre los servicios dentro del clúster basándose en el nombre DNS del servicio.

¿Qué sigue?