¿Qué es Minikube y cómo funciona?

En el mundo del desarrollo de aplicaciones, es cada vez más frecuente encontramos con entornos de despliegue basados en contenedores y Kubernetes se ha consolidado como el estándar para la orquestación de este tipo de elementos. Sin embargo, para muchos desarrolladores, configurar y manejar un clúster completo de Kubernetes puede ser una tarea compleja, especialmente cuando solo necesitamos un entorno de desarrollo local. ¡Pero no os preocupéis, Minikube ha venido para ayudarnos!

¿Qué es Minikube?

Minikube es una herramienta de código abierto que permite a los desarrolladores ejecutar un clúster local de Kubernetes en su máquina personal. Está diseñado para ser una solución simple y ligera, ideal para probar y desarrollar aplicaciones en Kubernetes sin necesidad de desplegar un clúster completo en la nube o en múltiples servidores.

Minikube nos ayuda a simular un clúster de Kubernetes localmente, así que veamos qué componentes tiene un clúster a grandes rasgos.

Uso de Minikube para crear un clúster.

Un clúster de Kubernetes se compone de dos piezas principales: el Control Plane y los Nodes, en una arquitectura Hub and Spoke. El primero de ellos actúa como el Hub y los Nodes se comunican con él para realizar su trabajo.

El Control Plane es responsable de coordinar todas las actividades del clúster, además de orquestar, planificar y mantener el estado de las aplicaciones que se ejecutan en él. Esto incluye, por supuesto, la actualización de las mismas.

Por su parte, el Node puede ser una VM o una máquina física que actúa como worker dentro del clúster. Cada nodo tiene un agente Kubelet que se encarga de la comunicación con el Control Plane.

Arquitectura de un clúster.

¿Cómo funciona Minikube?

Minikube se encarga de simular un clúster de Kubernetes con un solo nodo. Esto lo consigue creando una VM en un hipervisor como VirtualBox, VMware, Hyper-V, etc., o bien creando un contenedor en la máquina anfitriona que le permita simular dicha VM.

Esta herramienta open source utiliza drivers para poder comunicarse con el contenedor o VM generado. En esta página podemos encontrar los Drivers de Minikube soportados dependiendo del sistema operativo.

Antes de desplegar Minikube, debemos tener al menos uno de esos sistemas de virtualización o de contenedores para poder lanzarlo. En mi caso, estoy utilizando únicamente Docker en un sistema operativo Ubuntu.

Lanzamos el comando minikube start --kubernetes-version=v1.15.0

Minikube permite configurar mucho la forma en la que se inicia. En este caso, arrancando sin argumentos vemos que está utilizando el driver por defecto “docker”. Esto se puede cambiar mediante cualquier hipervisor, pero para el caso que nos ocupa, utilizaremos el de Docker.

Por otra parte, se observa que al iniciar Minikube también se activan una serie de addons que introduciremos más adelante en este post.

Cuando queremos inicializar un clúster de Kubernetes en local, un aspecto principal de la configuración que seguro queremos tener controlado es el tamaño del clúster, y Minikube nos facilita la definición del mismo.

minikube start --memory 7200 --cpus 6 --disk-size=30g

De esta manera, podemos configurar su tamaño, que recordemos que solamente tiene un nodo.

También podemos configurar los drivers con los que vamos a lanzar nuestra virtualización del clúster:

minikube start –driver=docker

Asimismo, Minikube nos permite ejecutar nuestro clúster utilizando el máximo de los recursos disponibles.

minikube start --memory=max --cpus=max

Podemos lanzar un clúster sobre una versión específica de Kubernetes y, además, ejecutar múltiples clústeres en una única máquina. Para ello, debemos hacer uso de lo que se conoce como “profile”.

Para ver la lista de clústeres existentes en la máquina, podemos ejecutar:

minikube profile list

Y para ejecutar un nuevo profile, lanzamos:

minikube start –profile=my-profile --kubernetes-version=v1.20.0

Siempre tendremos un profile activo, pero podemos cambiar de uno a otro de la siguiente manera:

minikube profile my-profile

Un caso de uso habitual es querer contactar con el clúster de Kubernetes desde fuera. Es posible configurar Minikube para que escuche en una red remota. Sin embargo, hay que recordar que Minikube está pensado para el desarrollo local, por lo que se desaconseja encarecidamente tener este tipo de prácticas en un entorno productivo debido a sus implicaciones en cuanto a la seguridad.

minikube start --listen-address=0.0.0.0

Addons

Una vez tenemos nuestro clúster activo, podemos habilitar una serie de addons que nos ayudan a extender la funcionalidad de Minikube.

minikube addons list

Estos addons nos permitirán, por ejemplo, habilitar el uso de la interfaz web para la administración de nuestro clúster Kubernetes. Si por alguna razón el plugin de dashboard estuviera deshabilitado, lo habilitaremos con el siguiente comando:

minikube addons enable dashboard

minikube dashboard

En la pantalla de logs nos aparecerá una URL que podremos utilizar para acceder a toda la administración de nuestro clúster. Podemos ver todos los logs del tipo de recurso que queramos, todos los namespaces, operar con los recursos eliminándolos, e incluso exportar la definición en YAML de los mismos. Además, podremos iniciar una sesión de terminal dentro de un pod para navegar por la imagen.

A continuación, veremos algunos de los addons que personalmente más he puesto en práctica.

Metrics-server: Este addon nos permite ver las métricas de nuestro clúster. Este sistema de métricas es totalmente necesario si se quiere utilizar el sistema de autoescalado horizontal (HPA).

Para habilitarlo, usaremos:

minikube addons enable metrics-server

Ahora podremos ver las métricas de un pod, por ejemplo:

kubectl top pods

Metrics Server recopila métricas de los recursos de Kubelet y las expone a través de una API. Este servicio está diseñado para que podamos trabajar y validar nuestras directivas de autoescalado, pero no está destinado a ser utilizado como herramienta de monitorización completa.

Ingress es otro addon imprescindible, especialmente cuando queremos conectar nuestros servicios o microservicios con otros componentes externos, como consultas externas. Este addon despliega un controlador de NGINX que gestiona el acceso HTTP y HTTPS a los servicios dentro del clúster. Con Ingress, podemos configurar nuestras propias rutas de enrutamiento, balanceo de carga y políticas de seguridad SSL.

Por último, me gustaría destacar otro addon llamado Registry, que nos permite levantar un servicio de Docker Registry completamente privado que podemos administrar nosotros mismos. Este servicio registry puede ser utilizado para el despliegue de nuestras imágenes privadas en Kubernetes. Podemos subir imágenes, almacenarlas y luego descargarlas en nuestro clúster de Kubernetes según sea necesario.

Imágenes

En nuestros pipelines de desarrollo de aplicaciones localmente, nos encontraremos con muchas situaciones en las que queremos cargar una imagen previamente compilada dentro del clúster de Kubernetes local. Cuando ejecutamos docker build para una imagen, ésta se queda registrada dentro de nuestro sistema de imágenes local, que por supuesto no es accesible desde fuera ni tampoco desde nuestro clúster.

Minikube nos provee un comando para poder cargar las imágenes al clúster.

minikube image load <imagen>

Si queremos ver qué imágenes han sido cargadas y estarán accesibles desde nuestro cluster, podemos usar:

minikube image ls

También existe la opción de utilizar el registry privado del addon que antes hemos mencionado.

Conclusión

Minikube se ha convertido en una herramienta esencial para desarrolladores y administradores de sistemas como yo, que necesitan desarrollar aplicaciones orientadas a contenedores en un entorno Kubernetes local. Su facilidad de uso, junto con la capacidad de simular un entorno de producción a pequeña escala, lo convierte en una opción ideal para una variedad de casos de uso. 

Sin embargo, es importante tener en cuenta que no es una herramienta destinada para entornos productivos, por lo que se debe limitar su utilización a fines de desarrollo y pruebas.

¡Esto es todo! Si este artículo te ha parecido interesante, te animamos a visitar la categoría Data Engineering para ver todos los posts relacionados y a compartirlo en redes. ¡Hasta pronto!
Óscar García
Óscar García
Artículos: 14