Capítulo 10: Tips de Productividad

Por: Artiko
kubectlproductividadaliastipskubernetes

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.