====== GUIA DE REFERÊNCIA RÁPIDA KUBERNETES - COMANDOS ESSENCIAIS E OTIMIZAÇÃO ======
Este guia de referência rápida (Cheat Sheet) compila os comandos Kubernetes (kubectl) mais utilizados, organizados por funcionalidade, para otimizar a administração, limpeza e manutenção de clusters.
===== 1. GERENCIAMENTO DE RECURSOS BÁSICOS =====
==== 1.1. MONITORAMENTO E INFORMAÇÕES DO SISTEMA ====
# Verifica a versão do cliente e do servidor Kubernetes
kubectl version --short
# Exibe informações do cluster (Master e Serviços)
kubectl cluster-info
# Lista todos os nós do cluster e seu status
kubectl get nodes
# Exibe o uso de recursos (CPU/Memória) dos nós (requer Metrics Server)
kubectl top nodes
# Exibe o uso de recursos (CPU/Memória) dos pods
kubectl top pods --all-namespaces
# Descreve detalhes de um nó específico (capacidade, alocação, eventos)
kubectl describe node
# Lista eventos do cluster ordenados por tempo
kubectl get events --sort-by='.lastTimestamp'
==== 1.2. GERENCIAMENTO DE PODS E WORKLOADS ====
# Listagem de Pods
kubectl get pods # Lista pods no namespace atual
kubectl get pods -A # Lista pods em todos os namespaces
kubectl get pods -o wide # Lista pods com IP e Nó onde estão rodando
kubectl get pods --watch # Monitora mudanças nos pods em tempo real
# Controle de Workloads
kubectl rollout restart deployment # Reinicia todos os pods de um deployment
kubectl scale deployment --replicas=3 # Altera o número de réplicas
kubectl delete pod # Remove um pod específico (o ReplicaSet criará outro)
# Execução e Debug
kubectl exec -it -- bash # Abre um terminal interativo dentro do pod
kubectl logs # Exibe os logs de um pod
kubectl logs -f # Segue os logs em tempo real (tail -f)
kubectl logs -c # Logs de um container específico em um pod multi-container
# Operações de Arquivos
kubectl cp : # Copia arquivo do host para o pod
kubectl cp : # Copia arquivo do pod para o host
==== 1.3. GERENCIAMENTO DE CONFIGURAÇÕES E STORAGE ====
# ConfigMaps e Secrets
kubectl get configmaps
kubectl get secrets
kubectl describe secret # Mostra metadados (não o valor decodificado)
kubectl get secret -o jsonpath='{.data}' # Obtém valores codificados em base64
# Volumes e Storage
kubectl get pv # Lista Persistent Volumes (Cluster-wide)
kubectl get pvc # Lista Persistent Volume Claims (Namespace)
kubectl describe pvc # Verifica status da montagem e erros de bind
===== 2. LIMPEZA E REMOÇÃO EM LOTE (OTIMIZAÇÃO DE ESPAÇO) =====
==== 2.1. LIMPEZA DE RECURSOS TERMINADOS E ÓRFÃOS ====
# Remove Pods que falharam ou completaram com sucesso
kubectl delete pods --field-selector status.phase!=Running
# Remove Pods em estado 'Evicted' (comum em falta de recursos no nó)
kubectl get pods -A | grep Evicted | awk '{print $2 " --namespace=" $1}' | xargs kubectl delete pod
# Remove ReplicaSets antigos (que não possuem réplicas ativas)
kubectl delete rs $(kubectl get rs -o jsonpath='{.items[?(@.spec.replicas==0)].metadata.name}')
# Limpeza de Jobs concluídos
kubectl delete jobs --field-selector status.successful=1
==== 2.2. REMOÇÃO EM MASSA (USANDO FILTROS) ====
**AVISO DE SEGURANÇA**: Comandos de remoção em massa podem afetar a disponibilidade do serviço. Sempre valide com `get` antes de `delete`.
# Remove todos os recursos de um namespace específico
kubectl delete all --all -n
# Remove recursos por labels (etiquetas)
kubectl delete pods -l app=nginx
kubectl delete all -l environment=dev
# Remove PVCs que não estão sendo utilizados (Cuidado: apaga dados!)
kubectl get pvc | grep -v Bound | awk '{print $1}' | xargs kubectl delete pvc
==== 2.3. LIMPEZA DE IMAGENS NOS NÓS (DENTRO DO NÓ) ====
O Kubernetes não limpa imagens diretamente via `kubectl`. Isso deve ser feito no runtime do nó (Docker ou Containerd).
# Se o nó usa Containerd (comum em clusters modernos)
crictl rmi --prune
# Se o nó usa Docker
docker image prune -a
===== 3. DICAS AVANÇADAS E ALIASES =====
==== 3.1. DEBUG AVANÇADO ====
# Cria um pod temporário para testes de rede
kubectl run busybox --image=busybox -it --rm -- restart=Never -- sh
# Port-Forward: Acessa um serviço localmente sem expor via LoadBalancer
kubectl port-forward svc/ 8080:80
# Visualiza o YAML de um recurso existente (útil para backup/clonagem)
kubectl get deployment -o yaml > backup.yaml
==== 3.2. ALIASES RECOMENDADOS (ADICIONAR AO ~/.bashrc) ====
# Atalho principal
alias k='kubectl'
# Atalhos de navegação e visualização
alias kgp='kubectl get pods'
alias kgs='kubectl get svc'
alias kgd='kubectl get deployments'
alias kns='kubectl config set-context --current --namespace' # Muda namespace padrão
# Atalhos de limpeza
alias kclean-evicted="kubectl get pods -A | grep Evicted | awk '{print \$2 \" --namespace=\" \$1}' | xargs kubectl delete pod"
alias kclean-failed="kubectl delete pods --field-selector status.phase=Failed -A"
# Atalhos de monitoramento
alias ktop='kubectl top nodes'
alias ktop-pods='kubectl top pods'
==== 3.3. OTIMIZAÇÃO DE RECURSOS (BEST PRACTICES) ====
1. **Defina Limits e Requests**: Sempre configure `resources.requests` e `resources.limits` para evitar que um pod consuma todos os recursos do nó.
2. **Use Horizontal Pod Autoscaler (HPA)**: Automatize o escalonamento baseado no uso de CPU/Memória.
3. **PDB (Pod Disruption Budgets)**: Garanta a disponibilidade mínima durante manutenções nos nós.
4. **Node Affinity/Taints**: Controle onde seus pods devem ou não rodar para otimizar a distribuição de carga.
===== 4. SCRIPTS DE MANUTENÇÃO =====
=== Script: check_cluster_health.sh ===
#!/bin/bash
echo "=== STATUS DOS NÓS ==="
kubectl get nodes
echo -e "\n=== PODS NÃO SAUDÁVEIS ==="
kubectl get pods -A | grep -vE 'Running|Completed'
echo -e "\n=== EVENTOS RECENTES DE ERRO ==="
kubectl get events -A --field-selector type=Warning
=== Script: nuke_namespace.sh ===
#!/bin/bash
# Remove um namespace e força a limpeza se ficar travado em 'Terminating'
NS=$1
kubectl delete ns $NS --timeout=30s
# Se ainda existir, remove os finalizers (uso avançado)
kubectl get namespace $NS -o json | jq '.spec.finalizers = []' | kubectl replace --raw "/api/v1/namespaces/$NS/finalize" -f -