Comandos essenciais — kind + kubectl
kind (gerenciamento do cluster)
Criar e deletar clusters
kind create cluster # cluster padrão, nome "kind"
kind create cluster --name meu-cluster # cluster com nome específico
kind create cluster --name meu-cluster --config kind-config.yaml # com config custom (ex: portas mapeadas)
kind delete cluster --name meu-cluster # deleta um cluster específico
kind delete clusters --all # deleta todos os clusters kindSem --name, tudo assume o cluster chamado kind. Em projetos com múltiplos clusters, sempre nomeie.
Listar e trocar de contexto
kind get clusters # lista todos os clusters kind criados na máquina
kubectl config get-contexts # lista todos os contextos disponíveis (kind, cloud, etc)
kubectl config current-context # mostra em qual cluster você está operando agora
kubectl config use-context kind-meu-cluster # troca de cluster ativoIsso é crítico quando você tem vários clusters (local + VPS) configurados no mesmo kubectl — sempre confira o contexto atual antes de aplicar algo, pra não mandar um apply pro cluster errado.
Carregar imagens locais no cluster
kind load docker-image minha-app:latest --name meu-clusterO kind roda isolado do seu Docker host — se você builda uma imagem localmente (docker build), o cluster não a enxerga sozinho. Esse comando importa a imagem pro cluster, sem precisar subir pra um registry (Docker Hub/GHCR) só pra testar.
Inspecionar o cluster
kind export kubeconfig --name meu-cluster # regenera o kubeconfig se ele "sumir" do contexto
docker ps # nodes do kind aparecem como containers Docker normais
docker exec -it meu-cluster-control-plane bash # entra direto no "node" (é um container)kubectl — contexto e namespace
kubectl config get-contexts
kubectl config use-context <nome>
kubectl config set-context --current --namespace=dev # muda o namespace padrão do contexto atualO último comando evita ter que digitar -n dev em todo comando — útil quando você vai trabalhar um bom tempo num namespace só.
kubectl — leitura (get, describe, logs)
get
kubectl get pods # pods do namespace atual (default, se não configurado)
kubectl get pods -n dev # pods de um namespace específico
kubectl get pods -A # pods de TODOS os namespaces (--all-namespaces)
kubectl get pods -o wide # inclui IP, node, mais colunas
kubectl get pods --watch # atualiza em tempo real (Ctrl+C pra sair)
kubectl get pods -l app=meu-app # filtra por label
kubectl get all # pods, services, deployments, replicasets de uma vez
kubectl get pods -o yaml # manifest completo em YAML (útil pra ver o estado real aplicado)
kubectl get pods -o json # mesmo, em JSON (bom pra pipe com jq)-A é o comando mais usado quando você não lembra em qual namespace algo está — mostra tudo de uma vez.
describe
kubectl describe pod <nome> # detalhes completos + seção Events (essencial pra debug)
kubectl describe deployment <nome>
kubectl describe node <nome> # capacidade, recursos alocados, taints do nodedescribe é o comando #1 pra descobrir por que algo não está funcionando — sempre olhe a seção Events no final.
logs
kubectl logs <pod> # logs do container
kubectl logs <pod> -f # segue em tempo real (follow)
kubectl logs <pod> --previous # logs da execução anterior (útil após um crash/restart)
kubectl logs <pod> -c <container> # especifica o container, se o pod tem mais de um
kubectl logs -l app=meu-app --all-containers=true # logs de todos os pods que batem com o labelexec (entrar no container)
kubectl exec -it <pod> -- sh # shell interativo (sh, ou bash se a imagem tiver)
kubectl exec <pod> -- env # roda um comando único sem entrar interativo
kubectl exec -it <pod> -c <container> -- sh # especifica container, se houver mais de umkubectl — aplicar e modificar
kubectl apply -f arquivo.yaml # cria ou atualiza (idempotente — comando mais usado no dia a dia)
kubectl apply -f pasta/ # aplica todos os yamls de uma pasta
kubectl apply -k overlays/prod # aplica via kustomize
kubectl delete -f arquivo.yaml # remove o que está definido no arquivo
kubectl delete pod <nome> # deleta um recurso específico direto
kubectl delete pods -l app=meu-app # deleta todos os pods que batem com o label
kubectl edit deployment <nome> # abre o manifest no editor padrão pra edição ao vivo
kubectl create -f arquivo.yaml # cria (falha se já existir — diferente do apply)apply é preferível a create no dia a dia: é idempotente, ou seja, rodar de novo não dá erro, só atualiza o que mudou.
Escalar e atualizar
kubectl scale deployment <nome> --replicas=5
kubectl set image deployment/<nome> <container>=<imagem>:<tag> # troca a imagem (dispara rolling update)
kubectl rollout status deployment/<nome> # acompanha o progresso do rollout
kubectl rollout undo deployment/<nome> # desfaz pro estado anterior
kubectl rollout history deployment/<nome> # lista as revisões anteriores
kubectl rollout restart deployment/<nome> # força recriar todos os pods (sem mudar imagem/config)kubectl — namespaces e recursos
kubectl get namespaces
kubectl create namespace dev
kubectl delete namespace dev # cuidado: deleta TUDO dentro do namespace junto
kubectl apply -f arquivo.yaml -n dev # aplica direto num namespace específicokubectl — debug avançado
kubectl top pods # uso de CPU/memória (precisa metrics-server)
kubectl top nodes
kubectl get events --sort-by='.lastTimestamp' # eventos recentes do cluster inteiro, ordenados
kubectl get events -n dev --field-selector involvedObject.name=<pod> # eventos de um recurso específico
kubectl port-forward <pod> 8080:80 # expõe uma porta do pod na sua máquina local, sem Service/Ingress
kubectl cp <pod>:/caminho/arquivo ./local # copia arquivo de dentro do pod pro host
kubectl run debug --image=busybox -it --rm -- sh # sobe um pod temporário só pra testar/debugar redeport-forward é o atalho mais rápido pra acessar algo dentro do cluster sem precisar configurar Service/Ingress — ótimo pra debug pontual (ex: acessar um Postgres StatefulSet direto).
kubectl run --rm cria um pod descartável — some sozinho ao sair, ótimo pra testar DNS/conectividade sem sujar o cluster.
kubectl — contexto de aplicação/config
kubectl explain pod # documentação embutida da estrutura de um recurso (campos válidos)
kubectl explain pod.spec.containers # desce em campos específicos
kubectl api-resources # lista todos os tipos de recurso disponíveis no cluster
kubectl diff -f arquivo.yaml # mostra o que MUDARIA se você aplicasse (sem aplicar de fato)kubectl explain é subestimado — evita ter que ficar procurando na documentação online pra lembrar um campo do YAML.
Combos úteis do dia a dia
# Ver tudo de um namespace de uma vez
kubectl get all -n dev
# Deletar um pod pra forçar recriação (testar auto-cura)
kubectl delete pod <nome>
# Ver por que um pod está Pending/CrashLoopBackOff
kubectl describe pod <nome> | tail -20
# Aplicar e acompanhar o rollout na mesma sequência
kubectl apply -f deployment.yaml && kubectl rollout status deployment/meu-app
# Limpar tudo de um namespace de teste
kubectl delete all --all -n dev