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:

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

  1. Aceita a definição de Pod.
  2. O agendador procura um nó adequado.
  3. Verifica a disponibilidade de CPU e memória.
  4. Valida contaminações e tolerâncias.
  5. Avalia a afinidade dos nós e os seletores.
  6. Confirma se o espaço de armazenamento necessário está disponível.
  7. Atribui o Pod a um nó.
  8. O Kubelet inicia o contêiner.
  9. Se alguma etapa falhar, o Pod permanecerá no estado Pendente .
Como diagnosticar o problema
  1. Descreva o Pod
BASH
kubectl describe pod <nome-do-pod> -n <namespace>​​

Verifique a seção Eventos para erros de agendamento.

Exemplo:

TXT
0/3 nodes are available
2 Insufficient memory
1 node had taint
  1. Verificar eventos do cluster
BASH
kubectl get events --sort-by=.metadata.creationTimestamp

Procure por falhas recentes de agendamento ou eventos relacionados a recursos.

  1. Verificar o estado do nó
BASH
kubectl get nodes 

Saída esperada:

TXT
NAME      STATUS
node-1    Ready
node-2    NotReady

Se um nó estiver com o status NotReady, solucione os problemas do nó antes de prosseguir.

  1. Verificar solicitações de recursos
BASH
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.

  1. Verificar solicitação de volume persistentes (PVC)
BASH
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.

  1. Verificar Cotas de Recursos
BASH
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 nodeSelector e 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.

Próximo Artigo Artigo anterior