Contacto



Marcas de Telefónica

Son Marcas de Telefónica

Kubernetes: ¿Sabes lo que es?

Cada vez que escucho a alguien decir que la Nube es 'solo la computadora de otra persona', me hace sonreír, por tal motivo, fue uno de los primeros puntos que elegí para mi artículo sobre 'Mitos de la nube'.

En realidad, sí, excluyendo el caso de las nubes privadas, es bastante obvio que la nube incluye la infraestructura de un tercero. Sin embargo, el error no está en decir que la nube es la computadora de otra persona, sino en decir que es sólo la computadora de otra persona.

Por su mismo concepto, asociar la nube, con sus infinitas posibilidades, con la palabra "sólo" parece ser bastante contradictorio. La nube permite innovaciones reales, tanto que han cambiado completamente la forma en que las empresas estructuran la tecnología y hacen negocios.

No hace mucho, ¿quién podría haber imaginado que las mismas herramientas utilizadas por las grandes corporaciones estarían disponibles y serían financieramente viables para las pequeñas y medianas empresas? ¿Qué recursos críticos como los servidores podrían estar a solo un clic de distancia y estar disponibles en cuestión de minutos, permitiendo la demanda, elasticidad y automatización?

Bueno, volviendo a la pregunta central de este artículo: ¿Sabes qué son los Kubernetes y su importancia? Para responder a esto, primero debemos entender otro concepto clave: los contenedores de Linux.

Los contenedores son un conjunto de procesos aislados del resto del sistema, crean un entorno de ejecución completo, que incluye una aplicación y todas sus dependencias, como bibliotecas, otros binarios y los archivos de configuración necesarios para ejecutarlo, todo ello en un paquete. Al utilizar este contenedor aislado para la aplicación, se pueden resumir las diferencias en las distribuciones de los sistemas operativos e incluso la infraestructura.

Es importante no confundir los contenedores con la virtualización. Por ejemplo, un servidor físico que ejecuta cinco máquinas virtuales tendría un hipervisor y cinco sistemas operativos separados que se ejecutan en él. En el caso de un servidor que ejecuta aplicaciones en contenedores, habría un solo sistema operativo, y cada contenedor comparte el kernel del sistema operativo con los demás, incluso si permanecen aislados individualmente. ¿Qué significa esto en términos prácticos? Bueno, aunque un contenedor puede tener un tamaño de poco más de 10 megabytes, un servidor virtual, que normalmente incluirá un sistema operativo completo, probablemente requerirá varios gigabytes.

Los contenedores tienen muchos beneficios, por ejemplo, mientras que una máquina virtual tarda varios minutos en iniciar y cargar sus aplicaciones, las aplicaciones en contenedores se pueden instanciar casi de inmediato. Otra gran ventaja es el enfoque modular de los contenedores: no es necesario ejecutar una aplicación compleja por completo dentro de un solo contenedor, es perfectamente posible dividir la aplicación en módulos, por ejemplo, separando la base de datos de la parte frontal. Este tipo de arquitectura se conoce como “microservicios”, y las aplicaciones que se desarrollan utilizando este modelo son mucho más sencillas de administrar. Por ejemplo, dado que cada módulo es relativamente simple y tiene interfaces y operaciones bien definidas, es perfectamente posible realizar actualizaciones individuales en cada módulo sin tener que reconstruir la aplicación en su totalidad.

Pero ¿qué pasa con Kubernetes?

En pocas palabras, los contenedores son algo extremadamente práctico y están siendo ampliamente adoptados por organizaciones que desean tener más agilidad o incluso adoptar un enfoque basado en DevOps. Esta facilidad de uso termina creando un desafío: una vez que comienzas a usar, los contenedores pueden crecer en número muy rápidamente, ¡multiplicándose a una velocidad asombrosa!

Aquí es donde entra Kubernetes, originalmente creado y desarrollado por los ingenieros de Google, es una plataforma de código abierto que se utiliza para organizar y administrar los clústeres de contenedores, eliminando la mayoría de los procesos manuales necesarios para implementar y escalar aplicaciones en contenedores. En otras palabras, cuando es necesario organizar grupos de contenedores de Linux en grupos, que pueden estar en nubes públicas, privadas o híbridas, Kubernetes ayudará a administrar estos grupos de manera fácil y efectiva.

De hecho, Kubernetes organiza los contenedores en grupos llamados 'pods', lo que permite resolver muchos de los problemas relacionados con su proliferación. Los pods crean una capa extra de abstracción, por lo que es mucho más fácil controlar la carga de trabajo y proporcionar los servicios necesarios para la operación del contenedor, como la red y el almacenamiento.

 

¿Qué puedo hacer con Kubernetes?

Si ha comprendido el enfoque modular utilizado por los contenedores, es fácil imaginar que un entorno de producción incluirá múltiples contenedores distribuidos en múltiples hosts. Con el poder de orquestación de Kubernetes, es mucho más sencillo crear y administrar servicios de aplicación que abarcan múltiples contenedores, programar cómo se utilizan estos contenedores en el clúster, escalarlos e incluso administrar su integridad a lo largo del tiempo. Por supuesto, Kubernetes también permite la integración con seguridad, redes, almacenamiento, monitoreo y otros servicios.

 

Entre otras funcionalidades, Kubernetes le permite:

  • Organizar contenedores en múltiples hosts, en nubes públicas, privadas o híbridas.
  • Optimizar el uso del hardware, maximizando la disponibilidad de recursos para ejecutar las aplicaciones.
  • Mayor agilidad para escalar aplicaciones de contenedores y recursos relacionados.
  • Administrar y automatizar la mayoría de las implementaciones y actualizaciones de aplicaciones.
  • Asegurar la integridad de la aplicación y la recuperación automática en contenedores, con ubicación, reinicio, replicación y escalados automáticos.

 

Algunos conceptos importantes:

Si deseas comprender cómo funciona la estructura de Kubernetes, por supuesto, deberás comprender algunos conceptos y términos específicos, puedes acceder al glosario completo en Kubernetes.io:

  • Servidor de API: el servidor de API es un componente esencial y sirve a la API de Kubernetes mediante JSON a través de HTTP, que proporciona la interfaz interna y externa para los Kubernetes. El servidor API procesa y valida las solicitudes REST y actualiza el estado de los objetos API en etcd, lo que permite a los clientes configurar las cargas de trabajo y los contenedores en los nodos Trabajadores.
  • Administrador del controlador: el proceso que ejecuta los principales controladores Kubernetes, como el Controlador DaemonSet y el Controlador de replicación. Los controladores se comunican con el servidor de API para crear, actualizar y eliminar los recursos que administran, como los pods.
  • Programador: el componente que selecciona en qué nodo se ejecuta un pod no programado (la entidad básica administrada por el Programador), según la disponibilidad de los recursos. El Programador realiza un seguimiento del uso de los recursos en cada nodo para garantizar que la carga de trabajo programada no exceda los recursos disponibles. Para este fin, el Programador debe conocer los requisitos de recursos, la disponibilidad de los mismos y otras restricciones y directivas de políticas proporcionadas por el usuario, como los requisitos de calidad de servicio (QoS), la configuración regional de los datos, etc. En esencia, la función del Programador es combinar la función "suministro" con la "demanda" de la carga de trabajo.
  • Nodo: Un nodo es una máquina controlada en los Kubernetes. Un nodo puede ser una máquina virtual o física, dependiendo del clúster. Cuenta con los Servicios necesarios para ejecutar los Pods y es administrado por los componentes principales. Los servicios en un nodo incluyen Docker, kubelet y kube-proxy.
  • Pod: El objeto más pequeño y simple de los Kubernetes. Un pod representa un conjunto de contenedores que se ejecutan en su clúster.
  • ReplicaSet: la nueva generación de ReplicationController, ReplicaSet, garantiza que un número específico de réplicas de los pods se estén ejecutando al mismo tiempo.
  • Kubelet: un agente que se ejecuta en cada nodo del clúster. Esto asegura que los contenedores se estén ejecutando en un pod.
  • Kubectl: una herramienta de línea de comandos para comunicarse con un servidor de API de Kubernetes.

Tiempo de trivia: 7 de los 9 papeles en el origen Kubernetes

Como buen Trekker, nunca dejaría pasar la oportunidad de hablar sobre cómo un personaje querido influyó en una tecnología tan importante. En su origen en Google, ¡Kubernetes tenía otro nombre en clave! Fue el Proyecto Siete, una referencia a Siete de Nueve de Star Trek Voyager, un dron Borg humano que, después de algunos conflictos iniciales con el Capitán Janeway, se unió a la tripulación del Viajero y se convirtió en uno de sus mejores oficiales.

Cláudio Dodt

Evangelista Cloud en Brazil

LinkedIn 

4c980585-2fc4-4f8b-9d33-8988fe0d557f