lunes, 19 de agosto de 2024

Helm el manejador de paquetes de Kubernetes

## ¿Qué es Helm?

Helm es el administrador de paquetes de Kubernetes. En pocas palabras es un nivel más alto sobre kubernetes para manejar las aplicaciones, esto nos permite poder desplegar aplicaciones y solo cambiar ciertas variables de configuración en tus archivos de Helm. Piensa que Helm es el equivalente a apt, yum, Homebrew o pip para kubernetes.


## ¿Cómo lo hace?

Para el cómo vamos describir las partes de Helm:

    - Chart: Chart.yaml, define los datos de la aplicación.

    - Values: values.yaml, define las variables de configuración.

    - Templates: templates/, define las plantillas.

    - Charts: charts/, define los directorios de las aplicaciones. Almacena todas las dependencias de los charts que sedefinan en Chart.yaml y se reconstruyan con ```bash helm dependency build``` o ```bash helm dependency update```.


La ventaja es poder desplegar nuestra aplicación en ambientes de desarrollo, pruebas o producción de la manera más homogenea posible solo cambiando variables en nuestros Helm charts y evitar esa "diferencia/drift" que se suele tener entre ambientes.

## Repositorios

Ya mencioné que Helm es una manejador de paquetes, lo interesante es que se pueden usar repositorios de paquetes de terceros e instalar aplicaciones como Grafana, Prometheus, Argo CD, etc. de una forma sencilla y así mantener versionados los paquetes.

Existe un repositorio de paquetes que sería el equivalente de dockerhub para helm el cual está [aquí](https://artifacthub.io/).

## Instalación

Ya son muchas palabras pero nada de acción, helm es un simple ejecutable que puedes descargar desde el github del proyecto [aquí](https://github.com/helm/helm/releases)

**Nota:** revisa si en los repositorios de tu distribución se encuentra el paquete, actualmente soporta Linux, MacOS, Windows y FreeBSD:

fedora

```bash
sudo dnf install helm
```

Debian/Ubuntu

```bash
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm
```

Archlinux

```bash
sudo pacman -S helm
```

FreeBSD

```bash
pkg install helm
```

Si lo quieres instalar "manualmente"  una vez hayas descargado el ejecutable lo descomprimes (tar -zxvf helm-VERSION_DESCARGADA.linux-amd64.tar.gz). y lo guardas en tu path, en mi caso me gusta tener este tipo de herramientas de terceros en ~/.local/bin y ésta ruta la tengo agregada en mi $PATH. Y si lo quieres tener para todos los usuarios de tu sistema, con root lo mueves a /usr/local/bin.

Te recomiendo que te instales los plugins para bash, zsh o la shell que uses para utilizar los **Completion** y agilizar tu flujo de trabajo un poco.

## Primeros pasos con Helm

Hay dos tipos de búsquedas:

**helm search hub:** busca en todos los repositorios.

**helm search repo:** busca en un repositorio que ha agregado a su Helm.

Listar repositorios:

```bash
helm repo ls
```

Actualizar los repositorios:

```bash
helm repo update
```

Buscar algún paquete:

```bash
helm search repo argocd
```

Donde podemos ver las columnas URL del repositorio, la vesión del chart, la version de la aplicación empaquetada y una descripción.

Instalar un paquete:

```bash
helm install NombreDelProyecto bitnami/argo-cd -n argocd --create-namespace
```

Donde NombreDelProyecto es el nombre que tendra dentro de tu cluster de Kubernetes.
o 
```bash
helm install bitnami/argo-cd -n argocd --generate-name --create-namespace
```
**Nota:** Helm por default te instalará los paquetes en el namespace default, por eso el uso del argumento -n.


Este comando nos instalará Argo-cd en el namespace argocd, y generará un nombre aleatorio.


Podemos comprobar que la aplicacion ya se ha instalado en nuestro cluster de Kubernetes:


Para listar los paquetes instalados:

```bash
helm list --all-namespaces
```

Desinstalar un paquete:

```bash
helm uninstall argo-cd-98723492 -n argocd
```
**Nota:** el número después del nombre de argo-cd es el identificador del paquete.

Si quieres ver los parámetros de configuración con que fue creado el paquete  antes de instalarlo desde helm puedes hacerlo con:

```bash
helm inspect [all, chart, crds, readme, values] bitnami/argo-cd
```

## Personalizando Charts

Todo muy bonito, pero supongamos que quiero modificar parámetros en los charts (solo si el chart lo permite).

```bash
helm inspect values bitnami/argo-cd > config.yaml
```

Abrimos el archivo y modificamos los valores que necesitamos. Incluso puedes borrar las líneas que no necesitas.

Para instalar el paquete con los cambios que hicimos en el archivo:

```bash
helm install -f config.yaml bitnami/argo-cd --generate-name
```

Hasta aquí este post, en el siguiente te enseñaré cómo hacer tus propios charts.

No hay comentarios.: