Comandos de Kubernetes que todo administrador debería conocer

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?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *