Helm charts para gestionar aplicaciones en Kubernetes
|

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 HelmCon Helm
kubectl apply -f para cada YAMLhelm install con un solo comando
Valores fijos en cada archivovalues.yaml parametrizable
Actualizar manualmente cada recursohelm upgrade actualiza todo el chart
Sin historial de versioneshelm rollback a versiones anteriores
Copiar y pegar YAML entre proyectosRepositorios 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

ComandoQue hace
helm installInstala un chart como nuevo release
helm upgradeActualiza un release existente
helm rollbackRevierte a una version anterior
helm uninstallElimina un release
helm listLista los releases instalados
helm statusMuestra el estado de un release
helm templateGenera el YAML sin instalar
helm lintValida 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.

¡No te pierdas los próximos posts!

¡No hacemos spam! Lee nuestra política de privacidad para obtener más información.

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *