Debugando pods no Kubernetes com kubectl exec, logs e port-forward

Tabela de Conteúdo

No dia a dia com Kubernetes, boa parte do debug se resume a três comandos: entrar no container, ver o log e acessar uma porta sem expor nada publicamente.

Entrando no container

$ kubectl exec -it nome-do-pod -- /bin/bash

Se a imagem não tiver bash (comum em imagens mínimas), usa o sh:

$ kubectl exec -it nome-do-pod -- /bin/sh

Quando o pod tem mais de um container, é preciso indicar qual deles com -c:

$ kubectl exec -it nome-do-pod -c nome-do-container -- /bin/sh

Vendo logs

$ kubectl logs nome-do-pod

Acompanhando em tempo real:

$ kubectl logs -f nome-do-pod

Se o pod tem mais de um container, também precisa do -c:

$ kubectl logs -f nome-do-pod -c nome-do-container

E quando o container crashou e reiniciou, o kubectl logs normal já mostra o log do container novo. Pra ver o log da execução anterior, antes do crash:

$ kubectl logs nome-do-pod --previous

Acessando uma porta do pod localmente

Sem precisar criar Service nem Ingress, dá pra encaminhar uma porta do pod pra sua máquina:

$ kubectl port-forward nome-do-pod 8080:80

Isso encaminha a porta 8080 local pra porta 80 do pod. Também funciona apontando pra um Service em vez de um pod específico:

$ kubectl port-forward svc/nome-do-service 8080:80

Pra encerrar, é só um Ctrl+C.

Simples assim :)