
[18/11/2021] Kubernetes es una popular plataforma de código abierto para la orquestación de contenedores; es decir, destinada a la gestión de aplicaciones creadas a partir de múltiples tiempos de ejecución -en gran parte autónomos- denominados contenedores. Los contenedores se han vuelto cada vez más populares desde que se lanzó el proyecto containerization de Docker en el 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.
[Reciba lo último de CIO Perú suscribiéndose a nuestro newsletter semanal]
¿Qué es la orquestación de contenedores?
Los contenedores soportan una separación de temas similar a la de una máquina virtual, pero con muchos menos gastos y una mucho mayor flexibilidad. 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 orquestación de contenedores, una herramienta que automatiza la implementación, la administración, la adaptación de escala, 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 más popular de containerization, 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: on premises, 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 anterior de administración de contenedores que Google usaba internamente. Google abrió Kubernetes en el 2014, en parte porque las arquitecturas de microservicios distribuidos que Kubernetes 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 la Cloud Native Computing Foundation, que simultáneamente opera bajo el paraguas de la Fundación Linux.
Kubernetes frente a otros proyectos
Kubernetes no es la única forma de administrar contenedores a escala, aunque se ha convertido en la opción más común y con más soporte. Algunas de las otras opciones merecen mencionarse.
Kubernetes vs. Docker y modo de enjambre de Docker: Kubernetes no reemplaza a Docker, sino que lo aumenta. Sin embargo, Kubernetes reemplaza algunas de las tecnologías de nivel superior que han surgido en torno a Docker.
Una de estas tecnologías es el modo enjambre de Docker, a un sistema para administrar un grupo de motores Docker denominado "enjambre”, esencialmente un pequeño sistema de orquestación. Todavía es posible usar el modo enjambre de Docker en lugar de Kubernetes, pero Docker Inc. ha optado por hacer de Kubernetes una parte clave del soporte de Docker en el futuro.
Sin embargo, tenga en cuenta que Kubernetes es significativamente más complejo que el modo enjambre de Docker, y requiere más trabajo para su implementación. Pero nuevamente, el trabajo está destinado a proporcionar una gran recompensa a largo plazo: una infraestructura de aplicaciones más manejable y resistente. Para el trabajo de desarrollo y los clústeres de contenedores más pequeños, el modo enjambre de Docker presenta una opción más simple.
Kubernetes vs. Mesos: Otro proyecto del que quizás haya 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, se vio 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 en contenedores con otros que no se encuentren dentro de uno. 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 (en sí mismo una aplicación de clúster) y los contenedores que administra. Un clúster de Kubernetes debe tener un master, 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 master en varias máquinas. Pero solo un master 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 máquinas virtuales. Una vez más, la idea es la abstracción: sea lo que sea en lo que se ejecute la aplicación, Kubernetes maneja la implementación en ese sustrato. Kubernetes incluso permite garantizar que ciertos contenedores se ejecuten solo en máquinas virtuales o solo en ambientes sin sistema operativo.
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 guardan 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 algunos sabores diferentes según el tipo de aplicación que se administra. Por ejemplo, el controlador StatefulSet se usa para tratar con aplicaciones que necesitan un estado persistente. El controlador de implementación se usa para adaptar la escala de 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 válida conocida 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 lidiar con 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 en sí mismos. 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 afirma 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 saber sobre eso 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 balanceadas entre los recursos, y para que las implementaciones cumplan con los requisitos de las definiciones de la aplicación. El administrador del controlador se asegura de 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.
Políticas de Kubernetes: Las políticas en Kubernetes garantizan que los pods se adhieran a ciertos estándares de comportamiento. Las políticas evitan que los pods utilicen CPU, memoria, IDs de proceso o espacio en disco excesivos, por ejemplo. Dichos "rangos de límites” se expresan en términos relativos para la CPU (por ejemplo, 50% de un hilo de hardware) y términos absolutos para la memoria (por ejemplo, 200 MB). Estos límites se pueden combinar con cuotas de recursos para garantizar que los diferentes equipos de usuarios de Kubernetes (a diferencia de las aplicaciones en general) tengan el mismo acceso a los recursos.
KubernetesIngress
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 mayor 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 instalarse 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 le 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. Dashboard no está instalada de forma predeterminada, pero agregarla no es un problema.
Ventajas de Kubernetes
Debido a que Kubernetes introduce 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 gestiona el estado de la aplicación, la replicación, el balanceo de la carga y la asignación de recursos de hardware por usted: Una de las tareas más básicas que Kubernetes realiza es el ajetreado trabajo de mantener una aplicación en funcionamiento, operativa y que responda a las demandas de los usuarios. Las aplicaciones que se vuelven "insalubres”, o que no se ajustan a la definición de salud que usted describe para ellas, pueden curarse automáticamente.
Otro beneficio que ofrece Kubernetes es maximizar el uso de los recursos de hardware, incluida la memoria, el input/outpùt 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 pueden automatizar.
Kubernetes facilita la implementación de aplicaciones previamente configuradas con gráficos de Helm: Los administradores de paquetes como APT de Debian Linux y Pip de Python les 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 deba 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 Artifact Hub. Otro lugar para buscar gráficos oficiales de Helm es el directorio de Kubeapps.com.
Kubernetes simplifica la gestión del almacenamiento, los secretos y otros recursos relacionados con las aplicaciones: Los contenedores están pensados para ser inmutables; se supone que el código y los datos que ingresa en ellos no deben cambiar. 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, llamados volúmenes. Normalmente, los volúmenes están vinculados a un pod específico, pero se puede usar 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 guardar abiertamente en un volumen de disco. Si bien existen soluciones de terceros disponibles para esto, como Docker secrets y HashiCorp Vault, Kubernetes tiene su propio mecanismo para manejar secretos de forma nativa, aunque es necesario configurarlo con cuidado.
Las aplicaciones de Kubernetes pueden ejecutarse en ambientes de nube híbrida y nubes múltiples: Uno de los sueños más antiguos de la computación de 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 quedar bloqueado por un proveedor, sino también para aprovechar las características específicas de las nubes individuales.
Un proyecto SIG de Kubernetes llamado KubeFed, para Kubernetes Cluster Federation, se puede utilizar para mantener varios clústeres sincronizados entre sí en varias 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 ambientes de nube.
KubeFed es todavía un proyecto beta, con componentes de nivel alfa. Tampoco pretende ser una solución de federación de alto nivel, sino más bien un conjunto de componentes de bajo nivel que se utilizan para habilitar funciones futuras, como (según los documentos oficiales de KubeFed) recuperación frente a desastres o aplicaciones distribuidas en dominios geográficos.
Dónde conseguir Kubernetes
Kubernetes está disponible en muchas formas -desde bits de código abierto hasta distribución con soporte comercial y servicio de nube pública-, y la mejor manera de averiguar dónde obtenerlo es mediante un caso de uso.
Si desea hacerlo todo usted mismo: El código fuente y los binarios prediseñados para las plataformas más comunes se pueden descargar del repositorio de GitHub para Kubernetes. Si desea probar una pequeña instancia de Kubernetes en su propio sistema, puede usar Minikube para configurar un clúster local en una sola máquina.
Si usa Docker Community o Docker Enterprise: Las ediciones más recientes de Docker vienen con Kubernetes como paquete. Aparentemente, esta es la forma más fácil para que los expertos en contenedores obtengan una ventaja con Kubernetes, ya que se trata de un producto con el que es casi seguro que ya esté familiarizado. (Docker también puede usar Minikube para implementaciones).
Si está implementando on premises o en una nube privada: Es muy probable que cualquier infraestructura que elija para su nube privada tenga Kubernetes integrado. Las distribuciones soportadas, certificadas y de emisión estándar de Kubernetes están disponibles en docenas de proveedores.
Si está implementando en una nube pública: Los tres principales proveedores de nube pública ofrecen Kubernetes como servicio. Google Cloud Platform ofrece Google Kubernetes Engine. Microsoft Azure ofrece el servicio Azure Kubernetes. Asimismo, Amazon ha agregado Kubernetes a su Elastic Container Service existente. Los servicios administrados de Kubernetes también están disponibles a través de muchos proveedores.
Tutorial de Kubernetes
Ahora que tiene lo básico en su haber, ¿está listo para comenzar con Kubernetes? Existe una variedad de tutoriales que pueden ayudarle a jugar con Kubernetes y aprender a usarlo en su propio trabajo. Es posible que desee comenzar con los sencillos tutoriales en el sitio del proyecto de Kubernetes; cuando esté listo para algo más avanzado, consulte las selecciones de Quick Code para obtener los 10 mejores tutoriales de Kubernetes, que tienen algo para todos.
Certificación de Kubernetes
Si cree que tiene un buen manejo del funcionamiento de Kubernetes y desea poder demostrarles su experiencia a los empleadores, es posible que desee consultar el par de certificaciones relacionadas con Kubernetes que ofrecen conjuntamente Linux Foundation y Cloud Native Computing Foundation:
- Certified Kubernetes Administrator, que busca "proporcionar garantía de que los CKA tienen las habilidades, el conocimiento y la competencia para desempeñar las responsabilidades de los administradores de Kubernetes”, incluyendo la administración del ciclo de vida de las aplicaciones y la instalación, configuración, validación, mantenimiento de clústeres y resolución de problemas.
- Certified Kubernetes Application Developer, que certifica que los usuarios pueden diseñar, crear, configurar y exponer aplicaciones nativas de la nube para Kubernetes.
Los exámenes de certificación cuestan 375 dólares cada uno. También existen cursos de capacitación complementarios para aquellos que estén interesados, los cuales pueden servir como una forma buena y estructurada de aprender más sobre Kubernetes.
Basado en el artículo de Serdar Yegulalp (InfoWorld) y editado por CIO Perú
Crédito foto: StockSnap / CC0
Puede ver también: