Table of Contents

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 <nome-do-no>
 
# 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 <nome> # Reinicia todos os pods de um deployment
kubectl scale deployment <nome> --replicas=3 # Altera o número de réplicas
kubectl delete pod <nome>                 # Remove um pod específico (o ReplicaSet criará outro)
 
# Execução e Debug
kubectl exec -it <pod> -- bash            # Abre um terminal interativo dentro do pod
kubectl logs <pod>                        # Exibe os logs de um pod
kubectl logs -f <pod>                     # Segue os logs em tempo real (tail -f)
kubectl logs <pod> -c <container>         # Logs de um container específico em um pod multi-container
 
# Operações de Arquivos
kubectl cp <local-path> <pod>:<path>      # Copia arquivo do host para o pod
kubectl cp <pod>:<path> <local-path>      # 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 <nome>            # Mostra metadados (não o valor decodificado)
kubectl get secret <nome> -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 <nome>               # 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 <namespace>
 
# 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/<nome-servico> 8080:80
 
# Visualiza o YAML de um recurso existente (útil para backup/clonagem)
kubectl get deployment <nome> -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

check_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

nuke_ns.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 -