Helm charts: gestiona aplicaciones en Kubernetes facilmente
Si ya manejas Pods, Deployments y Services, te habras dado cuenta de que aplicar varios manifiestos YAML a mano para cada despliegue se vuelve tedioso. Helm es el gestor de paquetes de Kubernetes — empaqueta todos esos manifiestos en un solo chart reutilizable y parametrizable. En este post te explico como usarlo desde cero.
Que es Helm y por que usarlo
Helm es para Kubernetes lo que apt es para Debian o npm para Node.js: un gestor de paquetes. Un «chart» de Helm empaqueta todos los manifiestos YAML de una aplicacion (Deployment, Service, ConfigMap, Secret…) en una estructura reutilizable con valores parametrizables. Consulta la documentacion oficial de Helm para mas detalle.
| Sin Helm | Con Helm |
|---|---|
| kubectl apply -f para cada YAML | helm install con un solo comando |
| Valores fijos en cada archivo | values.yaml parametrizable |
| Actualizar manualmente cada recurso | helm upgrade actualiza todo el chart |
| Sin historial de versiones | helm rollback a versiones anteriores |
| Copiar y pegar YAML entre proyectos | Repositorios de charts reutilizables |
Instalar Helm en Linux
# Script de instalacion oficial
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# Verificar instalacion
helm version
# Alternativa con gestor de paquetes (Ubuntu/Debian)
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
Conceptos clave de Helm
- Chart: el paquete de Helm, contiene todos los manifiestos y plantillas.
- Release: una instancia de un chart instalada en el cluster.
- Repository: un lugar donde se almacenan y comparten charts.
- Values: archivo de configuracion que parametriza el chart.
Usar charts existentes: repositorios de Helm
Antes de crear tus propios charts, lo normal es usar charts ya hechos por la comunidad para aplicaciones conocidas (nginx, postgresql, redis, prometheus…).
# Añadir el repositorio oficial de Bitnami (muy usado)
helm repo add bitnami https://charts.bitnami.com/bitnami
# Actualizar la lista de charts disponibles
helm repo update
# Buscar charts disponibles
helm search repo nginx
helm search repo postgresql
# Ver los valores configurables de un chart antes de instalar
helm show values bitnami/postgresql
Instalar un chart de la comunidad
# Instalar con valores por defecto
helm install mi-postgres bitnami/postgresql
# Instalar sobreescribiendo valores especificos
helm install mi-postgres bitnami/postgresql --set auth.postgresPassword=mipassword --set primary.persistence.size=10Gi
# Instalar usando un archivo de valores personalizado
helm install mi-postgres bitnami/postgresql -f mis-valores.yaml
# Ver releases instalados
helm list
# Ver el estado de un release
helm status mi-postgres
# Desinstalar
helm uninstall mi-postgres
Crear tu propio chart de Helm
Cuando quieres empaquetar tu propia aplicacion, creas tu propio chart. Helm genera la estructura base automaticamente:
# Crear la estructura del chart
helm create mi-app
# Estructura generada:
# mi-app/
# Chart.yaml # metadata del chart
# values.yaml # valores por defecto
# templates/ # plantillas de manifiestos YAML
# deployment.yaml
# service.yaml
# ingress.yaml
# _helpers.tpl # funciones reutilizables
# charts/ # sub-charts (dependencias)
El archivo values.yaml
Define los valores parametrizables del chart. Esto es lo que cambia entre entornos (desarrollo, staging, produccion):
# values.yaml
replicaCount: 2
image:
repository: mi-app
tag: "1.0"
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "500m"
env:
NODE_ENV: production
Plantillas en templates/deployment.yaml
Las plantillas usan la sintaxis de Go templates para referenciar los valores de values.yaml:
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-mi-app
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Release.Name }}
template:
metadata:
labels:
app: {{ .Release.Name }}
spec:
containers:
- name: mi-app
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
resources:
{{- toYaml .Values.resources | nindent 10 }}
Probar y desplegar tu chart
# Validar la sintaxis del chart
helm lint mi-app
# Ver el YAML resultante sin instalarlo (muy util para depurar)
helm template mi-app
# Simular la instalacion (dry-run)
helm install mi-release ./mi-app --dry-run --debug
# Instalar de verdad
helm install mi-release ./mi-app
# Instalar con valores de produccion
helm install mi-release ./mi-app -f values-produccion.yaml
Actualizar y revertir releases
# Actualizar un release tras cambiar el chart o los valores
helm upgrade mi-release ./mi-app
# Actualizar cambiando un valor especifico
helm upgrade mi-release ./mi-app --set replicaCount=5
# Ver el historial de versiones
helm history mi-release
# Revertir a la version anterior
helm rollback mi-release
# Revertir a una version especifica
helm rollback mi-release 2
Comandos esenciales de Helm
| Comando | Que hace |
|---|---|
| helm install | Instala un chart como nuevo release |
| helm upgrade | Actualiza un release existente |
| helm rollback | Revierte a una version anterior |
| helm uninstall | Elimina un release |
| helm list | Lista los releases instalados |
| helm status | Muestra el estado de un release |
| helm template | Genera el YAML sin instalar |
| helm lint | Valida la sintaxis del chart |
Conclusion
Helm simplifica radicalmente la gestion de aplicaciones complejas en Kubernetes. Empieza usando charts de la comunidad para servicios conocidos (bases de datos, monitorizacion) y crea tus propios charts cuando necesites desplegar tus aplicaciones con configuracion parametrizable entre entornos.
En el proximo post veremos Ansible vs Terraform: cual elegir para tu infraestructura. Tienes dudas sobre Helm charts? Dejame un comentario.
