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.

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

Formatos de salida

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: .

Fuentes oficiales consultadas para este artículo

Share.

Los comentarios están cerrados.