Capitulo 13: Helm - Gestor de Paquetes
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 —>