El uso de contenedores permite ejecutar un conjunto de procesos separados del sistema facilitando su portabilidad a otros entornos y siendo muy rápidos de implementar. Los contenedores permiten empaquetar y aislar del sistema, las aplicaciones y el entorno necesario para que se ejecuten, permitiendo mover dichas aplicaciones entre distintos sistemas. Debido a su popularidad el uso de contenedores se ha extendido y han surgido herramientas que permiten administrarlos y organizarlos como son Kubernetes de Google y Swarm de Docker.
En este artículo veremos qué es Kubernetes, qué es Swarm y cuándo es recomendable utilizar cada uno de estos orquestadores de contenedores.
Qué es Kubernetes
Un contenedor es una imagen que empaqueta la aplicación con sus dependencias y su configuración, haciendo que la portabilidad sea más rápida y eficiente, y requiere mucho menos recursos de hardware.
Kubernetes (K8s) es una plataforma de código libre cuyo objetivo es el de administrar y organizar clusters de contenedores, evitando los procesos manuales relacionados para escalar e implementar aplicaciones en contenedores. Cuando se trabaja con grupos de contenedores, Kubernetes facilita su administración de forma rápida y efectiva.
Kubernetes está basado en 15 años de experiencia ejecutando cargas de trabajo en los servicios de Google, y en las aportaciones de una gran comunidad. Google utiliza Kubernetes para la gestión de los contenedores que dan lugar a sus servicios como Gmail o YouTube.
Características y fortalezas de Kubernetes
Las principales características de Kubernetes son:
- Gestión de las cargas de trabajo críticas, permitiendo optimizar los recursos y aumentar el rendimiento (best effort).
- Añadir contenedores de forma automática sin que afecte a la disponibilidad.
- Eliminar, reiniciar o reemplazar los contenedores que fallen o cuando sus nodos no estén disponibles. Kubernetes garantiza una alta disponibilidad.
- Facilita la orquestación de almacenamiento para crear sistema de almacenamiento en la nube o en red on premise.
- Ejecución de despliegues automatizados monitoreando el proceso y permitiendo revertir los cambios (rollbacks automáticos). Se integra con herramientas de despliegue DevOps.
- Escalabilidad de aplicaciones, incrementando los recursos necesarios o reduciéndose si no son utilizados (escalado automático).
- Utiliza su propia API por lo que pueden agregarse nuevas operaciones personalizadas.
- Soporta una gran variedad de contenedores como docker, rkt, cri-o o frakti.
- Cuenta con una inmensa comunidad, por lo que dispone de un gran soporte.
¿En qué casos es recomendable Kubernetes?
Dada su flexibilidad y todas las posibilidades de instalación que ofrece, Kubernetes puede utilizarse sin apenas restricciones. Entre el amplio abanico de posibilidades de uso de Kubernetes podemos nombrar:
- Servidores básicos (bare metal). Puede desplegarse el cluster sobre máquinas físicas utilizando distintas distribuciones de Linux.
- Virtualización on premise. Es posible montar un cluster en los servidores de las empresas, pero utilizando máquinas virtuales.
- Servicios PaaS, plataforma de aplicaciones como servicio.
- Servicios Cloud.
Qué es Swarm
Swarm es una herramienta integrada en Docker (aplicación para la creación contenedores) que permite agrupar una serie de hosts de Docker en un clúster y gestionarlos de forma centralizada, así como orquestar contenedores.
En el Docker Swarm se tendrán múltiples servidores que se pueden comunicar entre sí y tienen corriendo diversos contenedores. Alguno de estos servidores serán managers y podrán decidir dónde debe ir la carga, asignando en que nodo correrá cada contenedor.
Con Swarm se dispone de la API de Docker, pudiéndose administrar las tareas y la asignación de recursos para cada uno de los contenedores que forman el cluster, como si de una única máquina Docker se tratase.
Características y fortalezas de Swarm
Las principales ventajas de Swarm son:
- Se encuentra integrado con la API Docker Engine, por lo que es muy sencillo de utilizar para los que trabajen con Docker. Los comandos que utiliza son los propios de Docker (no permite agregar nuevas operaciones).
- Se basa en dos elementos principales: managers (host de Docker) y workers (servicios). Los managers pueden actuar también como workers y se encargan de dar órdenes a los workers.
- Creación de servicios a partir de una imagen y configuración para distribuirlos en clusters (como tareas). Estos servicios pueden ser replicados o globales.
- Redistribuye las cargas de trabajo si algún nodo falla asegurando una alta disponibilidad.
- Administración de grupos de contenedores (agregar, eliminar, balancear, etc.).
- Cuenta con funcionalidades como escalado manual (aumentar y disminuir recursos según necesidad) y rolling updates (gestión de actualizaciones sobre los servicios) integrado.
- No es necesaria ninguna instalación extra para tenerlo disponible con Docker.
¿En qué casos es recomendable Swarm?
Para proyectos donde se usa Docker, Swarm es una buena opción, ya que es muy rápido y fiable, encontrándose integrado de forma nativa en el propio Docker.
Docker Swarm es muy sencillo de implementar por lo que para pequeños proyectos sencillos es muy interesante su uso, evitando complejas configuraciones como las de otras soluciones como Kubernetes o Apache Mesos.
Cuándo es más recomendable usar cada una de estas herramientas
Kubernetes es el líder en la orquestación de contenedores, siendo la herramienta más popular y utilizada del mercado. En grandes proyectos o proyectos con una mayor complejidad es mejor utilizar Kubernetes, mientras que para proyectos más pequeños o sencillos la facilidad de uso de Swarm es más apropiado.
Kubernetes requiere una instalación manual, por lo que necesita configuraciones que no son automáticas como gestión de roles e IP. Swarm se encuentra ya integrado en Docker, por lo que es menos complejo de instalar y configurar que Kubernetes.
Kubernetes también maneja el control de acceso, los volúmenes y la integración de servicios en la nube mejor que Docker Swarm, proporciona formas flexibles de monitorización para verificar que los contenedores están activos y saludables.
En los casos en los que se deseen probar conceptos relacionados con la comunicación y dinámica de las aplicaciones, Swarm es una gran opción para hacerlo de forma rápida y con poco esfuerzo.
Si se requiere disponer de un mayor control sobre los posibles fallos, Swarm no es tan bueno como Kubernetes en este aspecto.
A la hora de la asignación o modificación de los recursos asignados a cada contenedor, Swarm permite realizarlo de forma manual (aunque muy rápido), mientras que Kubernetes puede realizar de forma automática.
La gestión de grupos de contenedores se ha convertido en una cuestión de vital importancia por lo que han surgido herramientas de orquestación de contenedores como Kubernetes y Docker Swarm.
Muchas grandes empresas como Google y Amazon utilizan y apoyan Kubernetes, realizando una gran apuesta sobre este orquestador de contenedores.