Si habéis llegado hasta aquí y sois ávidos lectores de Colaboratorio ya estaréis al tanto de en qué consiste la tecnología de contenedores y microservicios. En cualquier caso, siempre viene bien refrescar la memoria.

Como ya os comenté, un contenedor permite a cualquier desarrollador/a (son, generalmente, sus principales usuarios) empaquetar una aplicación con todas las partes que necesita, esto es, sus bibliotecas y dependencias, y usarlo todo como un solo paquete. Como si se tratase de una máquina virtual muy ligera con su propio sistema de ficheros, su propio espacio de usuarios y procesos o sus propias interfaces.

Una vez que entendemos esto, vamos a responder a la primera parte de la pregunta del título.

¿Qué son Kubernetes y Docker?

Tanto Kubernetes como Docker son dos de los principales actores en lo referente a la orquestación de contenedores. Ambos tienen muy buena reputación, no son recién llegados, y están muy bien posicionados en lo que respecta a esta tecnología. Estos productos nos permiten manejar un grupo de servidores que pueden ejecutar uno o más servicios en ellos.

Kubernetes

Como seguramente ya sabrás, Kubernetes es una plataforma open source creada por el gigante Google, con la intención de gestionar las operaciones de implementación de contenedores, escalado y la automatización de estos, mediante clústeres de hosts. Cada vez es más usada en el mundo empresarial gracias a su modularidad, que permite el autoescalado, así como la replicación, el reinicio o la colocación automáticos.

Otra de sus ventajas es que distribuye la carga entre los diversos contenedores. Gracias a la función de grupos, facilita el despliegue de aplicaciones en nubes públicas y privadas.

Docker Swarm

Actualmente Docker ofrece la plataforma Docker Swarm como plataforma de orquestación de contenedores, en código abierto. Permite que cualquier aplicación, servicio o herramienta que se ejecute con contenedores Docker funcione igual de bien en Swarm.

Como os expliqué en mi blog personal, Swarm convierte un grupo de hosts Docker en un host virtual único. Es especialmente útil para las personas que intentan sentirse cómodas con un entorno orquestado. O que necesitan adherirse a una técnica de implementación simple pero que tienen también más de un entorno de nube o una plataforma en particular para ejecutarlo.

Logos de Docker y de Kubernetes

Diferencias entre Kubernetes y Docker Swarm

Aunque ambas plataformas de orquestación de código abierto ofrecen muchas funcionalidades similares, existen algunas diferencias fundamentales en su forma de trabajar. A continuación se detallan algunos de los puntos notables. Veamos sus ventajas y desventajas.

Definición de la aplicación

Una aplicación se puede implementar en Kubernetes utilizando una combinación de servicios (o microservicios), implementaciones y pods.

En cambio, en Swarm las aplicaciones se pueden implementar como microservicios o servicios. Los archivos YAML se pueden utilizar para identificar contenedores múltiples. Además, con Docker compose se puede instalar la aplicación.

Redes

En el producto de Google el modelo de red es plano, permitiendo que todos los pods interactúen entre sí. Las políticas de red especifican cómo lo hacen. Esta red se implementa típicamente como una superposición. El modelo necesita dos CIDR: uno para los servicios y otro desde el que los pods adquieren una dirección IP.

En el caso de Swarm el nodo que se une a un clúster de enjambre genera una red superpuesta para servicios que abarcan cada host en el enjambre de Docker y una red de puente solo para hosts de contenedores. Los usuarios tienen la opción de cifrar el tráfico de datos del contenedor mientras crean una red superpuesta por sí mismos en el enjambre de la ventana acoplable.

Escalable 

Para sistemas distribuidos Kubernetes es más un marco todo en uno. Es un sistema complejo porque proporciona fuertes garantías sobre el estado del clúster y un conjunto unificado de API. Esto ralentiza la escala e implementación del contenedor.

En comparación con Kubernetes, Swarm puede desplegar contenedores mucho más rápido y esto permite tiempos de reacción más rápidos para escalar a demanda.

Alta disponibilidad 

Todos los pods en Kubernetes se distribuyen entre los nodos. Esto ofrece una alta disponibilidad al tolerar la falla de la aplicación. Los servicios de equilibrio de carga detectan vainas poco saludables y se deshacen de ellas. Esto admite alta disponibilidad.

Como los servicios se pueden replicar en los nodos de Docker Swarm, también entonces disponemos de alta disponibilidad. Los nodos del administrador (managers) son responsables de todo el clúster y manejan los recursos de los nodos de trabajo.

Configuración 

Kubernetes utiliza sus propias definiciones de cliente, API y YAML, y cada una de ellas difiere de los equivalentes del acoplador estándar. Es decir, no se puede utilizar Docker Compose ni Docker CLI para definir contenedores. Al cambiar de plataforma, las definiciones y los comandos de YAML deben reescribirse. Esto puede llegar a ser un problema.

Volviendo a Swarm, su API no abarca por completo todos los comandos de Docker, pero ofrece muchas de sus funcionalidades y es compatible con la mayoría de sus herramientas.

Conociendo Kubernetes

En una próxima entrada de esta serie veremos cómo funciona esta tecnología creando una plataforma con diferentes nodos para apreciar la alta disponibilidad ofrecida por Kubernetes.

Para ello vamos a utilizar las diferentes herramientas disponibles actualmente para su creación y gestión sobre nodos con sistema operativo Ubuntu 18.04. Todo esto lo haremos sobre la infraestructura cloud de nuestro proveedor de confianza: Clouding.io.


Más información

Si queréis ampliar esta información podéis consultar la documentación oficial:

Kubernetes.io – ¿Qué es Kubernetes?
Docs.docker.com – Swarm


Imagen de cabecera: foto de Kaique Rocha en Pexels, modificada por @aldobelus para Colaboratorio.

avatar

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

  Subscribe  
Notificarme de