Kubernetes es una plataforma popular de código abierto usada para la gestión de aplicaciones construidas a partir de múltiples tiempos de ejecución, la mayoría autónomos llamados contenedores.
Los contenedores se han vuelto cada vez más populares, como Docker, lanzado en 2013 pero las aplicaciones grandes y distribuidas en contenedores pueden ser cada vez más difíciles de coordinar.
Al hacer que las aplicaciones en contenedores sean más fáciles de manejar a escala, Kubernetes se ha convertido en una parte clave de la revolución de los contenedores.
¿Qué es Kubernetes y que proporcionan?
- Equilibrio de carga
- Orquestación de almacenamiento
- Despliegues y retrocesos automatizados
- Embalaje automático
¿Qué son los 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 del mercado; el cual te permite desplegar y gestionar aplicaciones multi contenedores a escala.
Aunque en la práctica Kubernetes se utiliza más a menudo con Docker, también puede funcionar con cualquier sistema de contenedores que cumpla con los estándares de la Open Container Initiative (OCI) para formatos de imagen de contenedores y tiempos de ejecución.
Como Kubernetes es de código abierto, con relativamente pocas restricciones sobre cómo se puede usar, puede ser usado libremente por cualquiera que quiera ejecutar contenedores, casi en cualquier lugar que necesites ejecutarlos en tus instalaciones, en la nube pública, o en ambos.
Kubernetes te proporciona:
- Descubrimiento de servicios y equilibrio de carga
Kubernetes puede exponer un contenedor usando el nombre DNS o usando su propia dirección IP. Si el tráfico de un contenedor es alto, Kubernetes es capaz de equilibrar la carga y distribuir el tráfico de la red para que la implementación sea estable.
- Orquestación de almacenamiento
Kubernetes te permite montar automáticamente un sistema de almacenamiento de tu elección, como almacenamientos locales, proveedores públicos de cloud computing, y más. - Despliegues y retrocesos automatizados.
Puedes describir el estado deseado para tus contenedores desplegados usando Kubernetes, y puedes cambiar el estado actual al estado deseado a una velocidad controlada. Por ejemplo, puedes automatizar Kubernetes para crear nuevos contenedores para su despliegue, eliminar contenedores existentes y adoptar todos sus recursos en el nuevo contenedor.
- Embalaje automático
Kubernetes te permite especificar cuánta CPU y memoria (RAM) necesita cada contenedor. Cuando los contenedores tienen peticiones de recursos especificadas, Kubernetes puede tomar mejores decisiones para gestionar los recursos de los contenedores.
- Autocuración.
Kubernetes reinicia los contenedores que fallan, reemplaza los contenedores, mata los contenedores que no responden al chequeo de salud definido por el usuario y no los anuncia a los clientes hasta que están listos para servir.
- Gestión de secretos y configuración
Kubernetes te permite almacenar y administrar información confidencial, como contraseñas, tokens de OAuth y claves ssh, contraseñas, etc, en unos objetos llamados secrets que se guardan en un sitio seguro y no dentro de una imagen o el almacenamiento. Puedes implementar y actualizar la configuración de la aplicación sin necesidad de reconstruir las imágenes del contenedor y sin exponer los secretos de la configuración de la pila.
Por otro lado:
- No limita los tipos de aplicaciones soportadas.
Kubernetes tiene como objetivo apoyar una variedad extremadamente diversa de cargas de trabajo, incluyendo las cargas de trabajo sin estado, estatales e informáticas. Si una aplicación puede ejecutarse en un contenedor, debería funcionar bien en Kubernetes.
- No implementa código fuente y no crea su aplicación.
Los flujos de trabajo de integración, entrega e implementación continuas (CI/CD) están determinados por las culturas y preferencias de la organización, así como por los requisitos técnicos.
- No proporciona servicios a nivel de aplicación, como middleware (por ejemplo, buses de mensajes), marcos de procesamiento de datos (por ejemplo, Spark), bases de datos (por ejemplo, mysql), cachés ni sistemas de almacenamiento en clúster (por ejemplo, Ceph) como servicios integrados. Estos componentes pueden ejecutarse en Kubernetes, y/o pueden ser accedidos por aplicaciones que se ejecutan en Kubernetes a través de mecanismos portátiles, como el Open Service Broker.
- No dicta soluciones de registro, monitoreo o alerta.
Proporciona algunas integraciones como prueba de concepto y mecanismos para recoger y exportar métricas. - No proporciona ni exige un lenguaje/sistema de configuración (por ejemplo, jsonnet). Proporciona una API declarativa que puede ser atacada por formas arbitrarias de especificaciones declarativas.
- No proporciona ni adopta ninguna configuración completa de la máquina, mantenimiento, gestión o sistemas de autocuración.
- Además, Kubernetes no es un mero sistema de orquestación. De hecho, elimina la necesidad de orquestación.
- La definición técnica de orquestación es la ejecución de un flujo de trabajo definido: primero hacer A, luego B, luego C. Por el contrario, Kubernetes se compone de un conjunto de procesos de control independientes y componibles que conducen continuamente el estado actual hacia el estado deseado. No debería importar cómo llegar de A a C.
- Tampoco se requiere un control centralizado. Esto resulta en un sistema que es más fácil de usar y más potente, robusto, resistente y extensible.
CONCLUSIONES
Kubernetes es un proyecto bastante interesante que permite a los usuarios ejecutar cargas de trabajo escalables y altamente disponibles en contenedores en una plataforma altamente abstracta.
Si bien la arquitectura y el conjunto de componentes internos de Kubernetes pueden parecer no muy alentadores a primera vista, su potencia, flexibilidad y robustez no tiene similitud alguna en el mundo del código abierto.
Al comprender cómo encajan los componentes básicos, con Kubernetes puedes empezar a diseñar sistemas que aprovechen al máximo las capacidades de la plataforma para ejecutar y gestionar sus cargas de trabajo a escala.