Minikube

Artículo

Minikube

Tip & Tricks para minikube en entornos Hyper-V

Cada vez es más frecuente utilizar arquitecturas software basadas en contenedores para la ejecución de aplicaciones. Esto es debido a que este tipo de tecnología simplifica de una manera muy importante todo el proceso de despliegue y actualización además, por supuesto, de permitir otras funcionalidades como el balanceado escalado de aplicaciones, etc.

Estas arquitecturas de ejecución de contenedores se suelen basar en orquestadores de contenedores como son Kubernetes, Messos, Docker Swarm entre otros. Kubernetes es sin duda el orquestador más extendido y el que a día de hoy ofrece más funcionalidades.

Sin embargo, pensando en los equipos de desarrollo este tipo de infraestructuras suelen enfocarse a entornos compartidos, es decir, entornos de desarrollo, preproducción, uat o producción. Los desarrolladores necesitan disponer de entornos personales donde poder probar sus desarrollos antes de promocionarlos a este tipo de entornos.

Dadas las características de este tipo de orquestadores requieren de un importante esfuerzo tanto en recursos hardware como en tiempo de instalación (si no se dispone de entornos cloud gestionados). Es decir, que un desarrollador disponga de un clúster personal que pueda utilizar para sus pruebas no es lo habitual.

Por ello, han surgido distintas herramientas como pueden ser minikube o microk8s que son entornos reducidos muy sencillos de poner en marcha y que aunque no son clúster de kubernetes son una herramienta muy útil en el proceso de desarrollo.

En las siguiente líneas vamos a detallar algunas de las funcionalidades de uno de ellos, minikube, y como ponerlo en marcha en un entorno Windows con Hyper-v como sistema de virtualización.

Minikube es una herramienta opensource que mediante la creación de una máquina virtual (en sistemas Linux puede funcionar sin crear esta virtualización) permite disponer de un entorno sencillo de Kubernetes con la mayor parte de sus funcionalidades.

En entornos Windows 10 cuando se realiza la instalación de Docker es necesario activar la utilización de Hyper-V que es el entorno de virtualización de Microsoft. Esta configuración impide la utilización de VirtualBox que es la forma más habitual de utilización de minikube. Minikube dispone también de soporte para Hyper-V.

La instalación de minikube puede realizarse con distintos gestores de paquetes o directamente descargando el binario. Se puede consultar las diferentes opciones desde la web oficial: https://kubernetes.io/es/docs/tasks/tools/install-minikube/

Para ello primeramente es necesario indicar a minikube que debe utilizar Hyper-V en lugar de VirtualBox que es la opción por defecto. Para ello, se puede utilizar el siguiente comando que nos permitirá configurar minikube para que cualquier instancia se lance con este driver.
minikube config set vm-driver hyperv

Tras realizar esta configuración se puede realizar el arranque de minikube mediante el comando
minikube start

Este comando realizará la descarga de la imagen de la máquina virtual realizará la configuración necesaria y la pondrá en marcha. En este tipo de entornos Windows es necesario que el usuario tenga permisos de administrador o lanzar el comando desde una consola o PowerShell de administrador.

Minikube 1

Una vez completado el proceso se configurará kubectl (se debe disponer de esta herramienta en el sistema) para acceder al entorno de minikube. En la siguiente imagen se muestra la ejecución de un comando de kubectl directamente sobre minikube.

Minikube 2

Con el objetivo de testear el entorno se va a explicar a continuación como desplegar una sencilla aplicación basada en nginx. Primeramente como en cualquier clúster se realiza la creación del deployment en este caso no se utiliza un fichero YAML pero se podría utilizar.

Minikube 3

Este comando de kubectl crea un deployment de la aplicación que a instruye al clúster a crear un pod de la imagen seleccionada.

En este caso se puede observar que el contenedor tiene problemas de arranque y esto es debido a una configuración por defecto que se establece cuando se crea la máquina virtual en Hyper-V y que impide que esta instancia tenga conectividad a internet.

Minikube 4

Una de las formas para solucionar el problema es crear un switch en el gestor de Hyper-V. El problema detectado es que en alguna configuraciones Hyper-V solo dispone de una conexión de red interna y por ello no tiene conectividad con internet. Para crear este nuevo switch se debe elegir la opción “Administrador de conmutadores virtuales” y crear un nuevo switch seleccionado la opción red externa.

Minikube 5

Como siguiente paso es necesario parar la máquina virtual de minikube, para ello, se debe ejecutar el comando minikube stop.

Una vez detenida la máquina virtual es necesario cambiar la configuración de red de esta máquina virtual para que utilice el nuevo switch creado.

Minikube 6

Tras arrancar de nuevo minikube con el comando start ya se podrá ejecutar el deployment.

Minikube 7

En la siguiente imagen se puede observar que el pod se ha creado correctamente y se encuentra en estado running

Minikube 8

Una de las características de este tipo de entornos es la facilidad para escalar una aplicación de manera horizontal, es decir, crear nuevas instancias y que trabajen conjuntamente para dar servicio a los usuarios. Este concepto que se encuentra en los clúster de kubernetes también puede utilizarse en minikube con el mismo comando de kubectl.

Minikube 9

Como se puede observar en la imagen anterior el comando scale produce que se generen cuatro nuevas instancias del pod hello-node.

El siguiente paso es que la aplicación que se está desplegando se encuentre accesible a los usuarios, esto se consigue mediante la publicación del servicio, en este caso, del tipo LoadBalancer para que distribuya el tráfico entre todos los pods disponibles.
 

Minikube 10

La diferencia de minikube con clúster reales es que en este caso para este tipo de servicios no es capaz de asignar una dirección ip pública al mismos, lo cual tiene sentido al tratarse de un entorno local. Al no disponer de esta IP no se puede acceder directamente al servicio.

Minikube 11

Para poder acceder al servicio minikube dispone de un comando service que genera el mapeado de puertos necesario para que se pueda acceder localmente y abre el navegador web por defecto.

Minikube 12

En conclusión, minikube es una herramienta sencilla de utilizar, que consume unos recursos moderados y que nos permite probar en gran medida como se va a comportar nuestra aplicación en un entorno de contenedores. Este tipo de herramientas son muy útiles a los desarrolladores para poder prever posibles problemas en los despliegues y en el momento de la ejecución.

Conoce a nuestro experto

David Figueroa Alejandro

Manager Especialista en DXD

David inició su carrera profesional en 2004 y durante este tiempo ha participado en distintos proyecto en gran variedad de tecnologías (Java, .Net, SAP, Cloud, etc.). Actualmente es arquitecto de soluciones tanto en ecosistemas Java como en entorno cloud. En particular, dispone de la certificación de arquitecto profesional en Google Cloud Platform y dispone de conocimientos en otras cloud.