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 describe para 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:

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

  1. Verificar status do Pod
BASH
kubectl get pods -n <namespace>
  1. Descreva o pod
BASH
kubectl describe pod <nome-do-pod> -n <namespace>
  1. Verificar os eventos
BASH
kubectl get events --sort-by=.metadata.creationTimestamp
  1. Analisar logs
BASH
kubectl logs <nome-do-pod> -n <namespace>
kubectl logs <nome-do-pod> -n <namespace> --previous
  1. Verificar a utilização de recursos
BASH
kubectl top nodes
kubectl top pods
  1. Verifique a rede
  • Serviço
  • Endpoints
  • DNS
  • Network Policy
  1. Verifique o armazenamento
  • PVC
  • PV
  • StorageClass
  • Driver CSI
  1. Validar a configuração
  • ConfigMaps
  • Secrets
  • RBAC
Perguntas Frequentes (FAQ)
  1. 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
  1. 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.
  1. 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 )
  1. 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)
  1. Qual comando você deve executar primeiro para solucionar problemas?
BASH
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.

Artigo anterior