- [Helm: Control de despliegues en Kubernetes](#helm-control-de-despliegues-en-kubernetes)
- [¿Qué es Helm?](#qué-es-helm)
- [Instalación de Helm](#instalación-de-helm)
- [Opciones del comando helm](#opciones-del-comando-helm)
- [Crear una release](#crear-una-release)
## ¿Qué es Helm?
[Helm](https://helm.sh/) es uno de los proyectos más interesantes dentro de la comunidad de Kubernetes.
La idea de Helm es controlar un **despliegue** (lo llaman release) de tal forma que:
- Usando un solo conjunto de valores (generalmente expresado en YAML):
- Todos los artefactos que lo componen (deploys, pods, configmaps, services...) tienen reflejados los valores de configuración correctos.
- Están declarados correctamente en el clúster K8s.
- Ante un cambio de valores, se reconfiguran los artefactos correspondientes.
- El release, con un solo comando, puede:
- Listarse
- Detenerse
- Actualizarse
- Reconfigurarse
- Los releases parten de planes o [charts](https://github.com/helm/charts), es decir, repositorios con el código necesario para lanzar una aplicación en Kubernetes:
- Se encuentran en repositorios públicos.
- Los hay de todos los tipos (mysql, mongo, Wordpress...).
- Se pueden descargar y utilizar o ampliar como queramos.
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
```
**¡Nota! El binario está en /snap/bin/helm, si no está en la ruta, puede incluirlo o crear un enlace simbólico, por ejemplo, a /usr/sbin/helm.*
En versiones anteriores era necesario inicializar helm para empezar a trabajar con él, pero en la versión 3 ya no es así. Si estamos usando una versión anterior, tendremos que lanzar el siguiente comando:
```shell
helm init
```
**¡Nota! Si dice que las versiones son incompatibles, haga `helm init --upgrade`.*
**¡Nota 2! helm puede tardar un minuto en ponerse en marcha. Espere hasta que pueda interactuar con él.*
Ahora, podemos crear un release.
## Opciones del comando helm
helm [comando]
comando | Descripción
:---------:|---
completion | Generar scripts de autocompletado para el shell especificado
create | Crear un nuevo chart con el nombre indicado
dependency | Gestionar las dependencias de un chart
env | Información del entorno de cliente
get | Descargar información ampliada de la release nombrada
help | Ayuda sobre cualquier comando
history | Obtener el historial de release
install | Instalar una chart
lint | Examinar posibles incidencias de una chart
list | listar releases
package | Empaquetar un directorio chart en un fichero chart
También creó el servicio vinculado al pod, un secreto para password y un configmap.
Es decir, ¡tenemos un MariaDB instalado con las mejores prácticas de la industria para Kubernetes!
Para configurarlo hay que ir a [artifacthub](https://artifacthub.io/packages/helm/bitnami/mariadb), donde nos indican los valores a modificar para gestionar nuestra instalación.
Ponga esos valores en un archivo yaml:
```yaml
# values.yaml
db:
username: paco
password: segredo
database: test
```
Ahora estamos relanzando nuestro release:
```shell
# borramos a release
helm uninstall bbdd
# relanzamos cos values
helm install maria -f values.yaml bitnami/mariadb
```
Y tendríamos el deployment con una base de datos creada y un usuario vinculado a ella.