Generar manifiestos rápido con --dry-run
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 conkubectl 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.