Seidor
Kubernetes vs Docker Swarm

20 de marzo de 2024

Kubernetes vs Docker Swarm! cuál es la mejor opción?

Durante la creación de esta entrada de blog intentaremos hacer una comparación lineal de las diferencias y capacidades de estos sistemas de manejo de contenedores. Por un lado tendremos a Kubernetes v1.9 y por el otro Docker Swarm 1.2.9 también conocido como Docker Engine.

Que es Kubernetes?

No es más que un sistema de código abierto que nos ayuda con la implementación, escalado y administración de aplicaciones en contenedores, fue construido por Google utilizando un sistema interno de administración de clústeres llamado Borg “Omega”. Y se puede diagramar su base de trabajo de la siguiente manera:

diagrama-kubernetes-web

El nodo Master, ubica las cargas de trabajo del contenedor en grupos de usuarios en nodos de trabajadores o en si mismo. Los demás componentes son:

  • Etcd: Almacena los datos de configuración a los que puede acceder el Servidor API de Kubernetes Master utilizando http simple o API JSON.
  • Kube-Apiserver: es el centro de gestión para el nodo Master, facilita la comunicación entre los diversos componentes manteniendo con ello la salud del clúster.
  • Kube-Controller-Manager: es el encargado de asegurar la coincidencia entre el estado deseado del clúster y el estado actual, esto lo consigue esclando cargas de trabajo hacia arriba y hacia abajo.
  • Kube-Scheduler: coloca la carga de trabajo en el nodo que corresponde; en este diagrama particular, todas las cargas de trabajo se ubican localmente en su host.
  • Kubelet: recibe las especificaciones del pod del servidor API y administra los pods que se ejecutan en el host.

Para estar en consonancia con los términos utilizados comúnmente cuando se habla de Kubernetes, manejaremos la siguiente lista:

  • Pods: Kubernetes implementa y programa contenedores en grupos llamados pods. Los contenedores en un pod se ejecutan en el mismo nodo y comparten recursos como sistemas de archivos, espacio de nombres en el kernel y una dirección IP.
  • Despliegues: estos bloques de construcción se pueden usar para crear y administrar un grupo de pods. Los despliegues se pueden usar a nivel de servicio para escalar horizontalmente garantizando disponibilidad.
  • Servicios: son los puntos finales que se pueden direccionar por nombre y se pueden conectar a los pods utilizando los selectores de etiquetas. El servicio automáticamente enviará solicitudes por turnos entre pods. Kubernetes configurará un servidor DNS para el clúster que busca nuevos servicios y les permite ser direccionados por su nombre. Los servicios son la parte frontal de las cargas de trabajo de su contenedor.
  • Etiquetas: son pares e clave-valor unidos a objetos y se pueden usar para buscar y actualizar multiples objetos como un conjunto.

Que es Docker Swarm?

Es una herramienta que permite a los desarrolladores implementar contenedores en modo swarm. Un clúster Swarm consiste en Docker Engine implem entado en múltiples nodos. Los nodos de administración realizan la orquestación y la administración del clúster. Los nodos de trabajo reciben y ejecutan tareas desde los nodos de administración.

Un servicio consiste en tareas que puedes ejecutarse en nodos de Swarm. Los servicios se pueden replicar para ejecutarse en multiples nodos. En el modelo de servicio replicados, el equilibrio de carga de ingreso y el DNS internos se pueden usar para proporcionar puntos finales de servicio altamente disponibles.

Swarm Architecture

El usuario puede especificar declarativamente el estado de varios servicios para ejecutar en el clúster utilizando para ello ficheros de tipo YAML. Para esta arquitectura también listaremos algunos términos comúnmente mencionados.

  • Nodo: no es más que una instancia de un enjambre. Los nodos se pueden distribuir en las instalaciones o en nubes públicas.
  • Swarm: lo conforman un grupo de nodos (Docker Engine). En este modelo se orquestan servicios en lugar de ejecutar comandos de contenedores.
  • Nodos de administración: reciben las definiciones de servicio del usuario y distribuyen el trabajo a los nodos de trabajadores. Los nodos de administración también pueden realizar las tareas de los nodos de trabajador.
  • Nodos de trabajador: recopilan y ejecutan tareas desde los nodos de administración.
  • Tarea: es una unidad atómica de un servicio programado en un nodo trabajador.

Ya conociendo las arquitecturas y componentes de Kubernetes y Docker Swarm, pasaremos a realizar una comparativa de ambos ecosistemas.

Conclusiones

En cuanto a la popularidad y uso actual, Kubernetes es líder en todas las métricas cuando se compara con Docker Swarm, tiene más del 80% del interés en artículos de noticias, popularidad en herramientas como Github y búsquedas en la web.

Por otra parte no es menos cierto la diferencia en la complejidad implicada en implementar Kubernetes en comparación con Docker Swarm, pero Kubernetes ha tratado de mitigar este inconveniente incorporando una variedad de opciones de implementación como Minikube y Kubeadm.