Kubernetes, comúnmente estilizado como K8s, es una plataforma de código abierto, portátil y extensible que automatiza la implementación, el escalado y la administración de aplicaciones en contenedores, lo que facilita tanto la configuración declarativa como la automatización. Tiene un ecosistema grande y de rápido crecimiento.
El nombre Kubernetes es de origen griego y significa timonel o piloto. K8s es la abreviatura derivada de reemplazar las ocho letras “ubernete” por “8”, convirtiéndose en K”8″s.
Kubernetes fue diseñado originalmente por Google, que fue uno de los pioneros en el desarrollo de la tecnología de contenedores de Linux. Google ya ha revelado públicamente que todo en la empresa funciona en contenedores.
En la actualidad, Kubernetes es mantenido por Cloud Native Computing Foundation.
Kubernetes funciona con una variedad de herramientas de creación de contenedores, incluido Docker.
Muchos servicios en la nube ofrecen una plataforma basada en servicios (PaaS o IaaS) donde Kubernetes se puede implementar bajo un servicio administrado. Muchos proveedores también ofrecen su propia marca de distribución de Kubernetes.
Pero antes de hablar de las aplicaciones en contenedores, retrocedamos un poco en el tiempo y veamos cómo eran antes estas implementaciones.
Historia de Implementaciones
Retrocedamos un poco en el tiempo para comprender por qué Kubernetes es tan importante hoy en día.
Implementación Tradicional
Hace unos años, las aplicaciones se ejecutaban en servidores físicos y, por lo tanto, no era posible definir límites de recursos para las aplicaciones en el mismo servidor físico, lo que generaba problemas de asignación de recursos.
Despliegue Virtualizado
Para solucionar los problemas del servidor físico, se implementó la solución de virtualización, que permitió la ejecución de varias máquinas virtuales (VM) en una sola CPU de un servidor físico. La virtualización permitió que las aplicaciones se aislaran entre máquinas virtuales, proporcionando un mayor nivel de seguridad, ya que otras aplicaciones no pueden acceder libremente a la información de una aplicación.
Con la virtualización se logró mejorar el uso de los recursos en un servidor físico, teniendo mejor escalabilidad ya que se puede agregar o actualizar una aplicación con facilidad y la reducción de costos de hardware.
Implementación en Contenedores
Los contenedores son muy similares a las máquinas virtuales, pero una de las grandes diferencias es que tienen propiedades de aislamiento flexibles para compartir el sistema operativo (SO) entre aplicaciones. Por lo que se consideran ligeros.
Al igual que la VM, un contenedor tiene su propio sistema de archivos, CPU compartida, memoria, espacio de proceso y más. Debido a que están separados de la infraestructura subyacente, son portátiles entre nubes y distribuciones de sistemas operativos.
Cluster En Kubernetes – ¿Qué Son?
Como se mencionó anteriormente, K8s es un proyecto de código abierto que tiene como objetivo orquestar contenedores y automatizar la implementación de aplicaciones. Kubernetes administra los clústeres que contienen los hosts que ejecutan aplicaciones de Linux.
Los clústeres pueden incluir hosts de expansión en nubes locales, públicas, privadas o híbridas, por lo que Kubernetes es la plataforma ideal para alojar aplicaciones nativas de la nube que requieren escalabilidad rápida, como la transmisión de datos en tiempo real a través de Apache Kafka.
En Kubernetes, el usuario define el estado del clúster y depende del servicio de orquestación alcanzar y mantener el estado deseado, dentro de las limitaciones impuestas por el usuario. Podemos entender a Kubernetes dividido en dos planos: el plano de control, que realiza la orquestación global del sistema, y el plano de datos, donde residen los contenedores.
Si desea agrupar hosts que se ejecutan en contenedores Linux® (LXC) en clústeres, Kubernetes lo ayuda a administrarlos de manera fácil y eficiente ya escala.
Con Kubernetes elimina muchos procesos manuales que requiere una aplicación en contenedores, facilitando y agilizando los proyectos.
Ventajas de Kubernetes
El uso de Kubernetes facilita la implementación y la confianza total en una infraestructura basada en contenedores para entornos de producción. Como el propósito de Kubernetes es automatizar por completo las tareas operativas, tú haces las mismas tareas que permiten otros sistemas de gestión o plataformas de aplicaciones, pero para tus contenedores.
Con Kubernetes, también puede crear aplicaciones nativas de la nube como una plataforma de tiempo de ejecución. Simplemente use los estándares de Kubernetes, que son las herramientas necesarias para que el programador cree servicios y aplicaciones basados en contenedores.
Aquí hay otros consejos sobre lo que es posible con Kubernetes:
- Organice contenedores en varios hosts.
- Maximice los recursos necesarios para ejecutar aplicaciones empresariales.
- Controle y automatice las actualizaciones y despliegues de aplicaciones.
- Habilite y agregue almacenamiento para ejecutar aplicaciones con estado.
- Escale aplicaciones en contenedores y los recursos correspondientes rápidamente.
- Administre los servicios de manera más asertiva para que la implementación de las aplicaciones implementadas siempre ocurra como se esperaba.
- Aplicaciones de autocuración y verificación de estado mediante la automatización de la ubicación, el reinicio, la replicación y el escalado.
Kubernetes se basa en otros proyectos de código abierto para desarrollar este trabajo orquestado.
Estas son algunas de las características:
- Registro usando proyectos como Docker Registry.
- Red utilizando proyectos como OpenvSwitch y enrutamiento perimetral.
- Telemetría utilizando proyectos como Kibana y Hawkular.
- Seguridad utilizando proyectos como LDAP y SELinux con capas de múltiples inquilinos.
- Automatización con la incorporación del libro de jugadas de Ansible para la instalación y la gestión del ciclo de vida del clúster.
- Servicios que utilizan un amplio catálogo de patrones de aplicaciones populares.
Términos Comunes de Kubernetes
Cada tecnología tiene un lenguaje específico y esto hace que la vida de los desarrolladores sea muy difícil. Entonces, estos son algunos de los términos más comunes en Kubernetes para ayudarlo a comprender mejor:
1) Control plane: conjunto de procesos que controla los nodos de Kubernetes. Es la fuente de todas las asignaciones de tareas.
2) Nodos: son quienes realizan las tareas solicitadas y asignadas por el plano de control.
3) Pod: un grupo de uno o más contenedores desplegados en un nodo. Todos los contenedores en un pod tienen la misma dirección IP, IPC, nombre de host y otros recursos. Los pods abstraen las redes y el almacenamiento del contenedor subyacente. Esto facilita el movimiento de contenedores alrededor del clúster.
4) Controlador de replicación: es quien controla cuántas copias idénticas de un pod deben ejecutarse en una ubicación determinada del clúster.
5) Servicio: desacopla las definiciones de trabajo de los pods. Los proxies de servicio de Kubernetes reciben automáticamente solicitudes para el pod correcto, sin importar dónde se encuentre en el clúster o si se reemplazó.
6) Kubelet: es un servicio que se ejecuta en nodos, lee los manifiestos del contenedor e inicia y ejecuta los contenedores definidos.
7) Kubectl: la herramienta de configuración de la línea de comandos de Kubernetes.
¿Cómo Funciona Kubernetes?
Después de hablar de los términos más utilizados en Kubernetes, hablemos de cómo funciona.
El clúster es la implementación de trabajo de Kubernetes. El clúster se divide en dos partes: el plano de control y el nodo, y cada nodo tiene su propio entorno Linux® físico o virtual. Los nodos ejecutan pods que se componen de contenedores. El plano de control es responsable de mantener el estado deseado del clúster. Las máquinas informáticas ejecutan las aplicaciones y las cargas de trabajo.
Kubernetes se ejecuta en un sistema operativo como Red Hat® Enterprise Linux e interactúa con contenedores que se ejecutan en nodos.
El plano de control de Kubernetes acepta comandos de un administrador (o equipo de DevOps) y transmite esas instrucciones a las máquinas informáticas. Esta retransmisión se realiza junto con varios servicios para decidir automáticamente qué nodo es el más adecuado para la tarea. Luego, se asignan recursos y se asignan módulos de nodos para cumplir con la tarea solicitada.
El estado del clúster de Kubernetes define qué aplicaciones o cargas de trabajo se ejecutarán, así como las imágenes que usarán, los recursos que estarán disponibles y otros detalles de configuración.
El control sobre los contenedores ocurre a un nivel superior, lo que lo hace más refinado y sin la necesidad de microgestionar cada contenedor o nodo por separado. Es decir, solo necesita configurar Kubernetes y definir los nodos, pods y contenedores presentes en ellos, ya que Kubernetes hace toda la orquestación de los contenedores por sí mismo.
El programador elige el entorno de tiempo de ejecución de Kubernetes. Puede ser un servidor completo, una nube pública, máquinas virtuales y nubes privadas e híbridas. Es decir, Kubernetes se encuentra en varios tipos de infraestructura.
También podemos usar Docker como un tiempo de ejecución de contenedores orquestado por Kubernetes. Cuando Kubernetes programa un pod para un nodo, el kubelet del nodo indica a Docker que inicie los contenedores especificados. Entonces, el kubelet recopila el estado de los contenedores Docker y agrega información en el plano de control de forma continua. Docker luego coloca los contenedores en ese nodo y los inicia y los detiene normalmente.
La principal diferencia al usar Kubernetes con Docker es que un sistema automatizado solicita que Docker realice estas tareas en todos los nodos de todos los contenedores, en lugar de que el administrador realice estas solicitudes manualmente.
La mayoría de las implementaciones locales de Kubernetes se ejecutan en una infraestructura virtual, con un número cada vez mayor de implementaciones en servidores físicos. De esta forma, Kubernetes funciona como una herramienta para gestionar el ciclo de vida y el despliegue de aplicaciones en contenedores.
De esa manera, obtiene más agilidad de la nube pública y simplicidad local para reducir los dolores de cabeza de los desarrolladores en las operaciones de TI. El costo-beneficio es mayor, ya que no se requiere una capa de hipervisor adicional para ejecutar las máquinas virtuales. Tiene más flexibilidad de desarrollo para implementar contenedores, aplicaciones sin servidor y máquinas virtuales de Kubernetes, escalando aplicaciones e infraestructuras. Y, por último, la extensibilidad de la nube híbrida con Kubernetes como capa común en las nubes públicas y en las instalaciones.
¿Qué te pareció nuestro artículo? ¡Asegúrese de seguirnos en las redes sociales y siga nuestro blog para mantenerse actualizado!