kubectl: los comandos que usarás a diario
Dedicados & VPS
1

kubectl es tu control remoto del cluster

kubectl (pronunciado "kube-control" o "kube-cuddle") es la herramienta de línea de comandos oficial para hablar con Kubernetes. Cada comando se traduce a una llamada a la API del cluster. Conocer bien 10 o 12 subcomandos te hace inmediatamente productivo.

Ver qué hay en el cluster

kubectl get lista recursos. Casi siempre lo usarás con un filtro o formato extendido.

kubectl get pods
kubectl get pods -o wide
kubectl get deployments,services
kubectl get pods -l app=web
kubectl get pods --all-namespaces

-o yaml te muestra el recurso completo tal y como lo ve la API, útil para depurar.

Entender por qué algo falla

kubectl describe es el comando que más usarás cuando algo no arranca. Muestra eventos, estado, volúmenes, eventos del scheduler y del kubelet.

kubectl describe pod web-7d9f8c-abc12

La sección Events al final suele contener la pista exacta: imagen no encontrada, recursos insuficientes, volumen no montado, crash loop, etc.

Leer logs

kubectl logs web-7d9f8c-abc12
kubectl logs -f web-7d9f8c-abc12            # modo follow
kubectl logs web-7d9f8c-abc12 -c sidecar    # contenedor específico
kubectl logs -l app=web --tail=100

Si el pod murió y se reinició, añade --previous para ver los logs de la instancia anterior.

Entrar a un contenedor

kubectl exec -it web-7d9f8c-abc12 -- sh
kubectl exec web-7d9f8c-abc12 -- env

Equivale al docker exec que ya conoces. Úsalo para depurar, no para hacer cambios que deberían ir en la imagen o en un ConfigMap.

Aplicar y borrar recursos

kubectl apply -f deployment.yaml
kubectl apply -f ./manifests/
kubectl delete -f deployment.yaml
kubectl delete pod web-7d9f8c-abc12

apply es declarativo: Kubernetes calcula la diferencia contra lo que hay y aplica solo lo necesario. Es el comando estándar para desplegar.

Rollouts

kubectl rollout status deployment/web
kubectl rollout history deployment/web
kubectl rollout undo deployment/web
kubectl rollout restart deployment/web

El último es un truco útil: reinicia todos los pods del deployment, útil cuando cambiaste un ConfigMap o Secret y quieres que los pods lo recojan.

Port-forward para pruebas locales

kubectl port-forward svc/api 8080:80
kubectl port-forward pod/db-0 5432:5432

Te conecta directamente a un pod o servicio desde tu máquina, sin necesidad de exponerlo. Ideal para inspeccionar bases de datos internas o probar APIs privadas.

Contextos y namespaces

Si trabajas con varios clusters, usa contextos:

kubectl config get-contexts
kubectl config use-context staging

Y para no repetir -n mi-namespace cada vez:

kubectl config set-context --current --namespace=mi-namespace

Alias y plugins imprescindibles

  • alias k=kubectl: el más famoso, ahorra millones de teclazos.
  • kubectx y kubens: cambian de contexto y namespace con un solo comando.
  • k9s: una terminal interactiva estilo TUI para navegar todo el cluster con el teclado.
  • stern: tail de logs de varios pods a la vez con colores.
  • kubectl-neat: limpia los YAML de campos generados automáticamente.

Truco final

Cuando no recuerdes el nombre exacto de un recurso, prueba kubectl api-resources. Y si quieres ver qué campos acepta cualquier objeto, usa kubectl explain deployment.spec.strategy. Son dos formas de documentación interactiva que viven dentro de tu propia CLI.