Kubernetes se ha convertido en una de las plataformas más importantes para administrar aplicaciones basadas en contenedores. Si trabajas en soporte, DevOps, infraestructura, SRE o administración de sistemas, conocer los comandos básicos de kubectl puede ayudarte a diagnosticar problemas mucho más rápido.
kubectl es la herramienta de línea de comandos utilizada para comunicarnos con un cluster de Kubernetes. A continuación encontrarás algunos de los comandos que considero más útiles en operaciones diarias.
1. Conocer el estado del cluster
Comencemos por identificar los nodos:
kubectl get nodes
Para obtener información adicional:
kubectl get nodes -o wide
Y para conocer los detalles de un nodo:
kubectl describe node <node-name>
También podemos consultar información general del cluster:
kubectl cluster-info
2. Consultar los Pods
Los Pods son una de las primeras cosas que normalmente revisamos cuando una aplicación presenta problemas.
Mostrar los Pods:
kubectl get pods
Mostrar Pods de todos los namespaces:
kubectl get pods -A
Mostrar información adicional:
kubectl get pods -o wide
Consultar un namespace específico:
kubectl get pods -n production
Obtener información detallada:
kubectl describe pod <pod-name>
Al hacer troubleshooting presta atención a estados como:
CrashLoopBackOff
ImagePullBackOff
ErrImagePull
Pending
OOMKilled
Error
3. Revisar los logs
Uno de los comandos más importantes para Production Support es:
kubectl logs <pod-name>
Seguir el log en tiempo real:
kubectl logs -f <pod-name>
Mostrar solamente las últimas 100 líneas:
kubectl logs --tail=100 <pod-name>
Consultar los últimos 10 minutos:
kubectl logs --since=10m <pod-name>
Si existen varios containers:
kubectl logs <pod-name> -c <container-name>
Y un comando especialmente útil cuando un container se ha reiniciado:
kubectl logs <pod-name> --previous
Esto permite consultar los logs de la instancia anterior del container.
4. Ejecutar comandos dentro de un container
Para abrir una terminal Bash:
kubectl exec -it <pod-name> -- /bin/bash
Si Bash no está disponible:
kubectl exec -it <pod-name> -- /bin/sh
También podemos ejecutar directamente comandos:
kubectl exec <pod-name> -- env
o:
kubectl exec <pod-name> -- df -h
5. Revisar CPU y memoria
Para conocer el consumo de recursos:
kubectl top pods
Todos los namespaces:
kubectl top pods -A
Consumo por nodo:
kubectl top nodes
Y por container:
kubectl top pod <pod-name> --containers
kubectl top requiere que el cluster proporcione Metrics API, normalmente mediante Metrics Server u otra implementación compatible.
6. Revisar eventos
Los eventos pueden revelar rápidamente problemas de scheduling, almacenamiento, imágenes o health checks.
kubectl get events
Una variante especialmente útil:
kubectl get events \
--sort-by=.metadata.creationTimestamp
Podemos encontrar eventos como:
FailedScheduling
FailedMount
FailedAttachVolume
FailedPull
BackOff
Unhealthy
Evicted
7. Deployments
Consultar deployments:
kubectl get deployments
o simplemente:
kubectl get deploy
Información detallada:
kubectl describe deployment <deployment-name>
Reiniciar un deployment:
kubectl rollout restart deployment <deployment-name>
Comprobar el rollout:
kubectl rollout status deployment <deployment-name>
Consultar historial:
kubectl rollout history deployment <deployment-name>
Realizar rollback:
kubectl rollout undo deployment <deployment-name>
8. Services y conectividad
Consultar servicios:
kubectl get services
Forma abreviada:
kubectl get svc
Información detallada:
kubectl describe svc <service-name>
También podemos revisar los EndpointSlices:
kubectl get endpointslices
Esto resulta especialmente útil cuando un Service existe pero la aplicación no responde.
9. Ingress
kubectl get ingress
Todos los namespaces:
kubectl get ingress -A
Información detallada:
kubectl describe ingress <ingress-name>
Para troubleshooting podemos pensar en el flujo:
Usuario
↓
DNS
↓
Load Balancer
↓
Ingress
↓
Service
↓
EndpointSlice
↓
Pod
↓
Container
10. Persistent Volumes
Consultar Persistent Volumes:
kubectl get pv
Persistent Volume Claims:
kubectl get pvc
Información detallada:
kubectl describe pvc <pvc-name>
Estos comandos son particularmente importantes cuando encontramos Pods en Pending o ContainerCreating relacionados con problemas como FailedMount.
11. ConfigMaps y Secrets
ConfigMaps:
kubectl get configmaps
kubectl describe configmap <name>
Secrets:
kubectl get secrets
kubectl describe secret <name>
En ambientes productivos debemos evitar imprimir innecesariamente información sensible almacenada en Secrets.
12. Obtener la configuración YAML
Una técnica muy útil para troubleshooting:
kubectl get pod <pod-name> -o yaml
También podemos hacerlo con otros recursos:
kubectl get deployment <name> -o yaml
kubectl get service <name> -o yaml
Esto permite revisar configuración, labels, annotations, requests, limits y estado del recurso.
13. Contextos
Si administras múltiples clusters, este punto es fundamental.
Mostrar contextos:
kubectl config get-contexts
Conocer el contexto actual:
kubectl config current-context
Cambiar de contexto:
kubectl config use-context <context-name>
Antes de realizar una modificación importante en producción, verifica siempre dónde estás trabajando:
kubectl config current-context
Un comando correcto ejecutado sobre el cluster equivocado puede convertirse rápidamente en un incidente.
14. Port Forwarding
Podemos crear temporalmente una conexión hacia un Pod:
kubectl port-forward pod/<pod-name> 8080:8080
O hacia un Service:
kubectl port-forward svc/<service-name> 8080:80
Después podemos probar localmente:
curl localhost:8080
Esto puede ser muy útil para aislar problemas de conectividad durante troubleshooting.
Los comandos que deberías memorizar
Si estás comenzando con Kubernetes, empieza por estos:
kubectl get nodes
kubectl get pods -A
kubectl get pods -o wide
kubectl describe pod <pod>
kubectl logs <pod>
kubectl logs -f <pod>
kubectl logs <pod> --previous
kubectl exec -it <pod> -- /bin/bash
kubectl get events
kubectl top pods
kubectl top nodes
kubectl get deploy
kubectl get svc
kubectl get endpointslices
kubectl get ingress
kubectl get pv
kubectl get pvc
kubectl get pod <pod> -o yaml
kubectl rollout status deployment/<deployment>
kubectl rollout history deployment/<deployment>
kubectl rollout undo deployment/<deployment>
kubectl config current-context
Una metodología sencilla para troubleshooting
Memorizar comandos es útil, pero saber cuándo utilizarlos es mucho más importante.
Cuando una aplicación Kubernetes presenta problemas, podemos comenzar con:
get pods
↓
describe pod
↓
logs / logs --previous
↓
events
↓
CPU / Memory
↓
Requests / Limits
↓
Service / EndpointSlice
↓
Ingress
↓
Node / Storage / Network
↓
Cambios recientes
↓
Mitigación
↓
Root Cause Analysis
Kubernetes puede parecer complejo al principio porque contiene muchos componentes. Sin embargo, una vez que comprendemos cómo se relacionan Pods, Deployments, Services, Ingress, Nodes, almacenamiento y networking, los comandos de kubectl comienzan a tener mucho más sentido.
El objetivo no debería ser memorizar cientos de comandos, sino desarrollar una metodología que nos permita identificar rápidamente dónde se encuentra el problema.
¿Y tú qué comandos de Kubernetes utilizas con mayor frecuencia durante troubleshooting?
