Pod Stuck in Pending
O que é um estado pendente de Pod?
Um Pod no estado Pending significa que o Kubernetes aceitou o Pod, mas ele ainda não foi agendado para um nó. Isso geralmente acontece porque o cluster não dispõe de recursos suficientes, assim o nó não atende aos requisitos solicitados ou o armazenamento não está pronto.
Atenção: um pod pendente não está em falha, ele está simplesmente aguardando as condições necessárias para ser iniciado.
Sintomas comuns
Você poderá notar um ou mais dos seguintes sinais:
- O status do Pod permanece Pendente.
- Nenhum contêiner foi criado.
- Nenhum registro de aplicativo é gerado.
- A implementação está travada.
- Os eventos mostram falhas de agendamento.
Exemplo:
NAME READY STATUS RESTARTS AGE
nginx-pod 0/1 Pending 0 3m
As causas mais comuns incluem:
| Causa | Descrição |
|---|---|
| CPU ou Memória Insuficientes | O cluster não possui recursos disponíveis suficientes. |
| Cotas de Recursos | A cota de namespace impede o agendamento. |
| Taints e Tolerâncias | O Pod não é permitido em nós disponíveis. |
| Seletor/Afinidade de Nó | Nenhum nó corresponde às regras de agendamento. |
| PersistentVolumeClaim Pendente | O armazenamento necessário não está disponível. |
| Nó Não Pronto | O agendador não pode colocar o Pod em nós não íntegros. |
| Dependência de Download de Imagem | O agendador aguarda até que os pré-requisitos sejam atendidos. |
Como funciona o agendamento do Kubernetes
Ao criar um Pod, o Kubernetes segue estes passos:
- Aceita a definição de Pod.
- O agendador procura um nó adequado.
- Verifica a disponibilidade de CPU e memória.
- Valida contaminações e tolerâncias.
- Avalia a afinidade dos nós e os seletores.
- Confirma se o espaço de armazenamento necessário está disponível.
- Atribui o Pod a um nó.
- O Kubelet inicia o contêiner.
- Se alguma etapa falhar, o Pod permanecerá no estado Pendente .
Como diagnosticar o problema
- Descreva o Pod
kubectl describe pod <nome-do-pod> -n <namespace>
Verifique a seção Eventos para erros de agendamento.
Exemplo:
0/3 nodes are available
2 Insufficient memory
1 node had taint
- Verificar eventos do cluster
kubectl get events --sort-by=.metadata.creationTimestamp
Procure por falhas recentes de agendamento ou eventos relacionados a recursos.
- Verificar o estado do nó
kubectl get nodes
Saída esperada:
NAME STATUS
node-1 Ready
node-2 NotReady
Se um nó estiver com o status NotReady, solucione os problemas do nó antes de prosseguir.
- Verificar solicitações de recursos
kubectl describe pod <nome-do-pod>
Procurar:
'''txt
resources:
requests:
cpu: "4"
memory: "16Gi"
'''
Se os recursos solicitados excederem a capacidade disponível do cluster, o Pod permanecerá pendente.
- Verificar solicitação de volume persistentes (PVC)
kubectl get pvc -n <namespace>
Se o status do PVC for Pendente, o Pod não poderá iniciar até que o armazenamento esteja disponível.
- Verificar Cotas de Recursos
kubectl describe resourcequota
Verifique se o namespace possui quotas suficientes de CPU, memória e armazenamento.
Como resolver o problema
- Verifique e ajuste as solicitações/limites de CPU e memória.
- Garanta que os nós de trabalho estejam prontos e tenham recursos suficientes.
- Corrigir problemas de agendamento, como taints, tolerâncias
nodeSelectore regras de afinidade. - Resolva problemas de extração de imagens ou corrija nomes de imagens inválidos.
Resolva quaisquer problemas relacionados ao PVC ou ao armazenamento, se aplicável.