Tutorial Kubernetes en Español

Dificultad: Fácil
Tiempo de Lectura: 6 minutos

Hace un tiempo publicamos un tutorial de Docker para principiantes, donde abarcamos muchos temas desde cero. Y hoy estaremos comenzando con un tutorial muy interesante relacionado justamente a los contenedores virtuales.

Hablaremos puntualmente de Kubernetes, una plataforma sobre la cual día a día se escucha mucho más dentro de la comunidad de desarrolladores. Dicha plataforma, no solamente es una de las más preferías hoy día, sino que realmente facilita y mejora el despliegue y escalabilidad de nuestras aplicaciones.

Además, nos permite centralizar nuestras apps en una sola infraestructura, lo cual nos facilita el manejo de éstas. Igualmente, veamos más detalladamente qué es esta plataforma, por qué es tan importante utilizarla y cómo nos ayuda en nuestro día a día como desarrolladores.

¿Qué es Kubernetes?

Kubernetes (K8s) es una plataforma de código abierto, que fue creada por Google, aunque después donada a CNCF (Cloud Native Computing Foundation), altamente influenciado en la tecnología Borg (también creada por Google), utilizada para la gestión, el deployment, la escalabilidad y el monitoreo de contenedores.

Cabe destacar además, que si bien se escucha mucho de dicha plataforma y su uso con Docker, también soporta varias tecnologías más, como pueden ser (rktcri-o y frakti).

Aunque sí es cierto que está especializada y fué creada para trabajar con contenedores Docker. Para tener una idea un poco más clara de que se trata la tecnología, veamos algunas de sus principales características.

Características importantes:

  • Distribución inteligente de contenedores
  • Administración de las cargas de trabajos (provee balanceo de carga)
  • Fácil gestión de servicios y aplicaciones
  • Alta disponibilidad
  • Gran flexibilidad y permite trabajo modular
  • Monitoreo de contenedores

Estas son solamente algunas de sus características, más adelante veremos bien a qué nos referimos con cada punto.

¿Para qué sirve?

Como hemos visto, Kubernetes es una tecnología muy moderna y relativamente nueva que se utiliza cada vez más. Ahora bien, ¿para qué sirve realmente? En pocas palabras, Kubernetes nos ayuda a administrar los containers en los cuales tenemos nuestras aplicaciones alojadas de una forma fácil, rápida y escalable. Además de también contar con monitoreo y balanceo de carga.

Es decir que, al utilizar esta tecnología, a través de su panel o línea de comando, podremos fácilmente administrar, configurar y escalar nuestras aplicaciones. Posiblemente la mejor forma de entender por qué se está popularizando tanto esta tecnología, sea viendo cuales son las principales características y ventajas que nos aporta.

Y también, cuáles son sus más importantes funcionalidades.

Binpacking automático

Al nosotros indicarle a Kubernetes los requisitos, recursos y demás restricciones de cada contenedor, éste se encargará de colocarlos automáticamente sin sacrificar la disponibilidad. Además de mezclar las cargas de trabajo críticas para permitir mejorar el esfuerzo y aumentar la mejor utilización y ahorro de recursos.

Auto-reparación

Kubernetes se encarga de reiniciar los contenedores que fallan, reemplazalos y reprogramarlos cuando los nodos mueren. Además, en caso de ser necesario, se encargará de matar o parar los contenedores que no respondan a un chequeo de salud definido por el usuario.

Permitiendo que éstos no sean servidos a menos que estén funcionando correctamente.

Permite escalabilidad vertical

También nos permite escalar nuestras aplicaciones hacia arriba y hacia abajo con un simple comando, utilizando una IU, o automáticamente según el uso de CPU.

Descubrimiento de servicios y balanceo de carga

Al utilizar Kubernetes no necesitamos modificar nuestras aplicaciónes para usar un mecanismo de descubrimiento de servicios desconocidos.

Él mismo se encarga de que los contenedores tengan sus propias direcciones IP y nombre DNS únicos para un conjunto de contenedores, y puede por si mismo, equilibrar la carga entre ellos.

Despliegues y retrocesos automatizados

Kubernetes se encarga de implementar progresivamente los cambios en las aplicaciones o configuraciones, y a la vez supervisa el estado de éstas para asegurarse de no matar todas las instancias al mismo tiempo.

Y por supuesto, si algo sale mal, Kubernetes revertirá el cambio automáticamente.

Secrets y gestión de la configuración

La información sensible, como las passwords o las claves ssh que almacenamos se ocultan en secrets. Y ambos secrets (configuración y passwords) se despliegan y se actualizan sin tener que volver a construir la imagen o exponer información confidencial.

Permitiendo así que la información se encuentre segura.

Orquestación de almacenamiento

Es posible montar automáticamente el sistema de almacenamiento que deseemos. Por ejemplo, utilizando nuestro almacenamiento local, un proveedor de nube pública como GCP o AWS, o bien un sistema de almacenamiento en red como NFS, Ceph, Cinder, iSCSI, Gluster o Flocker.

Ejecución Batch (por lotes)

Además de los servicios, con él, es posible administrar las cargas de trabajo Batch y CI, reemplazando los contenedores que fallan.

Ahora sí, tenemos una idea más completa de lo que podemos hacer con Kubernetes así como también saber o al menos imaginarnos, por qué es tan importante y a la vez tan utilizado hoy en día. A continuación, conoceremos un poco maś sobre su arquitectura para entender mejor como es que realiza todas estas cosas.

Arquitectura

Ahora veamos un poco cómo es la Arquitectura de Kubernetes y los componentes claves de ella.

Una cosa importante es que, como podemos ver en el siguiente diagrama, Kubernetes trabaja con una arquitectura llamada Maestro-Esclavo. En ella, tenemos un nodo Maestro en donde se encuentra la API y desde la cual administramos a los esclavos. Y también el Controller Manager, el encargado de administrar todos los Pods (veremos más tarde qué significa).

Y por otro lado, los esclavos, es decir los nodos que contienen los Pods, y el Kube-proxy, que será el encargado de balancear las peticiones y enviarlas a quien tenga menos demanda.

 

Fig. 01. Esquema de arquitectura de Kubernetes

Fig. 01. Esquema de arquitectura de Kubernetes

Componentes en Nodo Master

Comencemos explicando qué son y para qué sirven los componentes que vemos a simple vista en nuestro diagrama.

Primero veamos los componentes que se encuentran dentro del nodo master en el diagrama

  • etcd: Es un storage que se encarga de guardar datos de forma persistente, liviana y confiable; Distribuida en forma clave-valor y desarrollada por CoreOS. Contiene la configuración/información de los nodos. Además representa el estado de éstos en punto de tiempo determinado y es accesible solamente por la Api Server de Kubernetes, debido a que contiene o puede contener información sensible.
  • Api Server: es quien sirve a la API de Kubernetes, enviando los datos en formato JSON a través de HTTP. Es quien valida y recibe todas las peticiones y actualiza los objetos que se encuentran en etcd.
  • Scheduler: Es quien se responsabiliza de distribuir la carga. Él se encarga de verificar los recursos utilizado por los nodos y ajustar el uso con los recursos que tenga disponible, es por ello que es uno de los componentes más importantes.
  • Controller Manager: se puede considerar como un proceso o demonio que se encuentra corriendo continuamente y que además se encarga de recolectar la información y enviarla a la API Server.

Componentes de los Nodos

Ahora veamos para qué se utilizan los componentes encontrados en los Nodos de Kubernetes.

  • Docker: aquí encontramos a Docker, que se utiliza para correr nuestras aplicaciones en un ambiente encapsulado.
  • Kubelet: es un proceso que se encarga de mantener el estado de trabajo y el nodo mismo. Lee las configuraciones necesarias de etcd y recibe los comandos del nodo maestro que necesite para trabajar así como también envía el estado del nodo cada pocos segundos. Además también se encarga de los port forwarding, configuraciones de la red, etc.
  • Kubernetes-proxy: es quien se encarga de que los servicios se encuentren disponibles para el exterior y también del balanceo de carga y enrutamiento de tráfico por dirección de IP.

Conceptos Importantes

Además de la arquitectura y sus componentes, hay otros conceptos básicos que debemos tener en cuenta y con los cuales nos tenemos que ir familiarizando para poder trabajar cómodamente con Kubernetes.

Aquí dejaremos una pequeña definición de cada uno de ellos. Igualmente poco a poco iremos entendiendo bien qué son y para qué se utilizan. Todo a medida que continuemos con nuestros tutoriales y comencemos a utilizar esta tecnología.

  • Cluster: Es un grupo de máquinas u ordenadores, que pueden ser físicos o bien virtuales, que se encuentran unidos muchas veces por una red y que se comportan como una.
  • Nodo: es básicamente una máquina que se está ejecutando en Kubernetes, en las cuales se pueden programar Pods.
  • Pod: es un grupo de uno o más containers que comparten el almacenamiento y también sus configuraciones necesarias para ser ejecutados.
  • Replication Controller: Es quién maneja los fallos antes comentados y recrea en caso de ser necesario los pods. Además, también se asegura de que el número de réplicas del pod se esté ejecutando.
  • Service: Es una abstracción que define un conjunto lógico de pods y también las reglas y lógica para acceder a ellos.

Conclusión

Hoy hemos realizado una introducción a Kubernetes con los punto más importantes. Puntos que sin duda debemos tener claros para poder comenzar a utilizarla.

Si bien no hemos llegado aún a instalarla y utilizarla, hemos dado el primer paso, que es conocer más acerca de ella. Luego de haber leído este tutorial, sin dudas estamos listos para el siguiente paso. En nuestro próximo tutorial, sí comenzaremos a ver de forma práctica cómo funciona Kubernetes.


¿Te resultó útil el artículo? Compártelo con tus colegas: