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 :)