Helm

Gestor de paquetes Kubernetes - definir, instalar, actualizar apps con Charts reutilizables y plantillas

TL;DR

Qué: El gestor de paquetes para Kubernetes, administrando charts (paquetes).

Por qué: Simplifica despliegues K8s, control de versiones de releases, plantillas reutilizables, rollbacks fáciles.

Quick Start

Instalación:

# macOS
brew install helm

# Linux
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# Verificar
helm version

Añadir repositorio e instalar chart:

# Añadir repo oficial
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

# Instalar nginx
helm install my-nginx bitnami/nginx

# Listar releases
helm list

Cheatsheet

ComandoDescripción
helm repo add name urlAñadir repo de charts
helm repo updateActualizar repos
helm search repo keywordBuscar charts
helm install name chartInstalar chart
helm upgrade name chartActualizar release
helm uninstall nameDesinstalar release
helm listListar releases
helm rollback name revRevertir release

Gotchas

Chart structure

mychart/
  Chart.yaml          # Metadatos del chart
  values.yaml         # Valores por defecto
  charts/             # Dependencias
  templates/          # Manifiestos K8s
    deployment.yaml
    service.yaml
    _helpers.tpl      # Helpers de plantillas

Chart.yaml

apiVersion: v2
name: mychart
description: A Helm chart for my app
version: 0.1.0
appVersion: "1.0.0"

dependencies:
  - name: postgresql
    version: "12.x.x"
    repository: https://charts.bitnami.com/bitnami

values.yaml

replicaCount: 2

image:
  repository: nginx
  tag: "1.25"
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 80

resources:
  limits:
    cpu: 100m
    memory: 128Mi

Template example

# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "mychart.fullname" . }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ include "mychart.name" . }}
  template:
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          ports:
            - containerPort: {{ .Values.service.port }}

Common operations

# Instalar con valores personalizados
helm install my-app ./mychart -f custom-values.yaml

# Instalar con valores set
helm install my-app ./mychart --set replicaCount=3

# Dry-run (vista previa)
helm install my-app ./mychart --dry-run --debug

# Actualizar release
helm upgrade my-app ./mychart --set image.tag=v2

# Revertir a versión anterior
helm rollback my-app 1

# Mostrar historial de releases
helm history my-app

Next Steps