¿Qué es Kubernetes?

Los contenedores han cambiado radicalmente el desarrollo de software, aunque también otros ámbitos de las TIC. Con esta nueva tecnología, el software se ejecuta en un entorno virtual diseñado ad hoc. Todo lo que la aplicación necesita se encuentra en un contenedor y permanece allí de manera segura y fiable. También es posible ejecutar varias instancias en paralelo.

Sin embargo, para gestionar fácilmente dichos contenedores, ya que rara vez se trabaja con uno solo, se requieren herramientas de soporte. Kubernetes (también conocido como K8s) es una herramienta de administración de contenedores que puede manejar una gran cantidad de entornos de este tipo.

Kubernetes: qué es, historia y objetivos

Kubernetes tiene pocos años de vida y, sin embargo, ya se ha ganado una excelente reputación. Esto es debido, al menos en parte, a su relación con Google. En su momento, fue esta empresa la que inició este proyecto de código abierto, y algunos empleados de Google ayudaron a desarrollar Kubernetes, aunque también muchos otros desarrolladores no relacionados con Google han trabajado en el software. En 2015, se lanzó por fin la primera versión de Kubernetes. Actualmente, la herramienta es compatible con muchas plataformas de nube distintas, como Azure o AWS.

Sin embargo, ese no era el objetivo al principio. El punto de partida en Google fueron los sistemas Borg y Omega, con los que debían gestionarse los clústeres internos. Por aquel entonces, ni siquiera se habían considerado las aplicaciones de nube virtuales. Más adelante, sin embargo, se decidió lanzar una versión de código abierto y, de este modo, hacer público el desarrollo de Kubernetes.

Para mostrar este video, se requieren cookies de terceros. Puede acceder y cambiar sus ajustes de cookies aquí.

Kubernetes está escrito en el lenguaje de programación Go, desarrollado por Google y diseñado para utilizarse tanto en la nube como en ordenadores o centros de datos locales. Este proyecto de código abierto siempre ha estado muy comprometido con la nube, algo que se hace evidente también en su desarrollo. Actualmente, Google lo sigue impulsando en colaboración con otras empresas bajo el paraguas de la Cloud Native Computing Foundation, con la ayuda de una comunidad muy extensa.

Hecho

La empresa de videojuegos para dispositivos móviles Niantic utilizó Kubernetes para desarrollar Pokémon GO. En un interesante estudio de caso, se explica todo el procedimiento.

¿Cómo funciona Kubernetes?

Kubernetes es un sistema de orquestación de contenedores, lo que significa que el software no se encarga de crearlos, sino de administrarlos. Para ello, Kubernetes aplica la automatización de procesos, lo que vuelve más fácil para los desarrolladores comprobar, mantener o publicar aplicaciones. La arquitectura de Kubernetes consta de una clara jerarquía, compuesta por los siguientes elementos:

  • Contenedor: incluye las aplicaciones y entornos de software.
  • Pod: este elemento de la arquitectura de Kubernetes se encarga de agrupar aquellos contenedores que necesitan trabajar juntos para el funcionamiento de una aplicación.
  • Nodo: uno o varios pods se ejecutan en un nodo, que puede ser tanto una máquina virtual como física.
  • Clúster: en Kubernetes, los nodos se agrupan en clústeres.

Por otra parte, la arquitectura de Kubernetes se basa en el principio de maestro y esclavo. Los nodos descritos se utilizan como esclavos, es decir, que son las partes controladas del sistema y están bajo la administración y el control de los maestros de Kubernetes.

Una de las tareas de un maestro, por ejemplo, es distribuir los pods en los nodos. Mediante la supervisión constante, el maestro puede intervenir tan pronto como falla un nodo y clonarlo para compensar el error. El estado real siempre se compara con el estado deseado y se ajusta si es necesario. Tales procesos suceden automáticamente. El maestro es también el punto de acceso para los administradores y les sirve para orquestar los contenedores.

Tanto el maestro como los nodos presentan una estructura específica.

Nodo de Kubernetes

El esclavo (o “minion”) es un servidor físico o virtual en el que están activos uno o más contenedores. En el nodo se encuentra el entorno de ejecución de los contenedores. También está activo el llamado kubelet, un componente que permite comunicarse con el maestro. Además, este servicio inicia y detiene los contenedores. Con el servicio cAdvisor, el kubelet registra la utilización de recursos, algo muy interesante para el análisis. Finalmente, el nodo contiene la implementación kube-proxy, que se ocupa del balanceo de carga del sistema y habilita las conexiones de red a través de TCP u otros protocolos.

Maestro de Kubernetes

El maestro también es un servidor. Para garantizar el control y la supervisión de los nodos, en el maestro se ejecuta el controller manager, un componente que, a su vez, aúna varios procesos:

  • El controlador de nodos supervisa los nodos y reacciona en caso de fallos.
  • El controlador de replicación asegura que la cantidad deseada de pods siempre se esté ejecutando al mismo tiempo.
  • El controlador de punto final se ocupa del objeto del punto final, responsable de la conexión de servicios y pods.
  • La cuenta de servicio y los controladores de tokens administran el espacio de nombres y crean tokens de acceso a la API.

Además de los controladores, existe un almacén de datos llamado etcd. Esta base de datos de valores clave almacena la configuración del clúster del cual es responsable el maestro. Mediante el componente scheduler, el maestro automatiza la distribución de los pods en nodos. La conexión con el nodo se establece a través del servidor API integrado en el maestro, que proporciona una interfaz REST e intercambia información con el clúster a través de JSON. De este modo, por ejemplo, los distintos controladores también acceden a los nodos.

Nota

La orquestación de clústeres con Kubernetes se incluye entre servicios de nube corporativa de IONOS.

Kubernetes y Docker: ¿competidores?

La pregunta de si es mejor utilizar Kubernetes o Docker no tiene sentido, porque, de hecho, ambos programas se utilizan juntos: Docker (o cualquier otra plataforma de contenedores, como rkt) se encarga de construir y ejecutar los contenedores en Kubernetes, que, por su parte, accede a estos contenedores y gestiona la orquestación y automatización de los procesos. Kubernetes por sí solo no es capaz de crear contenedores.

A lo sumo, puede haber competencia con Docker Swarm, una herramienta de orquestación del desarrollador de Docker. Esta herramienta también funciona con clústeres y proporciona una funcionalidad similar a la de Kubernetes.

Consejo

Puedes leer más sobre las diferencias entre ambos sistemas y las posibilidades para combinarlos en nuestra comparativa de Docker y Kubernetes.

Kubernetes en la práctica: aplicación y ventajas

Actualmente, Kubernetes desempeña un papel importante en el desarrollo de software, especialmente en los proyectos que requieren agilidad. El ciclo de desarrollo, comprobación y despliegue (y todos los pasos intermedios posibles) se simplifica mediante la orquestación de contenedores. Kubernetes facilita el traslado de contenedores de una fase a otra, automatizando muchas operaciones.

El grado de escalado es un factor importante, especialmente cuando se alquila espacio de almacenamiento externo en la nube. Para ahorrar costes, Kubernetes aprovecha al máximo los recursos y, en lugar de mantener en funcionamiento las máquinas que no se necesitan actualmente, Kubernetes puede liberarlas, utilizarlas para otras tareas o, simplemente, dejarlas inactivas, lo que reduce los costes. Gracias al escalado automático, Kubernetes se ocupa de no utilizar más recursos de los que realmente necesita de manera totalmente autónoma. Por el otro lado, también es importante la rapidez con que puede escalarse: cuando se lanza un software por primera vez, a veces no es posible predecir cómo evolucionará. Para garantizar que el sistema no se colapse en caso de que aumente mucho la demanda, Kubernetes puede proporcionar instancias adicionales rápidamente.

Otra ventaja de Kubernetes es que permite vincular varias plataformas entre sí sin ningún problema. Por ejemplo, es posible implementar la solución en una nube híbrida, estableciendo una parte del sistema en los propios servidores locales y la otra, en un centro de datos remoto, es decir, la nube. Esta opción, a su vez, aumenta aún más la escalabilidad; por lo general, si necesitas más recursos, puedes reservarlos a través del proveedor de la nube de forma rápida y directa.

Finalmente, Kubernetes también ayuda a los desarrolladores a realizar el seguimiento. Cada contenedor está claramente marcado y, además, el usuario obtiene información sobre el estado de todas las instancias. Al mismo tiempo, Kubernetes incluye un control de versiones, que permite instalar las actualizaciones a posteriori. En general, la publicación de actualizaciones es una de las grandes ventajas del sistema, porque las nuevas versiones se pueden implementar de tal modo que no se produzcan tiempos de inactividad. Para ello, los pods se cambian poco a poco, en lugar de todos a la vez. Esto se aplica tanto a la versión de prueba interna como a las nuevas versiones para usuarios finales.

Como Kubernetes configura de forma independiente muchos aspectos de la orquestación, se evitan muchos inconvenientes propios del proceso. Por ello, a grandes rasgos, se considera que Kubernetes es un sistema seguro, pues rara vez se producen errores y, si en alguna ocasión, un pod no funciona como se había planeado, el maestro de Kubernetes detecta el fallo y lo soluciona.

Consejo

¿Te apetece empezar a trabajar con Kubernetes por tu cuenta? Con nuestro tutorial de Kubernetes puedes dar tus primeros pasos con esta herramienta.