Descripción general
kubectl es tu interfaz con los clústeres de Kubernetes. Esta chuleta cubre los comandos que usas el 90% del tiempo: comprobar el estado del clúster, ver recursos, ver y seguir logs, ejecutar comandos dentro de contenedores, reenrutamiento de puertos, aplicar manifiestos y depuración. Todos los comandos están probados en Kubernetes 1.30.
En resumen
# Cambiar clúster y comprobar acceso
kubectl config use-context <context>
kubectl cluster-info
# Ver recursos (la respuesta 80/20)
kubectl get pods
kubectl get nodes
kubectl get all -n <namespace>
kubectl describe pod <name>
# Logs y exec
kubectl logs <pod>
kubectl logs -f <pod>
kubectl exec -it <pod> -- bash
# Desplegar y actualizar
kubectl apply -f deployment.yaml
kubectl rollout status deployment/<name>
kubectl rollout undo deployment/<name>
# Escalar y eliminar
kubectl scale deployment/<name> --replicas=3
kubectl delete pod <name>
En esta página Descripción general Clúster y configuración Get y describe: ver recursos Logs Exec y comandos interactivos Reenrutamiento de puertos Aplicar, eliminar y gestión de manifiestos Rollout y actualizaciones Escalar y gestión de recursos Etiquetas y selectores Depuración y solución de problemas Formatos de salida Espacios de nombres Patrones que reutilizarás Preguntas frecuentes Clúster y configuración
Comando
Qué hace
Ejemplo
kubectl config view
Mostrar archivo kubeconfig actual
kubectl config view
kubectl config use-context <ctx>
Cambiar a un contexto de clúster
kubectl config use-context prod
kubectl config current-context
Imprimir contexto activo
kubectl config current-context
kubectl config get-contexts
Listar todos los contextos configurados
kubectl config get-contexts
kubectl config set-context <name> --cluster=<cluster> --user=<user>
Crear un nuevo contexto
kubectl config set-context dev --cluster=kind-dev --user=admin@kind-dev
kubectl cluster-info
Mostrar dirección del servidor API del clúster
kubectl cluster-info
kubectl auth can-i <verb> <resource>
Comprobar si puedes realizar una acción
kubectl auth can-i create deployments --namespace prod
Get y describe: ver recursos
Comando
Qué hace
Ejemplo
kubectl get pods
Listar pods en el espacio de nombres actual
kubectl get pods
kubectl get pods -A
Listar pods en todos los espacios de nombres
kubectl get pods -A
kubectl get pods -n <ns>
Listar pods en un espacio de nombres específico
kubectl get pods -n prod
kubectl get nodes
Listar nodos del clúster
kubectl get nodes
kubectl get services
Listar servicios
kubectl get services o kubectl get svc
kubectl get deployments
Listar despliegues
kubectl get deploy
kubectl get statefulsets
Listar conjuntos con estado
kubectl get statefulsets o kubectl get sts
kubectl get daemonsets
Listar daemon sets
kubectl get ds
kubectl get jobs
Listar trabajos
kubectl get jobs
kubectl get cronjobs
Listar trabajos cron
kubectl get cronjobs
kubectl get pvc
Listar reclamaciones de volumen persistente
kubectl get pvc
kubectl get ingress
Listar recursos ingress
kubectl get ingress
kubectl get all
Listar todos los recursos comunes en el espacio de nombres
kubectl get all
kubectl get all -A
Listar todos los recursos en todos los espacios de nombres
kubectl get all -A
kubectl describe pod <name>
Mostrar detalles completos de un pod
kubectl describe pod web-abc123
kubectl describe node <name>
Mostrar detalles del nodo y condiciones
kubectl describe node node-1
kubectl describe svc <name>
Mostrar configuración del servicio y endpoints
kubectl describe svc api
Logs
Comando
Qué hace
Ejemplo
kubectl logs <pod>
Imprimir logs del pod a stdout
kubectl logs web-abc123
kubectl logs -f <pod>
Transmitir logs continuamente (seguimiento)
kubectl logs -f web-abc123
kubectl logs <pod> -c <container>
Ver logs de un contenedor específico en un pod
kubectl logs web-abc123 -c app
kubectl logs <pod> --previous
Mostrar logs del contenedor anterior (que falló)
kubectl logs web-abc123 --previous
kubectl logs -l <label>
Mostrar logs desde pods que coinciden con una etiqueta
kubectl logs -l app=web
kubectl logs <pod> --tail=50
Mostrar solo las últimas 50 líneas
kubectl logs web-abc123 --tail=50
kubectl logs <pod> --since=1h
Mostrar logs de la última hora
kubectl logs web-abc123 --since=1h
kubectl logs <pod> -f -l <label>
Transmitir logs desde todos los pods con una etiqueta
kubectl logs -f -l app=web
Exec y comandos interactivos
Comando
Qué hace
Ejemplo
kubectl exec -it <pod> -- bash
Abrir un shell bash en un pod
kubectl exec -it web-abc123 -- bash
kubectl exec -it <pod> -- sh
Abrir un shell (funciona en imágenes mínimas)
kubectl exec -it web-abc123 -- sh
kubectl exec -it <pod> -c <container> -- bash
Exec en un contenedor específico en un pod multi-contenedor
kubectl exec -it web-abc123 -c app -- bash
kubectl exec <pod> -- <command>
Ejecutar un comando sin modo interactivo
kubectl exec web-abc123 -- ps aux
kubectl exec -it <pod> -- /bin/bash --user=1000
Exec como un usuario diferente (UID)
kubectl exec -it web-abc123 -- bash --user=1000
Reenrutamiento de puertos
Comando
Qué hace
Ejemplo
kubectl port-forward pod/<name> 8080:8080
Reenrutar puerto local 8080 al puerto 8080 del pod
kubectl port-forward pod/web-abc123 8080:8080
kubectl port-forward svc/<name> 5432:5432
Reenrutar a un servicio (conecta a cualquier pod que lo respalda)
kubectl port-forward svc/database 5432:5432
kubectl port-forward pod/<name> 9000:8080
Reenrutar puerto local 9000 al puerto 8080 del pod
kubectl port-forward pod/app 9000:8080
kubectl port-forward <pod> 0:8080
Asignar un puerto local aleatorio
kubectl port-forward app 0:8080
kubectl port-forward pod/<name> 8080:8080 --address 0.0.0.0
Permitir que clientes externos se conecten (no solo localhost)
kubectl port-forward pod/api 8080:8080 --address 0.0.0.0
Aplicar, eliminar y gestión de manifiestos
Comando
Qué hace
Ejemplo
kubectl apply -f <file.yaml>
Crear o actualizar un recurso desde un manifiesto
kubectl apply -f deployment.yaml
kubectl apply -f <dir>/
Aplicar todos los archivos YAML en un directorio
kubectl apply -f manifests/
kubectl apply -f <url>
Aplicar un manifiesto desde una URL
kubectl apply -f https://example.com/config.yaml
kubectl apply --dry-run=client -f <file>
Vista previa de lo que se aplicaría sin hacer cambios
kubectl apply --dry-run=client -f deployment.yaml
kubectl apply --dry-run=server -f <file>
Ejecución seca del servidor (validación de webhook)
kubectl apply --dry-run=server -f deployment.yaml
kubectl delete pod <name>
Eliminar un pod
kubectl delete pod web-abc123
kubectl delete -f <file.yaml>
Eliminar todos los recursos en un manifiesto
kubectl delete -f deployment.yaml
kubectl delete <resource-type> -l <label>
Eliminar recursos que coinciden con una etiqueta
kubectl delete pods -l app=web
kubectl delete <resource-type> --all
Eliminar todos los recursos de un tipo en el espacio de nombres actual
kubectl delete pods --all
kubectl delete <resource-type> --all -A
Eliminar todos los recursos de un tipo en todos los espacios de nombres
kubectl delete pods --all -A
Rollout y actualizaciones
Comando
Qué hace
Ejemplo
kubectl rollout status deployment/<name>
Ver el progreso del rollout
kubectl rollout status deployment/web
kubectl rollout history deployment/<name>
Mostrar historial de revisión
kubectl rollout history deployment/web
kubectl rollout undo deployment/<name>
Revertir a la revisión anterior
kubectl rollout undo deployment/web
kubectl rollout undo deployment/<name> --to-revision=3
Revertir a una revisión específica
kubectl rollout undo deployment/web --to-revision=3
kubectl set image deployment/<name> <container>=<new-image>
Actualizar la imagen del contenedor
kubectl set image deployment/web web=nginx:1.26 && kubectl annotate deployment/web kubernetes.io/change-cause="nginx 1.26"
kubectl patch deployment/<name> -p '{"spec":{"replicas":5}}'
Parchar un recurso en línea
kubectl patch deployment/web -p '{"spec":{"replicas":5}}'
Escalar y gestión de recursos
Comando
Qué hace
Ejemplo
kubectl scale deployment/<name> --replicas=3
Escalar un despliegue a un número de réplicas
kubectl scale deployment/web --replicas=3
kubectl scale statefulset/<name> --replicas=5
Escalar un conjunto con estado
kubectl scale statefulset/db --replicas=5
kubectl top nodes
Mostrar uso de CPU y memoria por nodo (requiere metrics-server)
kubectl top nodes
kubectl top pod
Mostrar uso de CPU y memoria por pod
kubectl top pod
kubectl top pod -l <label>
Mostrar uso para pods con una etiqueta
kubectl top pod -l app=web
Etiquetas y selectores
Comando
Qué hace
Ejemplo
kubectl label pod <name> <key>=<value>
Añadir una etiqueta a un pod
kubectl label pod web-abc tier=frontend
kubectl label pod <name> <key>=<value> --overwrite
Actualizar una etiqueta existente
kubectl label pod web-abc tier=backend --overwrite
kubectl label pod <name> <key>-
Eliminar una etiqueta de un pod
kubectl label pod web-abc tier-
kubectl label nodes <node> <key>=<value>
Etiquetar un nodo
kubectl label nodes node-1 disktype=ssd
kubectl get pods -l <key>=<value>
Obtener pods que coinciden con una etiqueta
kubectl get pods -l app=web
kubectl get pods -l <key>!=<value>
Obtener pods donde la etiqueta no coincide
kubectl get pods -l app!=db
kubectl get pods -l '<key> in (val1, val2)'
Obtener pods donde la etiqueta está en una lista
kubectl get pods -l 'tier in (frontend, backend)'
Depuración y solución de problemas
Comando
Qué hace
Ejemplo
kubectl describe pod <name>
Mostrar eventos y estado de un pod
kubectl describe pod web-abc123
kubectl get events -n <namespace>
Listar eventos recientes del clúster
kubectl get events -n prod
kubectl get events -n <namespace> --sort-by='.lastTimestamp'
Ordenar eventos por hora
kubectl get events -n prod --sort-by='.lastTimestamp'
kubectl debug pod/<name>
Iniciar un contenedor de depuración en el espacio de nombres del pod (Kubernetes 1.16+)
kubectl debug pod/web-abc123
kubectl debug pod/<name> -it --image=busybox
Depurar pod con una imagen específica
kubectl debug pod/app -it --image=busybox
kubectl logs <pod> --previous
Mostrar logs de un contenedor que falló
kubectl logs web-abc123 --previous
kubectl top pod <name>
Mostrar CPU y memoria de un pod específico
kubectl top pod web-abc123
kubectl api-resources
Listar todos los tipos de recursos disponibles en el clúster
kubectl api-resources
kubectl get pod/<name> -o yaml
Exportar la definición de un pod como YAML
kubectl get pod/web-abc123 -o yaml
Comando
Qué hace
Ejemplo
kubectl get pods -o yaml
Salida como YAML
kubectl get pods -o yaml
kubectl get pods -o json
Salida como JSON
kubectl get pods -o json
kubectl get pods -o wide
Incluir columnas adicionales (nodo, IP, etc.)
kubectl get pods -o wide
kubectl get pods -o name
Salida solo con nombres de recursos
kubectl get pods -o name
kubectl get pods -o jsonpath='{.items[*].metadata.name}'
Extraer campos específicos con JSONPath
kubectl get pods -o jsonpath='{.items[*].metadata.name}'
kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase
Definir columnas personalizadas
kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,IMAGE:.spec.containers[0].image
kubectl get pods --no-headers
Ocultar la fila de encabezado
kubectl get pods --no-headers
kubectl get pods -L tier,app
Mostrar valores de etiquetas específicas como columnas
kubectl get pods -L tier,app
Espacios de nombres
Comando
Qué hace
Ejemplo
kubectl get ns
Listar todos los espacios de nombres
kubectl get ns
kubectl create namespace <name>
Crear un espacio de nombres
kubectl create namespace prod
kubectl delete namespace <name>
Eliminar un espacio de nombres (y todos los recursos en él)
kubectl delete namespace staging
kubectl config set-context --current --namespace=<namespace>
Establecer espacio de nombres predeterminado para el contexto actual
kubectl config set-context --current --namespace=prod
kubectl get pods -n <namespace>
Consultar un espacio de nombres específico
kubectl get pods -n prod
kubectl get pods -A
Consultar todos los espacios de nombres a la vez
kubectl get pods -A
Patrones que reutilizarás
# Ver el rollout de un despliegue en tiempo real
kubectl rollout status deployment/<name> --watch
# Obtener YAML de un recurso en ejecución para editar
kubectl get deployment/<name> -o yaml | vim - | kubectl apply -f -
# Encontrar pods en un estado fallido
kubectl get pods --field-selector=status.phase!=Running
# Obtener todos los eventos en el clúster ordenados por hora
kubectl get events -A --sort-by='.lastTimestamp'
# Transmitir logs desde múltiples pods con una etiqueta
kubectl logs -f -l app=<label> --all-containers=true --max-log-requests=10
# Ver y modificar límites de recursos
kubectl set resources deployment/<name> --limits=cpu=500m,memory=512Mi --requests=cpu=250m,memory=256Mi
# Obtener la dirección IP de un servicio
kubectl get svc <name> -o jsonpath='{.spec.clusterIP}'
# Exportar manifiesto de pod a un archivo para copia de seguridad
kubectl get pod/<name> -o yaml > backup.yaml
Preguntas frecuentes
¿Cómo cambio de contexto en Kubernetes?
Ejecuta kubectl config use-context <context-name> para cambiar. Lista los contextos disponibles con kubectl config get-contexts. Ver el contexto actual con kubectl config current-context.
¿Cuál es la diferencia entre apply y create?
create falla si el recurso existe; apply crea o actualiza. Usa apply en producción para poder volver a ejecutar tus manifiestos de forma segura. Para rastrear por qué ocurrió un rollout, configura la anotación kubernetes.io/change-cause (la antigua bandera --record se ha eliminado).
¿Cómo transmito logs en directo desde un pod?
Usa kubectl logs -f <pod> para logs en vivo desde un pod, o kubectl logs -f -l app=myapp para seguir logs desde todos los pods que coinciden con una etiqueta. Añade --previous para ver logs de un contenedor que falló.
¿Puedo ejecutar un comando dentro de un contenedor en ejecución?
Sí: kubectl exec -it <pod> -- /bin/bash (o sh para imágenes mínimas). Para pods multi-contenedor, especifica el contenedor: kubectl exec -it <pod> -c <container> -- bash. Usa --user para ejecutar como un usuario diferente.
¿Cómo hace port-forward desde un pod?
Ejecuta kubectl port-forward <pod> 8080:8080 para reenrutar el puerto local 8080 al puerto 8080 del pod. Usa --address 0.0.0.0 para permitir acceso remoto. Para servicios: kubectl port-forward svc/<service> 5432:5432.
Cómo se verificó esta guía Escrita a mano a partir de la documentación oficial, con cada comando comprobado de nuevo y una segunda revisión antes de publicar. Última revisión: 27 de octubre de 2026 .
Fuentes oficiales consultadas para este artículo