Pular para o conteúdo
Abrir o Kubepier

Kubernetes · lista

kubectl: os comandos do dia a dia, com a saída de cada um

Equipe IA4CODE
engenharia de plataforma e SRE
publicado em 25 set 2026 9 min de leitura todas as saídas geradas num cluster k3s 1.35 de teste em 25 set 2026

TL;DR

Quinze comandos resolvem quase todo o dia a dia no Kubernetes. Para ver: get com -o wide, describe e top. Para depurar: logs (com --previous quando o container reiniciou), get events ordenado por tempo e exec. Para deploy: set image, rollout status, rollout history e rollout undo, e scale. Para acessar sem expor: port-forward. Para conferir: auth can-i e explain. E um antes de todos: config current-context, porque o kubectl roda no cluster do contexto atual. Cada comando abaixo tem a saída real de um cluster de teste.

Antes de tudo: qual cluster

O kubectl roda no cluster do current-context. Em máquina com vários clusters, esse é o comando que evita o delete no lugar errado:

terminal
kubectl config current-context
kubectl config get-contexts
kubectl config use-context NOME

Ver o que está rodando

get · com nó e IP

saída real, sem as duas últimas colunas
kubectl -n loja get pods -l app=vitrine -o wide
NAME                       READY   STATUS    RESTARTS   AGE   IP           NODE
vitrine-5c454758b8-stg57   1/1     Running   0          22s   10.42.1.10   k3d-ia4code-lab-agent-0
vitrine-5c454758b8-x9rsb   1/1     Running   0          22s   10.42.0.12   k3d-ia4code-lab-server-0

get · vários tipos de uma vez

saída real
kubectl -n loja get deploy,svc
NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/vitrine   2/2     2            2           22s

NAME              TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/vitrine   ClusterIP   10.43.35.187   <none>        80/TCP    22s

top · consumo agora (precisa do metrics-server)

saída real
kubectl -n loja top pod cpu-limitada --containers
POD            NAME   CPU(cores)   MEMORY(bytes)
cpu-limitada   app    201m         0Mi

describe junta estado, configuração e eventos de um objeto; é o primeiro comando de qualquer investigação. Os guias de erro mostram a saída dele em cada caso, como em ImagePullBackOff.

Depurar um pod

logs · de um Deployment, sem saber o nome do pod

saída real
kubectl -n loja logs deploy/vitrine --tail=3
Found 3 pods, using pod/vitrine-5c454758b8-68n66
2026/09/25 23:37:48 [notice] 1#1: start worker process 39
10.42.0.1 - - [25/Sep/2026:23:37:48 +0000] "GET / HTTP/1.1" 200 615 "-" "kube-probe/1.35" "-"

Quando o container reiniciou, o log que importa é o do anterior: kubectl logs POD --previous.

events · o que aconteceu, em ordem

saída real, resumida
kubectl -n loja get events --sort-by=.lastTimestamp | tail -5
0s   Normal   SuccessfulCreate    replicaset/vitrine-5c454758b8   Created pod: vitrine-5c454758b8-qg9bt
0s   Normal   SuccessfulDelete    replicaset/vitrine-664999df85   Deleted pod: vitrine-664999df85-b68v7
0s   Normal   Killing             pod/vitrine-664999df85-b68v7    Stopping container vitrine
0s   Normal   ScalingReplicaSet   deployment/vitrine              Scaled down replica set vitrine-664999df85 from 1 to 0

exec · rodar um comando dentro do container

saída real
kubectl -n loja exec deploy/vitrine -- nginx -v
nginx version: nginx/1.27.5

Deploy e rollback

set image · trocar a versão

saída real
kubectl -n loja set image deploy/vitrine vitrine=nginx:1.28-alpine
deployment.apps/vitrine image updated

rollout status · acompanhar até o fim

saída real, resumida
kubectl -n loja rollout status deploy/vitrine
Waiting for deployment "vitrine" rollout to finish: 1 out of 2 new replicas have been updated...
Waiting for deployment "vitrine" rollout to finish: 1 old replicas are pending termination...
deployment "vitrine" successfully rolled out

rollout history e undo · voltar a versão anterior

saída real, resumida
kubectl -n loja rollout history deploy/vitrine
kubectl -n loja rollout undo deploy/vitrine
REVISION  CHANGE-CAUSE
1         <none>
2         nginx 1.28

deployment.apps/vitrine rolled back

A coluna CHANGE-CAUSE vem da anotação kubernetes.io/change-cause; sem ela, fica <none>. Depois do undo, o exec acima mostrou de novo o nginx 1.27.5.

scale · mudar o número de réplicas

saída real
kubectl -n loja scale deploy/vitrine --replicas=3
deployment.apps/vitrine scaled

Acessar sem expor

port-forward · o Service na sua máquina

saída real
kubectl -n loja port-forward svc/vitrine 18090:80
curl -s -o /dev/null -w "HTTP %{http_code}\n" localhost:18090/
Forwarding from 127.0.0.1:18090 -> 80
Forwarding from [::1]:18090 -> 80
Handling connection for 18090
HTTP 200

Conferir permissão e documentação

auth can-i · eu posso? e a conta de serviço do pod?

saída real
kubectl auth can-i delete pods -n loja
kubectl auth can-i delete pods -n loja --as system:serviceaccount:loja:default
yes
no

explain · a documentação de qualquer campo, no terminal

saída real, resumida
kubectl explain deployment.spec.strategy.rollingUpdate.maxUnavailable
FIELD: maxUnavailable <IntOrString>

DESCRIPTION:
    The maximum number of pods that can be unavailable during the update. Value
    can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%).
    Absolute number is calculated from percentage by rounding down. This can not
    be 0 if MaxSurge is 0. Defaults to 25%.

Perguntas frequentes

Qual a diferença entre kubectl apply e kubectl create?

create cria e falha se o objeto já existe; apply cria ou atualiza a partir do arquivo, guardando a configuração aplicada. Para manifestos versionados, apply.

Como vejo o que um apply vai mudar antes de aplicar?

kubectl diff -f arquivo.yaml mostra a diferença entre o que está no cluster e o que o arquivo produziria. kubectl apply --dry-run=server -f arquivo.yaml valida contra a API sem gravar.

rollout undo volta para qual versão?

Para a revisão anterior, por padrão. Com --to-revision=N, para uma específica do rollout history. Ele só desfaz o template do pod; ConfigMaps e Secrets alterados à parte não voltam junto.

Por que meu comando pegou o cluster errado?

O kubectl usa o current-context do kubeconfig. Confira com kubectl config current-context antes de qualquer delete, e prefira passar --context explícito em scripts.

Leia em seguida

Todos os guias →