¿Qué es Kubernetes? Tu próxima plataforma de aplicaciones

Kubernetes es una plataforma de código abierto popular para la orquestación de contenedores , es decir, para la administración de aplicaciones creadas a partir de múltiples tiempos de ejecución, en gran parte autónomos, llamados contenedores. Los contenedores se han vuelto cada vez más populares desde que se lanzó el proyecto de contenedorización de Docker en 2013, pero las aplicaciones grandes y distribuidas en contenedores pueden volverse cada vez más difíciles de coordinar. Al hacer que las aplicaciones en contenedores sean mucho más fáciles de administrar a escala, Kubernetes se ha convertido en una parte clave de la revolución de los contenedores.

¿Qué es la orquestación de contenedores?

Los contenedores admiten la separación de preocupaciones similar a la de una máquina virtual, pero con muchos menos gastos generales y una flexibilidad mucho mayor. Como resultado, los contenedores han remodelado la forma en que las personas piensan sobre el desarrollo, la implementación y el mantenimiento del software. En una arquitectura en contenedores, los diferentes servicios que constituyen una aplicación se empaquetan en contenedores separados y se implementan en un grupo de máquinas físicas o virtuales. Pero esto da lugar a la necesidad de la organización de contenedores, una herramienta que automatiza la implementación, la administración, el escalado, la red y la disponibilidad de aplicaciones basadas en contenedores.

¿Qué es Kubernetes?

Kubernetes es un proyecto de código abierto que se ha convertido en una de las herramientas de orquestación de contenedores más populares; le permite implementar y administrar aplicaciones de contenedores múltiples a escala. Si bien, en la práctica, Kubernetes se usa con mayor frecuencia con Docker, la plataforma de contenedorización más popular, también puede funcionar con cualquier sistema de contenedor que cumpla con los estándares de Open Container Initiative (OCI) para formatos de imagen de contenedor y tiempos de ejecución. Y debido a que Kubernetes es de código abierto, con relativamente pocas restricciones sobre cómo se puede usar, cualquier persona que desee ejecutar contenedores puede usarlo libremente, casi en cualquier lugar donde desee ejecutarlos: en las instalaciones, en la nube pública o en ambos. .

Google y Kubernetes

Kubernetes nació como un proyecto dentro de Google. Es un sucesor, aunque no un descendiente directo de, Google Borg, una herramienta de administración de contenedores anterior que Google usaba internamente. Google abrió Kubernetes en 2014, en parte porque las arquitecturas de microservicios distribuidos que Kubernetes facilita facilitan la ejecución de aplicaciones en la nube. Google considera que la adopción de contenedores, microservicios y Kubernetes puede llevar a los clientes a sus servicios en la nube (aunque Kubernetes ciertamente también funciona con Azure y AWS). Actualmente, Kubernetes es mantenido por Cloud Native Computing Foundation, que a su vez está bajo el paraguas de Linux Foundation.

Kubernetes contra Docker y Kubernetes contra Docker Swarm

Kubernetes no reemplaza a Docker, pero lo aumenta. Sin embargo, Kubernetes no reemplazar algunas de las tecnologías de más alto nivel que han surgido alrededor del estibador.

Una de esas tecnologías es Docker Swarm, un orquestador incluido con Docker. Todavía es posible utilizar Docker Swarm en lugar de Kubernetes, pero Docker Inc. ha optado por hacer que Kubernetes forme parte de las ediciones Docker Community y Docker Enterprise en el futuro.

No es que Kubernetes sea un reemplazo directo de Docker Swarm. Kubernetes es significativamente más complejo que Swarm y requiere más trabajo para implementarlo. Pero, nuevamente, el trabajo está destinado a proporcionar una gran recompensa a largo plazo: una infraestructura de aplicaciones más manejable y resistente. Para trabajos de desarrollo y clústeres de contenedores más pequeños, Docker Swarm presenta una opción más simple. 

Kubernetes contra Mesos

Otro proyecto del que quizás hayas oído hablar como competidor de Kubernetes es Mesos. Mesos es un proyecto de Apache que surgió originalmente de los desarrolladores de Twitter; en realidad, fue visto como una respuesta al proyecto Google Borg.

Mesos, de hecho, ofrece servicios de orquestación de contenedores, pero sus ambiciones van mucho más allá: su objetivo es ser una especie de sistema operativo en la nube que pueda coordinar componentes tanto en contenedores como no contenedores. Con ese fin, se pueden ejecutar muchas plataformas diferentes dentro de Mesos, incluido el propio Kubernetes.

Arquitectura de Kubernetes: cómo funciona Kubernetes

La arquitectura de Kubernetes hace uso de varios conceptos y abstracciones. Algunas de estas son variaciones de nociones familiares existentes, pero otras son específicas de Kubernetes.

Clústeres de Kubernetes

La abstracción de Kubernetes de más alto nivel, el clúster , se refiere al grupo de máquinas que ejecutan Kubernetes (una aplicación en clúster en sí misma) y los contenedores que administra. Un clúster de Kubernetes debe tener un maestro , el sistema que ordena y controla todas las demás máquinas de Kubernetes en el clúster. Un clúster de Kubernetes de alta disponibilidad replica las instalaciones del maestro en varias máquinas. Pero solo un maestro a la vez ejecuta el programador de trabajos y el administrador-controlador.

Pods y nodos de Kubernetes

Cada clúster contiene nodos de Kubernetes . Los nodos pueden ser máquinas físicas o VM. Nuevamente, la idea es abstracción: sea cual sea la aplicación en la que se esté ejecutando, Kubernetes maneja la implementación en ese sustrato. Kubernetes incluso permite garantizar que ciertos contenedores se ejecuten solo en VM o solo en bare metal.

Los nodos ejecutan pods , los objetos de Kubernetes más básicos que se pueden crear o administrar. Cada pod representa una instancia única de una aplicación o proceso en ejecución en Kubernetes y consta de uno o más contenedores. Kubernetes inicia, detiene y replica todos los contenedores de un pod como grupo. Los pods mantienen la atención del usuario en la aplicación, en lugar de en los contenedores mismos. Los detalles sobre cómo se debe configurar Kubernetes, desde el estado de los pods en adelante, se mantienen en Etcd , un almacén de valor clave distribuido.

Los pods se crean y destruyen en los nodos según sea necesario para ajustarse al estado deseado especificado por el usuario en la definición del pod. Kubernetes proporciona una abstracción llamada controlador para lidiar con la logística de cómo se activan, despliegan y desactivan los pods. Los controladores vienen en diferentes versiones según el tipo de aplicación que se administra. Por ejemplo, el controlador "StatefulSet" introducido recientemente se utiliza para tratar aplicaciones que necesitan un estado persistente. Otro tipo de controlador, la implementación , se usa para escalar una aplicación hacia arriba o hacia abajo, actualizar una aplicación a una nueva versión o revertir una aplicación a una versión en buen estado si hay un problema.

Servicios de Kubernetes

Debido a que los pods viven y mueren según sea necesario, necesitamos una abstracción diferente para manejar el ciclo de vida de la aplicación. Se supone que una aplicación es una entidad persistente, incluso cuando los pods que ejecutan los contenedores que componen la aplicación no son persistentes. Con ese fin, Kubernetes proporciona una abstracción llamada servicio.

Un servicio en Kubernetes describe cómo se puede acceder a un grupo determinado de pods (u otros objetos de Kubernetes) a través de la red. Como dice la documentación de Kubernetes, los pods que constituyen el back-end de una aplicación pueden cambiar, pero el front-end no debería tener que saberlo o rastrearlo. Los servicios lo hacen posible.

Algunas piezas más internas de Kubernetes completan la imagen. El programador distribuye las cargas de trabajo en los nodos para que estén equilibradas entre los recursos y para que las implementaciones cumplan con los requisitos de las definiciones de la aplicación. El administrador del controlador asegura que el estado del sistema (aplicaciones, cargas de trabajo, etc.) coincida con el estado deseado definido en los parámetros de configuración de Etcd.

Es importante tener en cuenta que ninguno de los mecanismos de bajo nivel que utilizan los contenedores, como el propio Docker, son reemplazados por Kubernetes. Más bien, Kubernetes proporciona un conjunto más amplio de abstracciones para usar estos mecanismos con el fin de mantener las aplicaciones ejecutándose a escala.

Entrada de Kubernetes

Se piensa que los servicios de Kubernetes se ejecutan dentro de un clúster. Pero querrá poder acceder a estos servicios desde el mundo exterior. Kubernetes tiene varios componentes que facilitan esto con diversos grados de simplicidad y solidez, incluidos NodePort y LoadBalancer, pero el componente con más flexibilidad es Ingress. Ingress es una API que administra el acceso externo a los servicios de un clúster, generalmente a través de HTTP.

Ingress requiere un poco de configuración para configurarse correctamente: Matthew Palmer, quien escribió un libro sobre el desarrollo de Kubernetes, lo guía a través del proceso en su sitio web.

Panel de Kubernetes

Un componente de Kubernetes que lo ayuda a mantenerse al tanto de todos estos otros componentes es Dashboard, una interfaz de usuario basada en web con la que puede implementar y solucionar problemas de aplicaciones y administrar los recursos del clúster. El tablero no está instalado de forma predeterminada, pero agregarlo no es un problema.

Vídeo relacionado: ¿Qué es Kubernetes?

En este video de 90 segundos, conozca Kubernetes, el sistema de código abierto para automatizar aplicaciones en contenedores, de uno de los inventores de la tecnología, Joe Beda, fundador y CTO de Heptio.

Ventajas de Kubernetes

Debido a que Kubernetes presenta nuevas abstracciones y conceptos, y debido a que la curva de aprendizaje de Kubernetes es alta, es normal preguntarse cuáles son las recompensas a largo plazo por usar Kubernetes. Aquí hay un resumen de algunas de las formas específicas en que ejecutar aplicaciones dentro de Kubernetes se vuelve más fácil.

Kubernetes administra el estado de la aplicación, la replicación, el equilibrio de carga y la asignación de recursos de hardware por usted

Una de las tareas más básicas que Kubernetes le quita de las manos es el ajetreado trabajo de mantener una aplicación en funcionamiento, en funcionamiento y que responda a las demandas de los usuarios. Las aplicaciones que se vuelven "insalubres" o no se ajustan a la definición de salud que usted describe para ellas, se pueden curar automáticamente.

Otro beneficio que ofrece Kubernetes es maximizar el uso de los recursos de hardware, incluida la memoria, la E / S de almacenamiento y el ancho de banda de la red. Las aplicaciones pueden tener límites suaves y estrictos establecidos en el uso de recursos. Muchas aplicaciones que utilizan recursos mínimos se pueden empaquetar juntas en el mismo hardware; Las aplicaciones que necesitan expandirse se pueden colocar en sistemas donde tengan espacio para crecer. Y nuevamente, la implementación de actualizaciones en un clúster, o la reversión si las actualizaciones se rompen, se puede automatizar.

Kubernetes facilita la implementación de aplicaciones preconfiguradas con gráficos de Helm

Los administradores de paquetes como APT de Debian Linux y Pip de Python ahorran a los usuarios la molestia de instalar y configurar manualmente una aplicación. Esto es especialmente útil cuando una aplicación tiene múltiples dependencias externas.

Helm es esencialmente un administrador de paquetes para Kubernetes. Muchas aplicaciones de software populares deben ejecutarse en Kubernetes como un grupo de contenedores interdependientes. Helm proporciona un mecanismo de definición, un "gráfico", que describe cómo se puede ejecutar una aplicación o servicio como un grupo de contenedores dentro de Kubernetes.

Puede crear sus propios gráficos de Helm desde cero, y es posible que tenga que hacerlo si está creando una aplicación personalizada para implementarla internamente. Pero si está utilizando una aplicación popular que tiene un patrón de implementación común, es muy probable que alguien ya haya elaborado un gráfico de Helm y lo haya publicado en el repositorio oficial de gráficos de Helm. Otro lugar para buscar gráficos oficiales de Helm es el directorio Kubeapps.com.

Kubernetes simplifica la gestión del almacenamiento, los secretos y otros recursos relacionados con las aplicaciones

Los contenedores están destinados a ser inmutables; se supone que lo que sea que pongas en ellos no cambie. Pero las aplicaciones necesitan estado, lo que significa que necesitan una forma confiable de lidiar con los volúmenes de almacenamiento externo. Eso se complica aún más por la forma en que los contenedores viven, mueren y renacen a lo largo de la vida útil de una aplicación.

Kubernetes proporciona abstracciones para permitir que los contenedores y las aplicaciones manejen el almacenamiento de la misma manera desacoplada que otros recursos. Se puede acceder a muchos tipos comunes de almacenamiento, desde volúmenes de Amazon EBS hasta recursos compartidos NFS antiguos, a través de los controladores de almacenamiento de Kubernetes, denominados volúmenes. Normalmente, los volúmenes están vinculados a un pod específico, pero se puede utilizar un subtipo de volumen llamado "Volumen persistente" para los datos que necesitan vivir independientemente de cualquier pod.

Los contenedores a menudo necesitan trabajar con "secretos", credenciales como claves de API o contraseñas de servicio que no desea codificar en un contenedor o escondidas abiertamente en un volumen de disco. Si bien hay soluciones de terceros disponibles para esto, como Docker secrets y HashiCorp Vault, Kubernetes tiene su propio mecanismo para manejar secretos de forma nativa, aunque debe configurarse con cuidado. Por ejemplo, Etcd debe configurarse para usar SSL / TLS al enviar secretos entre nodos, en lugar de en texto sin formato. 

Las aplicaciones de Kubernetes pueden ejecutarse en entornos híbridos y de múltiples nubes

Uno de los sueños de larga data de la computación en la nube es poder ejecutar cualquier aplicación en cualquier nube, o en cualquier combinación de nubes públicas o privadas. Esto no es solo para evitar el bloqueo del proveedor, sino también para aprovechar las características específicas de las nubes individuales.

Kubernetes proporciona un conjunto de primitivas, conocidas colectivamente como federación, para mantener múltiples clústeres sincronizados entre sí en múltiples regiones y nubes. Por ejemplo, una implementación de aplicación determinada puede mantenerse coherente entre varios clústeres, y diferentes clústeres pueden compartir el descubrimiento de servicios para que se pueda acceder a un recurso de back-end desde cualquier clúster. La federación también se puede usar para crear implementaciones de Kubernetes de alta disponibilidad o tolerantes a fallas, ya sea que esté o no abarcando múltiples entornos de nube.

La federación es todavía relativamente nueva en Kubernetes. Aún no todos los recursos de API son compatibles con las instancias federadas y las actualizaciones aún no tienen una infraestructura de prueba automática. Pero estas deficiencias están programadas para abordarse en futuras versiones de Kubernetes.

Dónde conseguir Kubernetes