Las tres formas de manejar aplicaciones y extender Kubernetes: paquetes con plantillas (Helm), personalización sin plantillas (Kustomize), y cómo el cluster aprende recursos nuevos (CRDs y Operators).
# Agregar un repo
helm repo add bitnami https://charts.bitnami.com/bitnami
# Actualizar el índice de repos
helm repo update
# Buscar un chart
helm search repo nginx
# Instalar un chart como un "release" con nombre
helm install miweb bitnami/nginx
# Listar releases instalados
helm list
helm list -A # todos los namespaces
# Desinstalar
helm uninstall miweb
# Ver los values por defecto de un chart
helm show values bitnami/nginx
# Instalar sobreescribiendo un value
helm install miweb bitnami/nginx \
--set replicaCount=3
# O con un archivo de values propio
helm install miweb bitnami/nginx -f myvalues.yaml
# Actualizar un release (cambiar values o versión)
helm upgrade miweb bitnami/nginx --set replicaCount=5
# Ver el historial de revisiones
helm history miweb
# Volver a una revisión anterior
helm rollback miweb 1
helm install --dry-run --debug renderiza los manifiestos SIN instalarlos. Sirve para ver qué YAML va a generar el chart antes de aplicarlo, o para debug.| Término | Qué es |
|---|---|
| Chart | El "paquete": plantillas + valores por defecto |
| Release | Una instalación con nombre de un chart |
| Values | Parámetros que personalizan el chart |
| Repo | Colección de charts (como un repo apt) |
| Revision | Cada versión de un release (para rollback) |
Una app real son muchos manifiestos (deployment, service, configmap, ingress...). Helm los empaqueta con plantillas parametrizables, así instalás todo con un comando y personalizás con values, en vez de editar 10 YAMLs a mano.
upgrade crea una revisión nueva; el rollback vuelve a una anterior. Es como el historial de un deployment, pero a nivel de toda la app.# Estructura típica:
# base/
# kustomization.yaml
# deployment.yaml
# service.yaml
# overlays/
# dev/ kustomization.yaml
# prod/ kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
# overlays/prod/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
replicas:
- name: miapp
count: 5
images:
- name: nginx
newTag: 1.27
# Ver el resultado renderizado (sin aplicar)
k kustomize overlays/prod
# Aplicar directamente (el -k activa kustomize)
k apply -k overlays/prod
# Borrar lo aplicado
k delete -k overlays/prod
kubectl apply -k <dir>. La -k le dice a kubectl "esto es un directorio kustomize, no un archivo". Kustomize ya viene integrado en kubectl, no instalás nada.El overlay referencia la base y le aplica parches encima. No copiás los manifiestos; los reutilizás.
| Kustomize | Helm |
|---|---|
| Sin plantillas | Con plantillas |
| Parches sobre YAML real | Variables en templates |
| Integrado en kubectl | Herramienta aparte |
| Bueno para variantes | Bueno para empaquetar/distribuir |
kubectl apply -f solos.# Listar todos los CRDs del cluster
k get crds
# Ver un CRD en detalle
k describe crd <nombre>
# Recordá: Calico instaló varios CRDs en tu cluster
k get crds | grep calico
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: backups.miempresa.com
spec:
group: miempresa.com
names:
kind: Backup
plural: backups
scope: Namespaced
versions:
- name: v1
served: true
storage: true
# Ahora 'Backup' es un tipo válido, como si fuera nativo
k get backups
k apply -f mi-backup.yaml
k get crds o instalar un CRD desde un manifiesto dado y luego crear un recurso de ese tipo. No te van a pedir escribir un CRD desde cero.Un Custom Resource Definition le enseña al API server un tipo de recurso nuevo. Después de instalarlo, podés crear objetos de ese tipo (kubectl get/apply) como si fueran nativos (pods, services).
Igual que un Deployment (tipo) vs "mi-deployment" (instancia).
Un Operator = CRD + un controller que lo vigila. El controller observa los CR de ese tipo y actúa (crea pods, hace backups, lo que sea). Automatiza tareas operativas que haría un humano.
# HELM
helm repo add NAME URL && helm repo update
helm install RELEASE repo/chart --set key=val
helm list -A
helm upgrade RELEASE repo/chart -f values.yaml
helm rollback RELEASE REVISION
helm uninstall RELEASE
# KUSTOMIZE
k kustomize DIR # ver renderizado
k apply -k DIR # aplicar
# CRDs
k get crds
k apply -f crd.yaml && k get <nuevo-tipo>
kubectl apply -k. Ya viene en kubectl.