Los motores de orquestación de contenedores (COE) facilitan la gestión de las cargas de trabajo contenedorizadas al automatizar tareas operativas como la programación, el equilibrio de carga, la escalada, la conexión en red, la alta disponibilidad (HA) y la gestión de logs. Kubernetes y Apache Mesos son dos de los COE más populares.
Estas dos tecnologías adoptan enfoques distintos en lo que respecta a la gestión de contenedores. Kubernetes funciona meramente como un orquestador de contenedores. Mesos funciona más como un "sistema operativo para el datacenter".
En este artículo, hablaremos de Kubernetes y Mesos, y compararemos sus funciones principales. Sin embargo, empezaremos por presentar los COE e indicaremos las razones por las que son esenciales para gestionar los contenedores.
¿Por qué necesitas motores de orquestación de contenedores?
La mayoría de las aplicaciones distribuidas en la actualidad se basan en contenedores. Los contenedores necesitan menos recursos y ayudan a que el desarrollo de aplicaciones sea más rápido y seguro.
Gestionar diez o veinte contenedores es bastante sencillo, pero los equipos pueden verse abrumados cuando el número de contenedores pasa a ser de cientos o miles en una red distribuida. Aunque los contenedores son ligeros y su ciclo de vida es breve, utilizarlos en grandes clústeres hace que haya muchas piezas en movimiento que necesitan coordinarse simultáneamente.
Además, la mayoría de los entornos de contenedores de producción pueden ser complejos. Pueden ejecutar varios sistemas operativos (o el mismo sistema operativo con distintas versiones de kernel) y tienen configuraciones complejas de red y seguridad. Los entornos multinube o híbridos añaden todavía más complejidad.
Aquí es donde entran en juego los COE.
Los COE simplifican y automatizan tareas relacionadas con la gestión de contenedores, entre las que se incluyen:
- Despliegue
- Equilibrio de carga
- Programación de contenedores
- Asignación de recursos
- Monitorización del rendimiento
- Configuración de redes
La automatización facilita en gran medida la gestión de entornos contenedorizados a gran escala, gracias a lo cual, el equipo de DevOps puede dedicarse a tareas de mayor valor añadido.
Los COE también garantizan la disponibilidad de las aplicaciones al automatizar las comprobaciones de seguridad. El equilibrio de carga se asegura de que las solicitudes se dirijan automáticamente a instancias de contenedores en buen estado, y el autoescalado comprueba que haya una cantidad suficiente de contenedores disponibles para soportar la carga actual.
Breve introducción a Kubernetes y Mesos
Kubernetes es el sistema de gestión y orquestación de contenedores lanzado por Google en 2014. Dada su dependencia de Docker, Google desarrolló Kubernetes para implementar y programar contenedores a escala, gestionar recursos de clústeres, lograr la alta disponibilidad y enrutar el tráfico de las aplicaciones.
En la actualidad, la mayoría de los proveedores de servicios en la nube (incluidos los principales) admiten el uso de Kubernetes y proporcionan infraestructura e integraciones para ejecutar cargas de trabajo alojadas en Kubernetes.
Entre algunas de las principales características de Kubernetes se incluyen:
- Autoescalado
- Orquestación del almacenamiento
- Gestión del volumen
- Gestión de secretos y configuración
- Reversiones automáticas
- Ejecución por lotes
- Detección de servicios
- Empaquetado automático de ubicaciones
Kubernetes también cuenta con un gran apoyo de la comunidad DevOps, y muchos proveedores ofrecen aplicaciones gratuitas o comerciales que añaden funciones adicionales a Kubernetes.
Mesos es un kernel distribuido creado en 2009 por estudiantes de doctorado de la Universidad de California, Berkeley. Abstrae recursos informáticos como CPU, memoria y almacenamiento de máquinas (tanto físicas como virtuales) que se ejecutan en instalaciones locales o en la nube. El kernel de Mesos se ejecuta en cada máquina en entornos distribuidos, y tanto las cargas de trabajo contenedorizadas como las que no lo están pueden utilizar la API de Mesos para la gestión de recursos y la programación.
Al comparar Mesos con Kubernetes en este artículo, nos referiremos a Mesos y a Marathon. Marathon es un complemento para el sistema operativo de datacenter de Mesosphere (DC/OS) y Apache Mesos, que permite a los usuarios gestionar contenedores fácilmente.
Entre las características de la combinación de Mesos y Marathon se incluyen:
- API
- Escalabilidad lineal
- Aislamiento conectable
- Compatibilidad con varias plataformas
- Planificación a dos niveles
- Tolerancia a fallos
- Maestro replicado mediante ZooKeeper
- Compatibilidad con múltiples lenguajes
Mesos es una opción popular entre los gigantes tecnológicos, por ejemplo Twitter, Netflix y Airbnb.
Kubernetes y Mesos: comparación de funciones
Al evaluar una plataforma de COE, algunos de los factores más importantes que deben tenerse en cuenta son la alta disponibilidad, el equilibrio de carga, el autoescalado, el almacenamiento y la conexión en red.
Alta disponibilidad
Los pods de Kubernetes pueden replicarse en múltiples nodos (máquinas virtuales y servidores físicos) para garantizar que la aplicación permanezca en línea incluso si falla uno de los nodos del clúster.
El plano de control de Kubernetes gestiona los pods y los nodos de trabajo en todo el clúster, y lo hace en función del estado del nodo. Kubernetes se encarga de planificar, así como de detectar y dar respuesta a los fallos. Puedes hacer que Kubernetes tenga una alta disponibilidad al implementar una topología apilada o externa de etcd con múltiples componentes clave de la arquitectura (por ejemplo, múltiples maestros o réplicas de etcd).
En el caso de Mesos, las aplicaciones se ejecutan en clústeres con múltiples agentes Mesos para aumentar la disponibilidad. Puedes hacer que Mesos tenga una alta disponibilidad al implementar entre tres y cinco maestros, un líder y el resto de los nodos como copias de seguridad. Apache ZooKeeper elige el líder y detecta automáticamente a los maestros, esclavos y controladores de programación.
Equilibrio de carga
Kubernetes expone los pods externamente utilizando los "servicios" (grupo de pods con un nombre común). Así, los servicios se descubren entre sí de forma dinámica sin necesidad de direcciones IP codificadas. Los servicios coordinan las conexiones a los pods para ofrecer funciones de equilibrio de carga.
Puedes implementar diferentes estrategias de equilibrio de carga con Kubernetes, incluidas:
- Round-robin
- Equilibrio de carga Round-robin L4 Kube-proxy
- Equilibrio de carga Round-robin L7
- Hash consistente/Hash de anillo
Mesos-DNS ofrece servicios básicos de equilibrio de carga para tu aplicación. Genera registros SRV para cada tarea de Mesos y los traduce a la dirección IP y el puerto correctos en la máquina de la aplicación. También puedes utilizar Marathon-lb para facilitar el equilibrio de carga.
Mesos es compatible con funciones avanzadas, como:
- Conexiones persistentes (sticky)
- Descarga de SSL
- Equilibrio de carga basado en VHost, para que puedas especificar máquinas virtuales concretas para tu aplicación
Autoescalado
Kubernetes te permite definir un número objetivo de pods utilizando implementaciones. Para activar el autoescalado, también puedes definir umbrales de métricas de recursos, como la utilización de la CPU o la memoria.
Mesos monitoriza continuamente el número de contenedores y programa un contenedor en otro nodo esclavo en caso de fallo. No permite de forma nativa el autoescalado mediante métricas de recursos, pero hay algunos componentes respaldados por la comunidad.
el almacenamiento;
Kubernetes es compatible con volúmenes efímeros no persistentes como emptyDir, configMap, downwardAPI y CSI efímero para almacenamiento a corto plazo.
También admite almacenamiento persistente (archivo o bloque), incluidos iSCSI, NFS, FC y almacenamiento en la nube como los disponibles en AWS o Azure. Las aplicaciones que se ejecutan en contenedores alojados en Kubernetes no se comunican directamente con el almacenamiento, ya que Kubernetes abstrae la capa.
Mesos permite el almacenamiento local persistente en recursos reservados para aplicaciones con estado. Los contenedores deben ejecutarse en el mismo nodo porque los volúmenes se crean a nivel local en el nodo.
Mesos admite el almacenamiento externo persistente, pero eludir la gestión de recursos dificulta el control de cuotas, la reserva y el reparto equitativo.
Conexión en red
Kubernetes asigna IP únicas a los pods, eliminando así la necesidad de asignar puertos de contenedor al puerto host. Funciona como una red plana, con una red para pods y otra para servicios. Los pods pueden comunicarse libremente con otros pods y servicios. IP tables controla la conectividad entre los pods y gestiona la mayoría de las reglas de red y reenvío de puertos.
Mesos admite dos tipos de redes: IP por contenedor y mapeo de puertos de red. Los contenedores no obtienen sus IP de manera predeterminada, pero el uso de la integración con Calico proporciona a cada contenedor de Mesos su propia IP. De este modo, se evitan conflictos de puertos, se elimina la necesidad de asignación dinámica de puertos y se habilita la detección de servicios basada en registros A de DNS. Los contenedores no pueden comunicarse entre sí en un host local.
Registra todo y responde a todo, y hazlo de manera gratuita
Falcon LogScale Community Edition (previamente, Humio) ofrece una plataforma de gestión de logs moderna y gratuita para la nube. Benefíciate de la ingesta de datos en tiempo real para lograr una visibilidad instantánea en todos los sistemas distribuidos y prevenir y resolver incidentes.
Falcon LogScale Community Edition, disponible al instante y sin coste alguno, incluye lo siguiente:
- Ingesta de hasta 16 GB al día
- Retención de 7 días
- No necesita tarjeta de crédito
- Acceso continuo sin periodo de prueba
- Registro sin índices, y alertas y paneles de control en tiempo real
- Acceso a nuestro marketplace y paquetes, incluidas guías para crear nuevos paquetes
- Aprendizaje y colaboración en una comunidad activa