¿Alguna vez te has preguntado cómo lograr un enfoque completo de IaC (Infraestructura como Código) para el despliegue de tus aplicaciones en el clúster Kubernetes? No importa si ya lo has conseguido o acabas de empezar a buscar la mejor herramienta, helmfile puede ser un gran aliado. En este post veremos cómo configurar un helmfile.
Antes de empezar con helmfile lo mejor es ver algo de Helm:
Guía-Tutorial Kubernetes – Helm: Control de despliegues
La imagen de abajo presenta la solución objetivo. Dentro del cluster se desplegará el frontend (kanban-ui) y el backend (kanban-app). Para la persistencia de los datos se utilizará la base de datos Postgres. El código fuente de ambos microservicios se puede encontrar en el repositorio de GitHub – kanban-board.
Además está añadida la aplicación adminer, que es un cliente GUI para entrar en la base de datos.
La imagen anterior no sólo muestra las aplicaciones que se desplegarán en el clúster Kubernetes, sino también los objetos que se requieren para ejecutarlas, como Deployments o Services. Con el enfoque clásico, kubectl, nos vimos obligados a crear archivos de definición para cada uno de ellos. Incluso si en la mayoría de los casos, por ejemplo en el caso de ClusterIPs, estos objetos no difieren mucho entre aplicaciones.
Definitivamente, este enfoque no es escalable en el mundo de los microservicios, donde por lo general hay una necesidad de desplegar docenas o incluso cientos de aplicaciones. Y si para cada una de ellas tuviéramos que crear un par de archivos YAML, se convertiría rápidamente en una pesadilla. Pero este problema podría resolverse con el motor de plantillas de Kubernetes – Helm. Podemos definir una chart genérico Helm (plantilla) y reutilizarlo a través de múltiples aplicaciones sólo mediante la inyección de valores específicos en la plantilla.
Hasta cierto punto está resuelto el problema, pero hay un inconveniente en el uso de Helm. Para instalar o actualizar cualquier chart en un cluster es necesario ejecutar un comando imperativo específico. En otras palabras, para cambiar el estado de un cluster necesitas ejecutar un comando que es específico para un despliegue dado.
En el mundo Java se usa Maven o para JavaScript se usa npm. Ambas herramientas permiten ejecutar el mismo comando a través de múltiples proyectos para realizar la misma acción como ejecutar tests- mvn test. Helm actualmente no soporta esta característica, no somos capaces de instalar, actualizar o revertir todas las aplicaciones de un cluster entero con un solo comando.
Pero existe helmfile, que podría ser un remedio.