Kubernetes: El director de la Orquesta Cloud

Tras más de década y media de experiencia desplegando aplicaciones en producción a gran escala, Google decidió en 2014 utilizar las mejores ideas y prácticas de la comunidad para desarrollar lo que es ahora Kubernetes, el orquestador de contenedores estándar en la comunidad.

Kubernetes (gobernador/timonel en griego) se trata de una plataforma portable y extensible open-source para administrar cargas de trabajo y servicios. Esta administración lo consigue facilitando la automatización y la configuración declarativa de contenedores y/o microservicios. (En el post sobre Docker te explicamos qué son los contenedores). Esta plataforma se ha extendido tanto entre los desarrolladores que se ha establecido como el estándar en orquestación de contenedores y en el proyecto estrella de la CNCF (Cloud Native Computing Foundation, soportada por las empresas empresas líderes del sector: Google, AWS, Microsoft, IBM, Intel, Cisco y RedHat).

¿A qué nos referimos con una configuración declarativa?

La palabra clave de la definición anterior es declarativa. Esto significa que, en vez de especificar unos pasos a seguir para desplegar el contenedor, el usuario especifica en un fichero de configuración el estado deseado; Kubernetes se encarga de desplegarlo tal y como se quiere y de mantenerlo. Por ejemplo, se especifica en Kubernetes que ?se lancen 4 instancias de un tipo de contenedor y se mantengan en ejecución en todo momento? y Kubernetes se encarga de asignar hosts, lanzar el contenedor, monitorizar y lanzar una instancia nueva en caso de falla.

Kubernetes es un Orquestador de contenedores

Por eso mismo que os he descrito en el párrafo anterior la plataforma se conoce como un orquestador de contenedores. Ella misma se encarga de configurar automáticamente la infraestructura (redes, procesamiento, almacenamiento) de las cargas de trabajo. Esto libera al usuario de tener que preocuparse del despliegue y mantenimiento de contenedores.

Esta orquestación nos permite disfrutar de la simplicidad de PaaS (Plataforma como Servicio) y la flexibilidad de IaaS (Infraestructura como Servicio), añadiendo además portabilidad entre los diferentes proveedores de infraestructura cloud.

Al funcionar como un orquestador de contenedores Kubernetes se convierte en el mejor aliado de Docker en el mundo MLOps. Ambas tecnolog?as permiten configurar una infraestructura potente para desplegar aplicaciones (modelos de ML incluidos). Al realizar este despliegue nos permiten usar el potencial del cloud computing de su escalabilidad y elasticidad.

¿Por qué Kubernetes fue diseñado como una plataforma y no como un servicio?

Principalmente para poder construir un ecosistema de componentes y herramientas que facilitan el despliegue, escalado y administraci?n de aplicaciones.

El equipo de desarrollo de Kubernetes diseñó la arquitectura pensando en la funcionalidad PaaS. Por esto mismo, la API no está pensada únicamente para el uso de usuarios finales, sino que se aprovecha también como herramienta para los desarrolladores. Esta API se creó para servir como base transparente (se permite el acceso a todos los niveles API) para un ecosistema abierto de herramientas, sistemas de automatización y APIs de alto nivel.

Ideales de Diseño

El proyecto fue (y contin?a siendo) desarrollado siguiendo las siguientes ideas de dise?o:

  • Portabilidad: Kubernetes se puede ejecutar en cualquier lado (Cloud pública, privada, en el portátil) de manera consistente, facilitando el desarrollo y producción en cualquier entorno.
  • Tiene un propósito general: la plataforma debería ejecutar la mayoría de los tipos de cargas de trabajo para facilitar su ejecución en una ?nica infraestructura, con o sin estado, por microservicios o monolítica, por servicios o en modo batch, y en servicios legacy o actuales.
  • Se cruza con los usuarios a mitad de camino. No es una plataforma centrada en apps nativas de cloud, ni cualquier tipo de aplicación, si no que se centra en la implementación y gestión de microservicios proporcionando mecanismos que facilitan la migración de aplicaciones legacy o monolíticas.
  • Flexibilidad: las funcionalidades se puedes utilizar a la carta o utilizar soluciones propias.
  • Es una plataforma extensible: permite la integración en tu propio entorno y añadir las capacidades adicionales que necesites gracias a la API transparente que os he comentado antes.
  • Automatizable: el objetivo principal de Kubernetes es la automatización del despliegue en producción. Por eso es tan clave el control declarativo de configuración.
  • Avanzar el estado del arte: el equipo de Kubernetes tiene el objetivo de mejorar las operaciones de desarrollo (DevOps / MLOps) y por ello se esfuerzan constantemente en no obligar a las aplicaciones a no encerrarse en la API propia de Kubernetes.

Dejando claro lo que NO es Kubernetes

A pesar de haber sido desarrollado como una plataforma, y ofrezca características que los PaaS ofrecen (despliegue, escalado, balanceo de carga, monitorización, registro) Kubernetes no es un PaaS convencional. Esto se debe a que opera a nivel de contenedor y no a nivel hardware. A su vez, Kubernetes no es monolítico y las soluciones predeterminadas son opcionales e intercambiables.

A pesar de ser la imagen del post y la principal definición del software, Kubernetes no es simplemente un sistema de orquestación. Está compuesto de un conjunto de procesos independientes y combinables que permiten pasar de un estado de la aplicación a otro sin que nos tenga que importar cómo. No requiere un control centralizado, facilitando su uso y creando un despliegue poderoso, robusto, resiliente y extensible.

Como resumen: ¿por qué deberías usar Kubernetes?

Mantener las aplicaciones ejecut?ndose en contenedores constantemente puede ser complejo. Especialmente si tenemos que mantener varias aplicaciones desplegadas a lo largo de varios servidores e interconectadas. Kubernetes es el key player aqu? . Proporciona mecanismos para agendar, desplegar los contenedores, escalarlos y gestionarlos a lo largo de su vida. Con Kubernetes podemos conseguir poner en producci?n aplicaciones con los siguientes beneficios principales:

  • Portabilidad: como los contenedores no tienen dependencias con la infraestructura, se convierten en portables a lo largo de cualquier tipo de entorno en el que se trabaje mientras se mantienen consistentes.
  • F?cil escalabilidad: Da igual la complejidad de las aplicaciones que se desplieguen con contenedores, Kubernetes se encarga de gestionar la escalabilidad mediante una monitorizaci?n autom?tica y manteniendo la salud del contenedor.
  • Permite crear más aplicaciones extensibles: Kubernetes tiene una comunidad de gran tamaño de desarrolladores de código abierto que desarrollan extensiones y plugins constantemente siguiendo estándares y asegurándose del soporte de las APIs de la plataforma.

Os dejo además un vídeo de Brendan Burns, ingeniero de Microsoft Azure, en el que explica Kubernetes bajo su punto de vista:

Si os ha gustado el post compartidlo con el mundo, y si os quedáis con dudas escribidnos un comentario que estaremos felices de contestaros.

Aquí tenéis más posts sobre Machine Learning!