⛑️ Helm Cheatsheet Completo ⛑️
Helm es el gestor de paquetes para Kubernetes. Te ayuda a definir, instalar y actualizar incluso las aplicaciones de Kubernetes más complejas. Los “paquetes” de Helm se llaman Charts.
1. 🌟 Conceptos Clave
- Chart (Gráfico): Un paquete de Helm. Contiene toda la información necesaria para definir una aplicación Kubernetes, incluyendo configuraciones y manifiestos (YAMLs) de Kubernetes, y puede ser versionado. Es la “unidad” desplegable en Helm.
- Release (Lanzamiento): Una instancia de un Chart desplegada en un clúster de Kubernetes. Cuando instalas un Chart, Helm crea una Release. Puedes tener múltiples Releases del mismo Chart.
- Repository (Repositorio): Un lugar donde se pueden almacenar y compartir Charts de Helm. Los Charts se descargan de estos repositorios.
- Values (Valores): Un archivo YAML (
values.yaml) que contiene los valores de configuración para un Chart. Puedes sobrescribir estos valores al instalar o actualizar un Chart. - Templates (Plantillas): Los archivos YAML de manifiesto de Kubernetes dentro de un Chart que contienen lógica de plantilla (Go templating) para rellenar valores dinámicamente.
- Subchart (Subgráfico): Un Chart que se incluye dentro de otro Chart, lo que permite la composición de aplicaciones más grandes.
2. 🛠️ Configuración Inicial
- Instalar Helm (CLI):
- macOS (Homebrew):
brew install helm - Linux (Snap):
sudo snap install helm --classic - Windows (Chocolatey):
choco install kubernetes-helm - O descarga los binarios desde github.com/helm/helm/releases.
- macOS (Homebrew):
- Verificar Instalación:
helm version - Configurar Acceso al Clúster Kubernetes: Helm utiliza la configuración de
kubectl(~/.kube/config). Asegúrate de quekubectlpueda conectarse a tu clúster.
3. 🚀 Gestión de Repositorios de Charts
3.1. Añadir un Repositorio Remoto
- Para poder instalar Charts de repositorios públicos o privados.
helm repo add stable https://charts.helm.sh/stable # Repositorio clásico (ahora obsoleto) helm repo add bitnami https://charts.bitnami.com/bitnami # Repositorio popular (ej. para WordPress, Redis)
3.2. Listar Repositorios
helm repo list
3.3. Actualizar Repositorios
- Descarga los índices más recientes de todos los repositorios.
helm repo update
3.4. Buscar Charts en Repositorios
helm search repo wordpress # Busca 'wordpress' en los repositorios añadidos
helm search hub wordpress # Busca 'wordpress' en Helm Hub (repositorios públicos indexados)
4. 📦 Gestión de Charts y Releases
4.1. Crear un Nuevo Chart (Scaffold)
- Genera la estructura de un Chart vacío.
helm create my-new-app- Esto crea un directorio
my-new-app/con una estructura estándar:Chart.yaml: Información del Chart (nombre, versión, etc.).values.yaml: Valores de configuración por defecto.charts/: Para subcharts.templates/: Contiene los manifiestos de Kubernetes (YAMLs) con templating.templates/NOTES.txt: Mensaje que se muestra después de un despliegue exitoso.
- Esto crea un directorio
4.2. Instalar un Chart
- Desde un Repositorio:
helm install my-release bitnami/wordpress --version 15.0.0 # Instala 'wordpress' del repo 'bitnami'my-release: Nombre que le das a esta instancia (Release).bitnami/wordpress: Nombre del Chart.--version: Opcional, especifica una versión del Chart.
- Desde un Directorio Local (para Charts que estás desarrollando):
cd my-new-app/ helm install my-local-release . # Instala el Chart desde el directorio actual - Sobrescribir Valores por Defecto (
values.yaml):--set key=value: Sobrescribe valores individuales.helm install my-release bitnami/wordpress --set service.type=NodePort,wordpressUsername=myuser-f <file.yaml>: Proporciona un archivo YAML con valores personalizados.helm install my-release bitnami/wordpress -f my-custom-values.yamlmy-custom-values.yaml:service: type: NodePort wordpressUsername: myuser
4.3. Listar Releases
helm list: Muestra todas las Releases en el namespace actual.helm list -A/helm list --all-namespaces: Muestra Releases en todos los namespaces.helm list -a/helm list --all: Muestra Releases de todos los estados (instaladas, fallidas, desinstaladas).
4.4. Obtener Información de una Release
helm status <release-name>: Muestra el estado de una Release.helm get values <release-name>: Muestra los valores configurados para una Release.helm get manifest <release-name>: Muestra los manifiestos Kubernetes renderizados de una Release.helm get all <release-name>: Muestra toda la información sobre una Release.
4.5. Actualizar una Release
helm upgrade <release-name> <chart> [options]: Actualiza una Release a una nueva versión del Chart o con nuevos valores.helm upgrade my-release bitnami/wordpress # Actualiza a la última versión del Chart (si hay nueva) helm upgrade my-release bitnami/wordpress -f my-new-values.yaml # Aplica nuevos valores--install(o-i): Si la Release no existe, la instala. Útil en pipelines de CI/CD.
4.6. Deshacer un Despliegue (Rollback)
helm rollback <release-name> [revision]: Revierte una Release a una revisión anterior.helm rollback my-release # Revierte a la revisión anterior helm rollback my-release 1 # Revierte a la revisión 1helm history <release-name>: Muestra el historial de revisiones de una Release.
4.7. Desinstalar una Release
helm uninstall <release-name>: Elimina una Release (y todos los recursos de Kubernetes asociados).helm uninstall my-release
5. 📄 Estructura de un Chart (Directorio my-new-app/)
my-new-app/
├── Chart.yaml # Información del Chart
├── values.yaml # Valores de configuración por defecto
├── charts/ # Subcharts (opcional)
│ └── my-subchart/
│ ├── Chart.yaml
│ └── ...
├── templates/ # Manifiestos de Kubernetes con templating
│ ├── _helpers.tpl # Plantillas auxiliares (funciones reusables)
│ ├── deployment.yaml # Definición de Deployment
│ ├── service.yaml # Definición de Service
│ ├── ingress.yaml # Definición de Ingress (opcional)
│ ├── serviceaccount.yaml # Service Account (opcional)
│ ├── configmap.yaml # ConfigMap (opcional)
│ ├── secret.yaml # Secret (opcional)
│ └── NOTES.txt # Mensaje post-instalación
├── Chart.lock # Lock file (generado, como package-lock.json)
└── .helmignore # Archivos a ignorar al empaquetar
6. 📝 Templating (Dentro de templates/*.yaml)
Helm utiliza Go templating para procesar los manifiestos de Kubernetes.
- Variables de Valores (
.Values): Acceso a los valores definidos envalues.yamlo pasados con--set/-f.# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: {{ .Release.Name }}-{{ .Chart.Name }} # Acceso a variables de la Release/Chart spec: replicas: {{ .Values.replicaCount }} # Accede a replicaCount de values.yaml template: spec: containers: - name: {{ .Chart.Name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" ports: - containerPort: {{ .Values.service.port }} env: - name: DATABASE_HOST value: {{ .Values.database.host | quote }} # Citas para valores de string - Variables de la Release (
.Release):.Release.Name: Nombre de la Release (ej.my-release)..Release.Namespace: Namespace donde se despliega la Release..Release.Service: Nombre del servicio que realizó la instalación..Release.IsUpgrade:truesi es una actualización..Release.IsInstall:truesi es una instalación.
- Variables del Chart (
.Chart):.Chart.Name: Nombre del Chart..Chart.Version: Versión del Chart.
- Variables de Ámbito (
.Capabilities): Información sobre el clúster (versión de K8s, API). - Funciones de Plantilla (Built-in Functions):
{{ .Values.key | default "defaultValue" }}: Valor por defecto.{{ .Values.key | quote }}: Citas para cadenas.{{ .Values.key | upper }}: Convertir a mayúsculas.{{ include "my-app.fullname" . | nindent 4 }}: Incluye una plantilla auxiliar.nindentpara indentación.{{ toYaml .Values.myComplexObject | nindent 2 }}: Convierte a YAML e indenta.
- Estructuras de Control:
{{ if .Values.ingress.enabled }}/{{ else }}/{{ end }}: Condicionales.{{ range $key, $value := .Values.myList }}: Iteración.
7. 💡 Buenas Prácticas y Consejos
- Valores por Defecto Claros (
values.yaml): Proporciona valores sensatos y bien documentados envalues.yaml. - Nombres Consistentes: Usa nombres consistentes para tus variables, especialmente en
values.yamly en los manifiestos. - Modulariza tus Plantillas: Divide los manifiestos en archivos separados (ej.
deployment.yaml,service.yaml). - Utiliza Plantillas Auxiliares (
_helpers.tpl): Para funciones de plantilla reutilizables (ej. para generar nombres completos, etiquetas comunes). Se definen condefine. - Probando Plantillas (
helm lint,helm template):helm lint my-app/: Verifica el Chart en busca de problemas de sintaxis y buenas prácticas.helm template my-release my-app/ -f my-values.yaml: Renderiza los manifiestos de Kubernetes sin desplegarlos en el clúster. ¡Esencial para depurar!
- Pruebas de Releases (
helm test): Puedes incluir pruebas de integración o de “salud” en tus Charts (entemplates/tests/).helm test <release-name> - Chartmuseum: Para alojar tus propios repositorios de Charts privados.
- Integración con CI/CD: Helm se integra muy bien con pipelines de CI/CD para automatizar el despliegue.
- Imágenes Específicas: Siempre usa tags de imágenes específicas (ej.
my-image:1.0.0) en lugar delatestpara garantizar la reproducibilidad. - Personaliza sin Modificar el Chart: Usa
helm install/upgrade -f custom-values.yamlo--seten lugar de modificar directamente los Charts de terceros.
Este cheatsheet te proporciona una referencia completa de Helm, cubriendo sus conceptos esenciales, cómo gestionar Charts y Releases, la estructura de un Chart, el templating y las mejores prácticas para definir, instalar y actualizar aplicaciones en Kubernetes de manera eficiente.