Helm 101

Helm 101

El día de hoy vamos a hablar del proyecto de la CNCF HELM "The package manager for Kubernetes"

Helm CNCF

Helm es un proyecto de la CNCF que se encuentra dentro del grupo de proyectos graduados. Estos son los proyectos más "maduros" dentro del mundo CNCF.

El proyecto se encuentra dentro de la categoría "Application Definition & Image Build", categoría que tiene dos grandes grupos.

1- Herramientas enfocadas en desarrolladores que ayudan a construir aplicaciones en contenedores y K8s.

2- Herramientas enfocadas en la operación que tiene que desplegar aplicaciones de una manera estándard.

Problema a resolver

Sabiendo que tanto los ambientes que usan contenedores como el mismo K8s son súper flexibles, en cierto punto esta elasticidad trae consigo cierta complejidad.Por un lado, tenemos desarrolladores que quieren generar imágenes reproducibles de su código fuente pero por el otro lado tenemos operaciones que desea desplegar aplicaciones de una manera estándard. Y por último tenemos los equipos de plataforma que deben brindar herramientas para simplificar la creación tanto de las imágenes como del deploy de las aplicaciones (generalmente imágenes + configuraciones)

Aquí el conjunto de herramientas dentro de esta sección

image.png

Con esta introducción sobre "donde estamos parados", veamos en que nos puede ayudar helm!

Qué es HELM?

Por supuesto que para definirlo, los invito a revisar la web del proyecto!

Como una imágen vale más que 1000 palabras

image.png

Entonces helm es un manejador de paquetes para K8s ( qué será eso?) y dice ser la mejor manera de encontrar, compartir y usar software creado para K8s.

Vamos a detenernos un poquito en estas definiciones. Helm nos va a permitir descargarnos muchos paquetes ya armados por terceros con aplicaciones que podemos usar en nuestro cluster de K8s. Pero gracias a la flexibilidad de helm, vamos a poder crear nuestros propios "esqueletos" configurables de aplicaciones típicas en nuestro contexto (empresa, organización, etc)

Un ejemplo claro puede ser un esquema de microservicios utilizados en el backend para resolver todos nuestros casos de uso, por lo general estas aplicaciones son algo de lógica y una API que nos permite que estos microservicios se comuniquen entre sí. Que mejor que partir siempre de la misma base?, esto lo podemos lograr con helm desde el punto de vista del empaquetado de la aplicación (el skeleton a nivel código es otro cantar, pero muy importante tenerlo en cuenta).

Ya basta de preámbulos, vamos a ver como podemos hacer "algo" con helm!

Cómo lo usamos?

Todo muy lindo con la teoría, pero hay que aprender haciendo asi que... Manos a la obra!

Lo primero que vamos a necesitar es instalar helm, por lo que vamos por eso!

Instalar helm

Si esperaban un paso a paso de la instalación para todo sistema operativo que ande dando vueltas, se equivocaron. No es por no querer hacerlo sino porque considero mas valioso que comencemos a leer documentación, investigar por nosotros mismos, etc...

image.png

Les dejo aquí el primer paso para instalar helm, me dicen en los comentarios si pudieron instalarlo!

Usando helm

Para esta "demo" vamos a utilizar el quickstart de la misma página de helm.

Con este ejercicio vamos a comprender como podemos agregar un repositorio de charts(los paquetes de los que hablamos) para luego poder utilizarlos en nuestro cluster.

Siguiendo la guía, y cumpliendo con los requisitos previos, vemos que debemos "Inicializar el repositorio remoto de charts"

helm repo add bitnami https://charts.bitnami.com/bitnami

Obtendremos una salida parecida a la siguiente

image.png

Luego podemos listar los charts disponibles en el repositorio que llamamos "bitnami"

helm search repo bitnami

Obteniendo muchisimos charts...

image.png

Para ver como funciona la instalación de uno de ellos, siguiendo el ejemplo de la web de helm, instalamos mysql desde este chart de bitnami.

 helm install bitnami/mysql --generate-name

Podemos ver luego de la instalación un resumen de la misma junto con una lista de comandos que pueden ser de utilidad.

image.png

Si nos paramos a interpretar lo que acaba de pasar, podemos ver que lo que hicimos fue instalar el servicio de mysql en nuestro cluster al modo que la empresa "bitnami" penso que es el mejor. Ellos "inventaron" el chart y nosotros simplemente lo utilizamos, sin pensar mucho!

De echo este chart lo podemos buscar y ver como lo realizaron. Chart mysql bitnami

Si verificamos este repositorio veremos que hay una carpeta llamada "template" que es el corazón del chart. Ahi se generó la estructura de cositas a desplegar en el cluster al momento de utilizar el chart. Luego tenemos un archivo de values.yaml donde seteamos unos valores por defecto al momento de utilizarlo.

Pero la magia es que nosotros podriamos cambiar estos valores dependiendo de nuestra necesidad y darle mucha flexibilidad al despliegue del mismo!.

Helm para uso interno

Si bien helm es muy bueno al momento de tener que instalar aplicaciones de terceros dentro de nuestro cluster, por esto de que está todo empaquetado y listo, podemos ir un pasito mas allá y utilizarlo para crear nuestros propios "empaquetados"!

Pensemos en realizar nuestros propios chart de helm con todo lo necesario para que nuestra aplicación funcione, por ejemplo.

  • Deployment
  • hpa (horizontal pod autoscaler)
  • Ingress
  • Secret
  • Service
  • etc...

Ahora si todos estos archivos que tenemos dentro de nuestro template son parametrizables, podríamos luego dentro de nuestro proceso de despliegue utilizar diferentes "valores" para el mismo template y con esto disponer de una manera estandard de desplegar nuestros componentes.

image.png

Podriamos generar un ejemplo siguiendo ladocumentacion pero esta muy bien explicada y nos ejercita a revisar la web de lo que estamos usando, investigar, etc.. Se los dejo y espero las dudas en los comentarios!