====== 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 -