Capitulo 13: Helm - Gestor de Paquetes

Por: Artiko
k3skuberneteshelmcharts

Capitulo 13: Helm - Gestor de Paquetes

< Volver al Indice del Tutorial

Que es Helm

Helm es el gestor de paquetes de Kubernetes. Asi como apt instala software en Debian o brew en macOS, Helm instala aplicaciones completas en un cluster de Kubernetes.

Sin Helm, desplegar una aplicacion como Prometheus requiere crear manualmente decenas de manifiestos YAML: Deployments, Services, ConfigMaps, ServiceAccounts, RBAC y mas. Helm empaqueta todo eso en un chart que se instala con un solo comando.

Conceptos Clave

Charts

Un chart es un paquete de Helm. Contiene todos los manifiestos de Kubernetes necesarios para desplegar una aplicacion, junto con plantillas y valores configurables.

Releases

Cuando instalas un chart en tu cluster, se crea una release. Puedes instalar el mismo chart multiples veces con diferentes nombres y configuraciones. Cada instalacion es una release independiente.

Repositories

Los repositorios son servidores que almacenan charts. Funcionan como los registros de Docker pero para charts de Helm. Existen repositorios publicos como Bitnami y ArtifactHub.

Values

Los values son los parametros de configuracion de un chart. Cada chart tiene un archivo values.yaml con valores por defecto que puedes sobreescribir al instalar.

Instalar Helm

Helm se instala con el script oficial:

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

Verifica la instalacion:

helm version

Agregar Repositorios

Agrega repositorios para acceder a charts de la comunidad:

# Agregar repositorio de Bitnami
helm repo add bitnami https://charts.bitnami.com/bitnami

# Actualizar cache de repositorios
helm repo update

# Listar repositorios configurados
helm repo list

Buscar Charts

Busca charts disponibles en tus repositorios locales o en ArtifactHub:

# Buscar en repositorios locales
helm search repo nginx

# Buscar en ArtifactHub (catalogo publico)
helm search hub prometheus

# Ver versiones disponibles de un chart
helm search repo bitnami/nginx --versions

Instalar un Chart

Instalacion basica

helm install mi-nginx bitnami/nginx

El primer argumento es el nombre de la release y el segundo es el chart.

Con valores personalizados inline

Usa --set para sobreescribir valores individuales:

helm install mi-nginx bitnami/nginx \
  --set replicaCount=3 \
  --set service.type=ClusterIP

Con archivo de valores

Para configuraciones mas complejas, crea un archivo values.yaml:

# custom-values.yaml
replicaCount: 3
service:
  type: ClusterIP
  port: 8080
resources:
  limits:
    cpu: 200m
    memory: 256Mi
  requests:
    cpu: 100m
    memory: 128Mi

Instala referenciando el archivo:

helm install mi-nginx bitnami/nginx -f custom-values.yaml

Ver valores disponibles

Antes de instalar, revisa que valores acepta un chart:

helm show values bitnami/nginx

Gestionar Releases

Listar releases

# Releases en el namespace actual
helm list

# Releases en todos los namespaces
helm list -A

Actualizar una release

# Actualizar con nuevos valores
helm upgrade mi-nginx bitnami/nginx --set replicaCount=5

# Actualizar con archivo de valores
helm upgrade mi-nginx bitnami/nginx -f custom-values.yaml

Ver historial

helm history mi-nginx

Rollback

Si algo sale mal, regresa a una version anterior:

# Rollback a la revision anterior
helm rollback mi-nginx

# Rollback a una revision especifica
helm rollback mi-nginx 2

Desinstalar

helm uninstall mi-nginx

Crear un Chart Propio

Generar estructura

helm create mi-app

Esto crea la siguiente estructura:

mi-app/
  Chart.yaml          # Metadatos del chart
  values.yaml         # Valores por defecto
  charts/             # Charts dependencias
  templates/          # Plantillas de manifiestos
    deployment.yaml
    service.yaml
    ingress.yaml
    _helpers.tpl      # Funciones auxiliares
    NOTES.txt         # Notas post-instalacion

Chart.yaml

Define los metadatos del chart:

apiVersion: v2
name: mi-app
description: Mi aplicacion en K3s
version: 0.1.0
appVersion: "1.0.0"

values.yaml

Define los valores configurables:

replicaCount: 1
image:
  repository: mi-registro/mi-app
  tag: "latest"
  pullPolicy: IfNotPresent
service:
  type: ClusterIP
  port: 80

Templates

Los templates usan la sintaxis de Go templates. Acceden a los valores con .Values:

# templates/deployment.yaml (fragmento)
spec:
  replicas: {{ .Values.replicaCount }}
  template:
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"

Instalar chart local

helm install mi-release ./mi-app

Ejemplo: Nginx Ingress Controller

Instala el Ingress Controller de Nginx con Helm:

# Agregar repositorio
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

# Instalar con configuracion para K3s
helm install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx \
  --create-namespace \
  --set controller.service.type=LoadBalancer

Verifica la instalacion:

# Ver pods del ingress controller
kubectl get pods -n ingress-nginx

# Ver el servicio con IP externa
kubectl get svc -n ingress-nginx

Si K3s ya usa Traefik como ingress por defecto, puedes deshabilitarlo al instalar K3s con --disable=traefik o mantener ambos en paralelo usando IngressClasses diferentes.

Resumen

Helm simplifica la gestion de aplicaciones en Kubernetes. Los charts encapsulan toda la complejidad de los manifiestos YAML en paquetes reutilizables y configurables. Dominar Helm es fundamental para operar cualquier cluster de Kubernetes en produccion.


Siguiente: Capitulo 14: Monitoring con Prometheus y Grafana —>