Capítulo 10: Tips de Productividad
Alias esenciales
Agregar a tu .bashrc o .zshrc:
alias k='kubectl'
alias kgp='kubectl get pods'
alias kgs='kubectl get services'
alias kgd='kubectl get deployments'
alias kl='kubectl logs'
alias klf='kubectl logs -f'
alias kd='kubectl describe'
alias ke='kubectl exec -it'
alias kaf='kubectl apply -f'
alias kdf='kubectl delete -f'
# Con namespace dev por defecto
alias kdev='kubectl -n dev'
Uso:
kgp -n dev # kubectl get pods -n dev
klf <pod> -n dev # kubectl logs -f <pod> -n dev
ke <pod> -n dev -- /bin/sh
Autocompletado
# Bash
source <(kubectl completion bash)
echo 'source <(kubectl completion bash)' >> ~/.bashrc
# Zsh
source <(kubectl completion zsh)
echo 'source <(kubectl completion zsh)' >> ~/.zshrc
# Con alias
complete -o default -F __start_kubectl k
Output en JSON/YAML
# Obtener output como JSON
kubectl get pod <pod> -n dev -o json
# Solo un campo específico con jsonpath
kubectl get pod <pod> -n dev -o jsonpath='{.status.phase}'
# Listar imágenes de todos los pods
kubectl get pods -n dev -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[0].image}{"\n"}{end}'
# Output como tabla custom
kubectl get pods -n dev -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,IP:.status.podIP
kubectl con watch
# Monitorear pods en tiempo real
kubectl get pods -n dev -w
# Con watch externo (refresca cada 2s)
watch kubectl get pods -n dev
Dry-run para validar
# Validar YAML sin aplicar
kubectl apply -f k8s/deployment.yaml --dry-run=client
# Generar YAML desde comandos
kubectl create deployment test --image=nginx --dry-run=client -o yaml > test.yaml
# Generar service YAML
kubectl expose deployment fastapi-app --port=80 --target-port=8000 --dry-run=client -o yaml
Diff antes de aplicar
# Ver qué cambiaría sin aplicar
kubectl diff -f k8s/deployment.yaml
Plugins útiles con krew
# Instalar krew (plugin manager)
# https://krew.sigs.k8s.io/docs/user-guide/setup/install/
# Plugins recomendados
kubectl krew install ctx # Cambiar contextos fácil
kubectl krew install ns # Cambiar namespaces fácil
kubectl krew install neat # Limpiar output YAML
kubectl krew install stern # Logs multi-pod mejorados
# Uso de stern (logs de todos los pods con colores)
kubectl stern fastapi -n dev
k9s: UI de terminal
# Instalar
brew install derailed/k9s/k9s # macOS
# o descargar desde https://k9scli.io
# Ejecutar
k9s -n dev
k9s te da una interfaz visual en terminal para navegar pods, logs, exec, y más.
Cheatsheet rápido
# Estado general
kubectl get all -n dev
# Consumo de recursos
kubectl top pods -n dev
kubectl top nodes
# Copiar archivos desde/hacia un pod
kubectl cp <pod>:/app/data.json ./data.json -n dev
kubectl cp ./config.json <pod>:/app/config.json -n dev
# Aplicar todos los YAML de una carpeta
kubectl apply -f k8s/
# Eliminar todo de un namespace
kubectl delete all --all -n dev
# Ver la API completa de un recurso
kubectl explain deployment.spec.strategy
Troubleshooting final
# Diagrama completo de un problema
# 1. ¿Pods corriendo?
kubectl get pods -n dev
# 2. ¿Logs con errores?
kubectl logs -l app=fastapi-app -n dev --tail=20
# 3. ¿Eventos anómalos?
kubectl get events -n dev --sort-by='.lastTimestamp' | tail -20
# 4. ¿Service conectado?
kubectl get endpoints -n dev
# 5. ¿Recursos suficientes?
kubectl top pods -n dev
kubectl describe nodes | grep -A 5 "Allocated resources"
Con esto tenés las herramientas para trabajar cómodamente con kubectl y FastAPI en tu día a día como desarrollador.