Hace algunos días publicamos un interesante versus llamado Kubernetes vs Docker, y hoy vamos a hablar de las tres principales tecnologías de la de la nube actual, es decir que vamos a hablar sobre: Kubernetes vs Mesos vs Docker Swarm, los tres son bastante parecidos, pero no iguales.
Básicamente sirven para lo mismo aunque cada uno tiene un enfoque diferente en la forma de gestionar del trabajo, ademas de la misma forma que cada uno tiene sus características particulares también tienen similitudes con el resto, aunque primero vamos a repasar un poco de historia para entender mejor sus virtudes.
Contenido
¿Diferencias entre Contenedores y Maquinas Virtuales?
Las Maquinas Virtuales o también llamadas VM, abreviatura de Virtual Machine, fueron el primer paso en la era de la nube, cuando había una aplicación se empaquetaba en una maquina virtual para distribuirla, dentro de ella iba el sistema operativo más aplicación, todo en un solo paquete.
En un mismo servidor se ejecutan varias VM lo que significa en un mismo hardware se ejecutan tantos sistemas operativos con sus respectivos servicios simultáneamente como maquinas virtuales haya.
Hoy día una buena parte de la nube actual se basa en contenedores que han ido remplazando a las Maquinas Virtuales ya que los contenedores tienen las ventajas de las VM en cuanto a portabilidad y donde ademas le agregan mayor eficiencia y velocidad, una característica que las VM solo pueden soñar.
En un sistema basado en contenedores solo tenemos un sistema operativo base para el servidor que permite gestionar los recursos una sola vez en lugar de tener un sistema operativo adicional por cada contenedor que ejecutemos.
Eso es porque los contenedores empaquetan solo la aplicación y sus dependencias prescindiendo de un sistema operativo dentro de ellos, esto hace que sea mucho más eficiente tanto el uso de memoria como de la CPU y de espacio en disco, permitiendo que queden más recursos de hardware disponibles para las aplicaciones.
Los sistemas basados en contenedores permiten una administración considerablemente más eficiente que si se tratase de una infraestructura de maquinas virtuales, supongamos el caso de que tengamos 10 aplicaciones corriendo en una maquina virtual cada una, aparte del sistema operativo base tendríamos otros 10 sistemas operativos mas que controlar, gestionar y mantener, uno por cada maquina virtual.
Por todo esto decirnos que con los contenedores disminuye los costos de mantenimiento, reduce la complejidad, incluso una gran aplicación formada por varios componentes puede dividirse en varios contenedores creando micro-servicios, esto también es una ventaja porque más de una aplicación puede compartir un micro-servicio en común.
¿Que es y porque necesitaríamos de un orquestador?
Ejecutar un contenedor docker por ejemplo es muy fácil.
¿Ahora, que pasa cuando tenemos docenas, cientos o incluso miles de contenedores que ejecutar en docenas o cientos de servidores?
Ahí la tarea se complica bastante si tenemos que hacerlo manualmente, por ello se han desarrollado lo que se llaman orquestadores.
Fueron desarrollados para gestionar de una forma sencilla la creación, distribución y ejecución de contenedores a través de una gran infraestructura distribuida, básicamente un orquestador es como un director de una orquesta sinfónica, se encarga de controlar y dirigir cada aspecto del sistema, desde crear los contenedores hasta verificar su correcta ejecución y manejar los errores que puedan ocurrir.
¿Que orquestadores hay?
Hay varios en realidad, dentro de las opciones OpenSource tenemos tres sistemas excelentes que son de los que vamos a hablar: Kubernetes, Mesos y Swarm
Swarm
La opción de Docker Swarm es la más sencilla de las tres, esta basada en una arquitectura controlador y nodos, es el orquestador oficial de Docker y está soportado por uno de los pesos pesados de la nube como AWS, por contra tiene el gran defecto que no existe un control sobre fallas de los nodos lo que provoca inconvenientes y lo hace un tanto peligroso para servicios de alta disponibilidad, es un proyecto que aun debe avanzar mucho para alcanzar a los siguientes dos de la lista.
En Swarm esta formado por dos partes, una parte son llamados Managers y otros son llamados Workers, entre los diferentes Managers que haya en el cluster, se organizan automáticamente para designar a uno como un líder que controlara todo el cluster asignando las tareas a los diferentes Workers, los Managers también pueden funcionar como Workers.
En un cluster Docker Swarm se crean Servicios a partir de una imagen y cierta configuración que le demos al contenedor, que luego son las que se distribuyen en el cluster como Tareas
Hay dos tipos de Servicio: Replicados y Globales, en el caso de los replicados le debemos decir cuantas copias queremos y Swarm las creara las tareas necesarias y las distribuirá entre los Workers, en el caso que sea Global, se creara una tarea por cada Worker del cluster.
Mesos
En el caso Apache Mesos comenzó como un proyecto de investigación de la Laboratorio Nacional Lawrence Berkeley que es parte de la Universidad de Berkley y hoy el desarrollo es llevado adelante por la Apache Software Foundation.
Mesos ofrece un kernel para cluster que corren en cada nodo y ofrecen plataformas como Hadoop o ejecución de contenedores Docker, Rkt y AppC, de las 3 opciones es la que más recursos consume, un punto a tener muy en cuenta si lo utilizamos en proveedores como AWS o Azure que cobran según uso de recursos utilizados.
Mesos se basa en una configuración Master y Slaves, donde el nodo Master se encarga de controlar los recursos a disponibles que luego asignara dependiendo de la disponibilidad en el cluster y de ciertos parámetros preestablecidos.
Los recursos son asignados a los Frameworks, tenemos un variedad que puede ser por ejemplo: Aurora, Marathon, Hadoop o Spark entre otros, estos constan de un planificador y un lanzador, el planificador se encarga de administrar los recursos ofrecidos por el Master y el lanzador se encarga de ejecutar las tareas en los diferentes Slaves haciendo uso de esos recursos asignados.
Ademas un cluster Mesos cuenta con Zookeeper que es un sub proyecto de Hadoop para ofrecer sincronización, coordinación y planificación de procesos distribuidos así como guardar información de forma centralizada.
Mesos tiene la ventaja de ser tolerante a fallos, en caso de fallar el Master el sistema se reorganiza automáticamente asignando el rol de Master a otro nodo.
Kubernetes
Kubernetes al igual que los anteriores se encarga de automatizar el despliegue de tareas a través del datacenter con diferencia de los demás en lugar de gestionar contenedores directamente maneja en lo que se denomina Pods que esta formado por uno o mas contenedores que forman un servicio e incluso permite interconectar diferentes pods, soporta una variedad de contenedores aparte de Dockers e incluso puede trabajar en conjunto con Mesos por ejemplo.
Kubernetes también se basa en un modelo de nodos Master y Slaves, donde el Master también puede actuar de nodo esclavo, el controlador Master es el encargado de la creación de los Pods y la distribución de los mismos en los diferentes nodos según la disponibilidad de recursos en el cluster, ademas cuanta con un control estricto sobre la «vida» de los pods, pudiendo controlar los fallos y errores de los mismos y reponer los pods que fallen con otros pods idénticos, ademas cuenta con un sistema Labels y Selectors que son para facilitar la identificación de los pods para gestionarlos de forma mas sencilla.
Ademas Kubernetes maneja las ip disponibles como un recurso mas, pudiendo asignar las ip directamente a los pods (contenedores) y como ademas también realiza la gestión DNS permite hacer un balanceo de carga de forma automática.
Conclusión
Comparado con Docker Swarm, Kubernetes es mucho mas completo y complejo, ademas que lleva mucho más tiempo la implementación y puesta a punto de una infraestructura basada en Kubernetes, por otro lado Swarm aun le falta madurar un poco como mencionamos antes, sobre todo en el control de fallos de los nodos.
Ademas otra contra por ejemplo es solo gestiona contendedores Docker mientras que tanto Kubernetes y Mesos soportan varios tipos de contenedores, en el caso de Mesos aparte de Docker también soporta Rkt y AppC, mientras que Kubernetes soporta una variedad más amplia.