Guia de Solução de Problemas no Kubernetes
Gerenciar clusters Kubernetes em produção não se resume apenas a implantar aplicativos, trata-se também de de identificar, diagnosticar e resolver problemas rapidamente antes que eles afetem os usuários.
Esse guia apresenta os problemas mais comuns no Kubernetes e mostra um roteiro para identificar, localizar as causas raizes, realizar o diagnóstico e possíveis soluções.
Siga o link dos principais problemas:
Node Not Ready
Pod Stuck in Pending
CrashLoopBackOff
ImagePullBackOff
Services not accessible
Falha de DNS
DNS Resolution Failure
Problemas de Storage (PV/PVC)
RBAC permission errors
Deployment Rollout
ConfigMap & Secret
Kubernetes Upgrade
Melhores práticas para resolução de problemas do Kubernetes:
- Sempre verifique os eventos e logs antes de fazer qualquer alteração.
- Use
kubectl describepara revisar eventos de agendamento e o status do Pod. - Valide os manifestos YAML do Kubernetes antes da implantação.
- Monitore a integridade do cluster usando Prometheus e Grafana.
- Siga o Princípio do Menor Privilégio (RBAC).
- Teste as alterações primeiro em um ambiente de teste antes de colocar em produção.
- Mantenha o Kubernetes, CNI, CSI e addons atualizados.
- Faça backup regularmente do etcd e de outros dados críticos do cluster.
Regra de ouro: Sempre verifique os logs primeiro, eles geralmente revelam a verdadeira causa raiz do problema.
Comandos Essenciais do Kubernetes
| Comando | Finalidade |
|---|---|
kubectl get all -A |
Exibe todos os recursos em todos os namespaces. |
kubectl get pods -A |
Lista todos os Pods em todos os namespaces. |
kubectl describe pod <pod> |
Exibe detalhes, eventos e status do Pod. |
kubectl logs <pod> |
Exibe os logs do container do pod. |
kubectl logs <pod> --previous |
Exibe os logs do container que falhou anteriormente. |
kubectl exec -it <pod> --sh |
Acessa o shell do Pod. |
kubectl get events --sort-by=.metadata.creationTimestamp |
Exibe os eventos em ordem cronológica. |
kubectl top nodes |
Verifica o uso de CPU e memória do nó. |
kubectl top pods |
Verifica o uso de CPU e memória do Pod. |
kubectl rollout history deployment/<nome> |
Exibe o histórico de implantação (deploy). |
kubectl auth can-i --list |
Exibe as permissões do usuário atual. |
Locais importantes dos arquivos de log
| Arquivo de Log | Descrição |
|---|---|
/var/log/containers/ |
Logs de contêineres |
/var/log/pods/ |
Logs de pods |
/var/log/kubelet.log |
Logs do serviço Kubelet |
/var/log/kubernetes/ |
Logs de componentes do Kubernetes |
/var/log/etcd/ |
Logs do etcd |
/var/log/secure |
Logs de autenticação e segurança |
/var/log/messages |
Logs gerais do sistema |
Observação: Em muitas distribuições Linux que utilizam o systemd, você também pode visualizar os logs com:
journalctl -u kubelet
journalctl -u containerd
journalctl -u docker
Fluxo de solução de problemas do Kubernetes
Sempre que você se deparar com um problema, siga esta sequencia:
- Verificar status do Pod
kubectl get pods -n <namespace>
- Descreva o pod
kubectl describe pod <nome-do-pod> -n <namespace>
- Verificar os eventos
kubectl get events --sort-by=.metadata.creationTimestamp
- Analisar logs
kubectl logs <nome-do-pod> -n <namespace>
kubectl logs <nome-do-pod> -n <namespace> --previous
- Verificar a utilização de recursos
kubectl top nodes
kubectl top pods
- Verifique a rede
- Serviço
- Endpoints
- DNS
- Network Policy
- Verifique o armazenamento
- PVC
- PV
- StorageClass
- Driver CSI
- Validar a configuração
- ConfigMaps
- Secrets
- RBAC
Perguntas Frequentes (FAQ)
- Quais são os problemas mais comum no Kubernetes?
Os problemas mais comuns são:
- Pod Pending
- CrashLoopBackOff
- ImagePullBackOff
- Service Not Accessible
- Falha Resolução de DNS
- Falha Storage/PVC
- Como solucionar problemas em um Pod?
- Verificar status do Pod (
kubectl get pods) - Descreva o Pod (
kubectl describe pod) - Verificar eventos
- Verificar os logs do contêiner (
kubectl logs) - Verificar recursos, rede, armazenamento e configuração.
- O que causa o CrashLoopBackOff?
- Falha no aplicativo
- Falha Readiness/Liveness probes
- Variáveis de ambiente ausentes
- Comando de inicialização incorreto
- Falha na conexão com o banco de dados
- Out Of Memory Killed ( OOMKilled )
- Por que um Pod está preso no status Pendente?
- CPU ou memória insuficientes
- Node NotReady
- Taints and tolerations
- Node selectors or affinity rules
- Unbound PersistentVolumeClaim (PVC)
- Qual comando você deve executar primeiro para solucionar problemas?
kubectl get pods
kubectl describe pod <nome-do-pod>
```
Em seguida, verifique:
```bash
kubectl logs <nome-do-pod>
kubectl logs <nome-do-pod> --previous
Esses comandos geralmente revelam a causa raiz por meio de eventos e registros de aplicativos.
Lista de verificação final
Lista de verificação final para resolução de problemas (12 problemas mais comuns do Kubernetes)
| # | Problema | Primeiro Comando |
|---|---|---|
| 1 | Pod Pendente | kubectl describe pod |
| 2 | CrashLoopBackOff | kubectl logs --previous |
| 3 | ImagePullBackOff | kubectl describe pod |
| 4 | Serviço Inacessível | kubectl get endpoints |
| 5 | Sem Acesso à Internet | kubectl exec -- curl |
| 6 | Problemas de Armazenamento/PVC | kubectl get pvc,pv |
| 7 | Nó Não Pronto | kubectl describe node |
| 8 | Falha na Resolução de DNS | kubectl exec -- nslookup kubernetes.default |
| 9 | Permissão RBAC Negada | kubectl auth can-i |
| 10 | Problemas de implantação | kubectl rollout status |
| 11 | Problemas com ConfigMap e Secrets | kubectl describe configmap / kubectl describe secret |
| 12 | Problemas de atualização do Kubernetes | kubectl version |
Lembre-se: Describe → Events → Logs → Root Cause → Fix → Verify
Referencias
Kubernetes Troubleshooting Guide: Fix Most Common Kubernetes (K8s) Issues Like a Pro — Part 1.
Kubernetes Troubleshooting Guide: Fix Most Common Kubernetes (K8s) Issues Like a Pro — Part 2.