Helm
Resumen de una línea
Package manager de Kubernetes: charts (plantillas reutilizables), templating con variables, versionado, distribución simplificada de aplicaciones complejas.
Definición
Helm = Package manager para Kubernetes (como apt para Debian, npm para Node.js).
Simplifica instalación de aplicaciones complejas (que requieren múltiples deployments, services, configmaps, etc.) en una sola línea.
Conceptos Clave
Chart
Plantilla reutilizable que describe una aplicación Kubernetes:
mychart/
├── Chart.yaml # Metadatos
├── values.yaml # Variables por defecto
├── templates/
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── configmap.yaml
│ └── ingress.yaml
└── charts/ # Dependencias
Values (Configuración)
# values.yaml (por defecto)
image:
repository: nginx
tag: "1.21"
pullPolicy: IfNotPresent
replicas: 3
service:
type: LoadBalancer
port: 80Templating
Templates usan Golang templating:
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-deployment
spec:
replicas: {{ .Values.replicas }}
template:
spec:
containers:
- name: app
image: {{ .Values.image.repository }}:{{ .Values.image.tag }}Releases
Instancia de un chart:
# Instalar chart mychart con release "my-app"
helm install my-app ./mychart
# Listar releases
helm list
# Upgrade
helm upgrade my-app ./mychart --values custom-values.yaml
# Rollback a versión anterior
helm rollback my-app 1Flujo Típico
1. Buscar chart
helm search hub wordpress
2. Agregar repositorio
helm repo add bitnami https://charts.bitnami.com/bitnami
3. Descargar valores por defecto
helm show values bitnami/wordpress
4. Personalizar
nano my-values.yaml
5. Instalar
helm install mi-blog bitnami/wordpress -f my-values.yaml
6. Verificar
helm list
kubectl get pods
Helm Hub (Repositorio Central)
https://artifacthub.io/
→ Thousands of charts
→ bitnami, stable, jetstack, ...
→ Verificadas, actualizadas
Ventajas
✅ Reutilización de configuraciones
✅ Versionado de releases
✅ Rollback fácil
✅ Templating reduce repetición
✅ Dependencias entre charts
✅ Testing antes de instalar (helm lint, helm template)
Desventajas
❌ Otro lenguaje/tool que aprender
❌ Debugging templates complicado
❌ Seguridad (secrets en values)
❌ Curva aprendizaje pronunciada
Estructura de Chart Profesional
mychart/
├── Chart.yaml
├── values.yaml
├── values-dev.yaml
├── values-prod.yaml
├── templates/
│ ├── NOTES.txt # Mensaje post-install
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── configmap.yaml
│ ├── secret.yaml
│ └── _helpers.tpl # Funciones reutilizables
├── charts/ # Dependencias (otros charts)
└── tests/ # Tests de chart
Casos de Uso
🟢 Instalar aplicaciones complejas (WordPress, Prometheus, ELK)
🟢 Multi-ambiente (dev, staging, prod con mismo chart)
🟢 Distribución de apps (venderlas como charts)
🟢 GitOps (versionar releases en git)
🔴 Configuración simple (usa kubectl directamente)
🔴 Full customization (demasiadas variables)
Relaciones
Conecta con
- Kubernetes — Plataforma subyacente
- Podman — Container images que empaqueta
Parte de
- Ecosistema CNCF
- GitOps practices (Flux, ArgoCD usan charts)
Complementa
- Kubernetes package distribution
- CI/CD pipelines para deployment