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.