A pesar del poco tiempo que posee Kubernetes en el mercado, esta herramienta se ha convertido en una referencia en lo que respecta a la gestión y asignación de paquetes de servicios (contenedores) dentro de un clúster.
Desarrollada inicialmente por Google, Kubernetes surgió como alternativa de código abierto a los sistemas Borg y Omega, llevándose a cabo su lanzamiento de forma oficial en el año 2015.
¿Qué es Kubernetes?
Kubernetes es una herramienta de código abierto designada también como orquestador, la cual, es usada para llevar a cabo la distribución y organización de cargas de trabajo en forma de contenedores. Esto, con el fin de mantener la disponibilidad y accesibilidad de los recursos existentes a los clientes, así como la estabilidad al momento de llevar a cabo la ejecución de múltiples servicios de manera simultánea.
A través de este esquema de acción, Kubernetes hace posible que numerosos servidores de diferentes tipos, separados entre sí por grandes distancias puedan mantenerse en comunicación, compartiendo cargas de trabajo para ofrecer servicios a un usuario común.
Dichos servicios pueden ser ofrecidos a través de un sistema cliente, el cual, tras haber puesto en marcha la transmisión de datos al usuario final, puede mantenerse en espera hasta producirse una respuesta por parte de este.
Para su desarrollo fue utilizado el lenguaje de programación Go, implementado por Google, quien actualmente continúa involucrado en su progreso, en conjunto con otras empresas bajo la iniciativa Cloud Native Computing Foundation.
¿Cómo funciona Kubernetes?
Al momento de llevar a cabo la gestión de los servicios mediante Kubernetes, este cambia la disposición de la red según sea el caso.
A medida que las solicitudes de una determinada clase de carga de trabajo van en aumento, Kubernetes entra en acción generando más replicas para ponerlas a disposición de los clientes y reduciéndolas en el momento que se produce un descenso en el número de solicitudes.
Gracia a este proceso, Kubernetes ganó la notoriedad suficiente para ser tomado en cuenta como una alternativa eficaz en el manejo de los recursos, rigiéndose bajo los conceptos de escalar hacia afuera y escalar hacia atrás, términos bajo los cuales es referido por los operadores de TI.
Al producirse una subdivisión de los servicios en funciones individuales y mantener la comunicación entre sí a través de la red, esto crea las condiciones necesarias para permitir a Kubernetes ampliar o reducir su escala, dependiendo de la cantidad de solicitudes que se generen en el momento.
Ventajas de Kubernetes
Una de las principales ventajas implicadas en el uso de Kubernetes radica en la capacidad que posee este orquestador para ser ejecutado en diferentes plataformas, tales como computadoras portátiles, máquinas virtuales alojadas en proveedores de nube, así como algunas distribuciones de Linux (Redhat, Debian, Ubuntu).
Añadido a esto, Kubernetes también admite servidores o nodos de distintas redes, tanto publicas como privadas, así como una combinación de ambas al momento de formar los clusters.
Kubernetes también posee la capacidad suficiente para funcionar en plataformas compuestas por varios contenedores que estén a su vez integrados por varios nodos a gran escala.
Arquitectura de Kubernetes
En Kubernetes, un clúster está integrado por varias máquinas en las que, cada una puede adoptar la posición de nodo master o nodo minion.
Si bien Kubernetes puede utilizar un solo nodo para funcionar, el numero recomendado para garantizar la productividad del clúster deberá ser de un mínimo de 5 máquinas, de las cuales, 3 sean nodos master y dos minion.
Nodos master
Estos nodos tienen la responsabilidad de gestionar el clúster en el sentido de decidir en qué nodo minion debe ejecutarse el contenedor, mantener preparado el clúster, garantizar que el número de contenedores en ejecución sea el correcto y, por último, aplicar los cambios efectuados a las aplicaciones una vez surjan nuevas versiones.
En el rango de procesos que ejecuta un nodo master están los siguientes:
- Etcd: Este hace referencia a una base de datos de valor cuya información es usada para mantener los ajustes del clúster, la cual, siempre deberá ser respaldada bajo copias de seguridad debido a su carácter crítico.
- Kube-apiserver: Este proceso es usado para facilitar la comunicación entre los nodos minion y los clientes del clúster a través de una API.
- Kube-scheduler: Este proceso permite a Kubernetes asignar los contenedores a su respectivo nodo.
- Kube-controller-manager: Este proceso es el encargado de poner en marcha una serie de controladores, con el fin de garantizar el estándar establecido para el funcionamiento de la aplicación y del clúster.
Cabe destacar que un nodo en estado master no ejecuta contenedores por lo que, no requiere tener Docker instalado o alguno de los elementos usados por un nodo minion.
Nodos minion
Estos hacen referencia a equipos dentro del clúster que ejecutan los contenedores asignados por el nodo master, los cuales, se encuentran formados por 3 elementos esenciales:
- Motor de contenedores: Este debe estar instalado en el clúster, siendo Docker uno de los motores de preferencia en Kubernetes, aunque también este puede soportar la ejecución de RKT a través de CRI.
- Kube-proxy: Por medio de este elemento es posible llevar a cabo la gestión de la red virtual, así como de las direcciones IP virtuales designadas a cada contenedor.
- Kubelet: Este el más importante de los elementos presentes en el nodo minion, puesto que se hace cargo de comprobar que todos los contenedores asignados para su ejecución en un nodo especifico estén cumpliendo su labor en él.
Otros elementos de Kubernetes
Añadido a los elementos mencionados, Kubernetes dispone de una serie de addons que ejercen su acción dentro del clúster.
Estos addons pueden ser tomados en cuenta como contenedores, aunque, de manera opcional por lo que, pueden o no estar presentes cumpliendo la labor de proporcionar servicios complementarios, tales como:
- Web Dashboard: Brinda al cliente una interfaz gráfica para facilitar la gestión y supervisión del clúster.
- Monitorización de clúster: Este se encuentra desarrollado en cAdvisor, siendo expuesto por kubelet para ser consultado.
- Sistemas de logging centralizado.
- DNS interno: Si bien este addon puede ser un elemento opcional, resulta especial, ya que, por lo general, un sistema de DNS siempre estará presente dentro del clúster, siendo kube-DNS el más usado en este caso.