Um pod está preso no estado `Pending` e não está sendo agendado.
→Execute `kubectl describe pod <nome-do-pod>`. Verifique a seção `Events` para mensagens do scheduler.
Por quê: O comando `describe` é a ferramenta principal para isso. Ele mostrará razões como "Insufficient cpu/memory", "node(s) had taints the pod didn't tolerate", ou "didn't match node selector".
Um pod está iniciando e falhando repetidamente, com um status de `CrashLoopBackOff`.
→1. `kubectl logs <nome-do-pod> --previous` para ver os logs do container que falhou. 2. `kubectl describe pod <nome-do-pod>` para verificar o código de saída e a razão.
Por quê: `CrashLoopBackOff` significa que a aplicação dentro do container está sendo encerrada. Os logs da instância anterior (`--previous`) são cruciais, pois o container atual pode ainda não ter registrado nada útil. O código de saída também pode indicar o tipo de erro.
Um pod falha ao iniciar com o status `ImagePullBackOff` ou `ErrImagePull`.
→`kubectl describe pod <nome-do-pod>` para ver a mensagem do evento. Verifique se o nome e a tag da imagem estão corretos. Para registros privados, certifique-se de que um `imagePullSecrets` esteja configurado e o secret seja válido.
Por quê: Este é um problema de registro ou nome da imagem, não um problema da aplicação. Causas comuns são erros de digitação, tags incorretas ou falha de autenticação com um registro privado.
Um nó tem o status `NotReady`.
→Conecte-se via SSH ao nó afetado. Verifique o status do serviço kubelet com `systemctl status kubelet`. Veja seus logs com `journalctl -u kubelet`.
Por quê: O `kubelet` é o agente responsável pelo relatório de saúde do nó. Se estiver inativo ou não conseguir se comunicar com o API server, o nó será marcado como NotReady. Seus logs são o primeiro lugar para procurar.
Um serviço existe, mas o tráfego não está chegando aos pods de backend.
→1. `kubectl describe svc <nome-do-serviço>` e verifique se o `Selector` corresponde aos rótulos dos pods. 2. `kubectl get endpoints <nome-do-serviço>` e certifique-se de que ele lista os IPs corretos dos pods. Caso contrário, os rótulos estão incorretos.
Por quê: A ligação entre um Service e seus Pods é o seletor de rótulos. Se o seletor estiver errado ou os pods não tiverem os rótulos corretos, o objeto Endpoints estará vazio e o serviço não terá para onde rotear o tráfego.
Pods são incapazes de resolver nomes de serviço ou nomes de host externos.
→1. Verifique se os pods do CoreDNS estão em execução em `kube-system`. 2. Verifique os logs do CoreDNS. 3. Execute um pod de depuração (p.ex., `busybox`) e use `nslookup` para testar a resolução de dentro do cluster.
Por quê: O DNS é uma dependência crítica do cluster. Falhas geralmente remontam à própria implantação do CoreDNS, sua configuração (em um ConfigMap) ou políticas de rede bloqueando o tráfego DNS na porta UDP/TCP 53.
Um nó deve ser colocado offline para manutenção.
→Primeiro, `kubectl cordon <nome-do-nó>` para marcá-lo como não agendável. Em seguida, `kubectl drain <nome-do-nó> --ignore-daemonsets` para remover com segurança todos os pods de usuário.
Por quê: `cordon` impede que novos pods sejam agendados. `drain` respeita os PodDisruptionBudgets e remove os pods de forma graciosa. `--ignore-daemonsets` é necessário porque os pods DaemonSet não podem ser removidos.
Identificar quais pods ou nós estão consumindo mais CPU ou memória.
→Use `kubectl top pods` e `kubectl top nodes`. Isso requer que o `metrics-server` esteja implantado no cluster.
Por quê: `kubectl top` fornece uma visão rápida e em tempo real do consumo de recursos, essencial para identificar aplicações que consomem muitos recursos ou pressão de recursos no nó.
Um pod está no estado `Terminating` há muito tempo e não está sendo removido.
→Force a exclusão do pod com `kubectl delete pod <nome-do-pod> --grace-period=0 --force`.
Por quê: Isso pode acontecer se um finalizer estiver preso ou o kubelet não conseguir limpar os recursos. A exclusão forçada remove o pod do API server imediatamente, mas deve ser usada como último recurso, pois pode deixar recursos órfãos no nó.