De Docker a Kubernetes

De Docker a Kubernetes

Los contenedores se han convertido sin duda en una palabra de moda tecnológica en los últimos años. El surgimiento y auge de la tecnología de contenedores, junto con la arquitectura de microservicios, DevOps y los conceptos nativos de la nube que ha generado, han tenido un profundo impacto en la industria del software.

Los contenedores ofrecen numerosas ventajas. Su encapsulación completa, su cómoda implementación y su arranque y programación ligeros han contribuido a su adopción generalizada. Cuando se combinan con sistemas de orquestación, los contenedores simplifican la gestión y la iteración de aplicaciones, independientemente de la complejidad del sistema. Además, las aplicaciones contenerizadas presentan una excelente portabilidad, ejecutándose sin problemas en cualquier entorno que disponga de un runtime de contenedores conforme a los estándares.

Los contenedores ligeros y la computación en la nube elástica se complementan a la perfección. La adaptabilidad de los contenedores a diversos entornos operativos y su rápida capacidad de arranque, junto con la enorme escalabilidad de recursos de la expansión dinámica de la nube, permiten que las aplicaciones contenerizadas en la nube se escalen a miles de instancias en poco tiempo. Por lo tanto, la nube sirve como plataforma ideal para aplicaciones contenerizadas, facilitando su ejecución y expansión.

Antes del reconocimiento generalizado de Docker, los proveedores de la nube ya estaban explorando y utilizando tecnologías similares a los contenedores. La naturaleza multiinquilino de la nube requiere aislamiento de entornos, lo que convierte a los proveedores de la nube tanto en usuarios como en beneficiarios de la contenerización. Mientras que algunos optaron por soluciones propietarias, no todos abrazaron directamente a Docker.

Por ejemplo, AWS Elastic Beanstalk empleaba una tecnología privada similar a contenedores para aislar aplicaciones web. Posteriormente, amplió su soporte para aplicaciones empaquetadas como contenedores Docker.

Con el auge de Docker, los principales proveedores de nube pública comenzaron unánimemente a ofrecer servicios PaaS estandarizados relacionados con contenedores, mejorándolos continuamente. Al rastrear la evolución de PaaS de contenedores, se revelan distintas etapas de desarrollo.

Inicialmente, las plataformas de contenedores en la nube priorizaban la ejecución sin problemas de contenedores Docker en la nube. Estos servicios se centraban principalmente en ayudar a los usuarios a crear clústeres de máquinas virtuales subyacentes, aliviando la carga de la gestión manual de las mismas. Sin embargo, a medida que las aplicaciones contenerizadas se volvieron más complejas, la orquestación emergió como una necesidad apremiante. En consecuencia, los proveedores introdujeron y fortalecieron sus soluciones de orquestación de contenedores.

Durante la era de los marcos de orquestación en competencia, algunos proveedores adoptaron un enfoque multifacético. Por ejemplo, Azure Container Service de Microsoft admitía Docker Swarm, Apache Mesos (DC/OS) y Kubernetes. Otros, como AWS con su Elastic Container Service (ECS), optaron por métodos de orquestación propietarios para mejorar la integración con sus servicios en la nube existentes.

Como sabemos, Kubernetes emergió como el vencedor en la batalla de los marcos de orquestación, convirtiéndose en el estándar de facto. Los proveedores de la nube cambiaron rápidamente de marcha, priorizando el soporte para Kubernetes en la nube y lanzando servicios específicos de Kubernetes como AWS Elastic Kubernetes Service (EKS) y Azure Kubernetes Service (AKS). De manera similar, Alibaba Cloud eliminó gradualmente el soporte de Swarm en su servicio de contenedores, centrándose en la edición de Kubernetes (ACK).

El soporte de la nube para la tecnología de contenedores ha evolucionado junto con el ecosistema de contenedores, desempeñando los proveedores de la nube roles significativos como participantes y facilitadores. Por ejemplo, Google Kubernetes Engine (GKE) en Google Cloud, al ser “nacido y criado” dentro del ecosistema, ha establecido constantemente el punto de referencia para los servicios de Kubernetes basados en la nube.

Los servicios de Kubernetes basados en la nube ofrecen varias ventajas distintivas sobre los clústeres de Kubernetes autoalojados.

En primer lugar, debido a la naturaleza multiinquilino de la nube, muchos servicios de Kubernetes en la nube eliminan la necesidad de aprovisionar nodos Master. Los usuarios solo necesitan crear y pagar por los nodos Worker, mientras que la plataforma en la nube proporciona y gestiona los nodos Master, reduciendo el consumo de recursos y los costos operativos.

En segundo lugar, a pesar de su complejidad, Kubernetes posee un diseño abstracto excepcional que permite extensiones amplias y flexibles. Los proveedores de la nube han invertido mucho en esta área, permitiendo que varios componentes IaaS y PaaS de sus plataformas se integren sin problemas con el ecosistema de Kubernetes, fomentando una integración más estrecha.

Por ejemplo, en el ámbito de los Ingress Controllers, comúnmente utilizados para dirigir el tráfico externo, existen implementaciones de controladores de balanceo de carga basados en la nube, como AWS ALB Ingress Controller y Azure AKS Application Gateway Ingress Controller. Estos controladores crean instancias de servicios PaaS correspondientes para servir al clúster de Kubernetes.

Además, en el nivel de StorageClass, donde se definen las políticas de aprovisionamiento dinámico de volúmenes de almacenamiento en Kubernetes, es posible especificar el uso de servicios de almacenamiento en bloque basados en la nube para aprovisionar y montar almacenamiento persistente bajo demanda.

Desde una perspectiva de flexibilidad arquitectónica, los servicios de Kubernetes en la nube introducen otra ventaja: las implementaciones multi-clúster.

Con la reducida barrera de entrada para establecer clústeres de Kubernetes, si hay una interdependencia mínima entre las unidades de negocio, se pueden crear clústeres de Kubernetes separados para cada unidad. Este enfoque mejora el aislamiento y permite el escalado independiente de diferentes clústeres.

De Docker a Kubernetes, la evolución continua del ecosistema de contenedores ha dado paso a la ola de las tecnologías nativas de la nube. Los desarrolladores no están solos en su búsqueda de aprender y adoptar la tecnología de contenedores. Los proveedores de computación en la nube también compiten por posicionarse como las plataformas óptimas para ejecutar contenedores, introduciendo una miríada de servicios relacionados con contenedores para atraer a usuarios de contenedores a sus nubes.

Curiosamente, existe una relación sutil entre los contenedores y ciertos servicios en la nube que los proveedores promueven activamente. Hay un elemento de competencia y sustitución en juego.

De manera similar a cómo algunas funcionalidades de PaaS se pueden replicar usando IaaS, los contenedores, con su excepcional libertad de construcción y sus cómodos mecanismos de empaquetado e implementación, pueden reemplazar parcialmente ciertos componentes reutilizables dentro de la nube. Además, los contenedores se pueden orquestar como parte de un sistema más grande, sirviendo como un medio para mitigar la dependencia del proveedor.

A pesar de la amenaza potencial que los contenedores representan para ciertos servicios en la nube, la computación en la nube ha demostrado una vez más su neutralidad tecnológica. Las plataformas en la nube han abrazado y apoyado abiertamente la ejecución de contenedores, incluso designándolos como servicios clave para el desarrollo. Empoderar a los usuarios con la elección ejemplifica la inclusividad de la nube.

Novita AI es la plataforma integral en la nube que impulsa tus ambiciones de IA. API integradas, sin servidor, instancia de GPU: las herramientas rentables que necesitas. Elimina la infraestructura, comienza gratis y haz realidad tu visión de IA.

Lectura recomendada:

  1. Demystifying Kubernetes Scheduling: A Deep Dive into Predicates and Priorities
  2. What You Need to Know About Docker