Skip to content

Comandos essenciais — kind + kubectl ​

kind (gerenciamento do cluster) ​

Criar e deletar clusters ​

bash
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 kind

Sem --name, tudo assume o cluster chamado kind. Em projetos com múltiplos clusters, sempre nomeie.

Listar e trocar de contexto ​

bash
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 ativo

Isso é 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 ​

bash
kind load docker-image minha-app:latest --name meu-cluster

O 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 ​

bash
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 ​

bash
kubectl config get-contexts
kubectl config use-context <nome>
kubectl config set-context --current --namespace=dev   # muda o namespace padrão do contexto atual

O ú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 ​

bash
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 ​

bash
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 node

describe é o comando #1 pra descobrir por que algo não está funcionando — sempre olhe a seção Events no final.

logs ​

bash
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 label

exec (entrar no container) ​

bash
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 um

kubectl — aplicar e modificar ​

bash
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 ​

bash
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 ​

bash
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ífico

kubectl — debug avançado ​

bash
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 rede

port-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 ​

bash
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 ​

bash
# 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

Released under the License MIT. Versão 1.0.0