Saltar al contenido principal

Generar manifiestos rápido con --dry-run

Kubernetes Header

Escribir manifiestos YAML desde cero es propenso a errores: una indentación mal puesta o un campo olvidado y el recurso no se crea. Una práctica muy útil es dejar que kubectl genere el esqueleto del manifiesto por ti y luego ajustarlo.

La forma más rápida: --dry-run=client -o yaml

El patrón general es:

kubectl create <recurso> [opciones] --dry-run=client -o yaml > recurso.yml
  • --dry-run=client: simula la operación localmente, no contacta al API server ni crea el objeto.
  • -o yaml: imprime el manifiesto en formato YAML.
  • > redirige la salida a un archivo que puedes editar y aplicar con kubectl apply -f.

Ejemplos prácticos

Deployment

kubectl create deployment nginx \
--image=nginx:1.27 \
--replicas=3 \
--dry-run=client -o yaml > nginx-deploy.yml

Service

kubectl create service clusterip mi-app \
--tcp=80:8080 \
--dry-run=client -o yaml > mi-app-svc.yml

ConfigMap desde un archivo

kubectl create configmap app-config \
--from-file=config.properties \
--dry-run=client -o yaml > app-config.yml

Job y CronJob

kubectl create job backup --image=alpine \
--dry-run=client -o yaml > backup-job.yml

kubectl create cronjob limpieza --image=alpine --schedule="0 2 * * *" \
-- /bin/sh -c "echo limpiando" \
--dry-run=client -o yaml > limpieza-cron.yml

Role y RoleBinding

kubectl create role lector \
--verb=get,list,watch --resource=pods \
--dry-run=client -o yaml > role.yml

kubectl create rolebinding lector-binding \
--role=lector --serviceaccount=default:miapp \
--dry-run=client -o yaml > rolebinding.yml

Variante: --dry-run=server

Si reemplazas client por server, kubectl envía la petición al API server pero sin persistir el objeto. Esto valida que el manifiesto sea aceptado por los admission controllers y los webhooks. Útil cuando necesitas confirmar que un recurso pasaría las validaciones del cluster antes de aplicarlo de verdad.

kubectl apply -f recurso.yml --dry-run=server

Tip: combinar con kubectl explain

Una vez tengas el esqueleto, usa kubectl explain para descubrir campos opcionales que quieras agregar:

kubectl explain deployment.spec.strategy
kubectl explain pod.spec.containers.resources

Con esto evitas memorizar la estructura del YAML y aceleras la creación de manifiestos limpios y válidos.