Pular para o conteúdo
Abrir o Kubepier

Nó · status.reason: Evicted

Evicted

O kubelet tirou o pod do nó para proteger o próprio nó: faltou memória ou disco, ou o pod passou do limite de disco temporário.

publicado em 25 set 2026 6 min de leitura reproduzido num cluster k3s 1.35 de teste em 25 set 2026 verificado contra a documentação do Kubernetes: "Node-pressure Eviction" e "Pod Quality of Service Classes"

Sinal

Pod em fase Failed com status.reason Evicted; o STATUS do kubectl pode mostrar Error.

Causa mais comum

Disco temporário acima do limite do container, ou nó sem memória ou sem disco.

Correção rápida

Ler status.message, que diz o recurso; ajustar o limite ou o request, ou tirar a escrita do disco local.

Comando que confirma

kubectl get pod NOME -o jsonpath='{.status.reason} {.status.message}'

O que significa

O kubelet de cada nó vigia memória, disco e inodes. Quando um desses recursos passa de um limiar, ou quando um pod passa do próprio limite de disco temporário, o kubelet encerra pods para recuperar o recurso. É o despejo por pressão no nó (documentação do Kubernetes, "Node-pressure Eviction"). O pod vai para a fase Failed, com status.reason: Evicted e uma mensagem que diz o recurso.

Os limiares padrão de despejo imediato, segundo a mesma página, são: memória disponível abaixo de 100Mi, disco do nó (nodefs) abaixo de 5%, disco de imagens (imagefs) abaixo de 5% e inodes livres abaixo de 4%. Nesse despejo o kubelet não respeita PodDisruptionBudget nem o grace period do pod.

Um detalhe que achamos ao reproduzir: no Kubernetes 1.35, o kubectl get pods mostrou o pod despejado com STATUS Error, e não Evicted. O motivo real só aparece no describe ou no campo status.reason. Quem procura "Evicted" na lista pode não achar nada.

Causas comuns

Disco temporário acima do limite do containerephemeral local storage usage exceeds

O container escreve em /tmp, em log local ou num emptyDir mais do que o limits.ephemeral-storage permite. O kubelet despeja o pod inteiro.

Nó sem memóriaThe node was low on resource: memory

A soma do uso real dos pods passa do que o nó tem. O kubelet escolhe quem sai pela classe de QoS e por quanto cada pod passa do próprio request.

Nó sem discolow on resource: ephemeral-storage · nodefs

Imagens acumuladas, logs de container e emptyDir enchem o disco do nó. O kubelet primeiro apaga imagens sem uso; se não basta, despeja pods.

Pod sem requestBestEffort sai primeiro

Sem requests e limits, o pod é da classe BestEffort e é o primeiro candidato quando o nó aperta.

Diagnóstico em 3 comandos

Saídas reais de um pod de teste com limits.ephemeral-storage: 100Mi que grava 300 MB em /tmp.

1 · o que a lista mostra

saída real
kubectl -n loja get pod exportador
NAME         READY   STATUS   RESTARTS   AGE
exportador   0/1     Error    0          7m49s

2 · o motivo verdadeiro

saída real
kubectl -n loja get pod exportador \
  -o jsonpath='{.status.phase} {.status.reason} {.status.message}{"\n"}'
Failed Evicted Pod ephemeral local storage usage exceeds the total limit of containers 100Mi.

3 · os eventos, na ordem

saída real, resumida
kubectl -n loja describe pod exportador | sed -n '/Events:/,$p'
Events:
  Type     Reason   Age   From     Message
  Normal   Started  112s  kubelet  Container started
  Warning  Evicted  95s   kubelet  Pod ephemeral local storage usage exceeds the total limit of containers 100Mi.
  Normal   Killing  95s   kubelet  Stopping container exportador

Para achar todos os despejados de um namespace, filtre pela fase e confira o motivo de cada um: a lista abaixo mistura o pod despejado com pods de um Job que falhou por outro motivo.

saída real
kubectl -n loja get pods --field-selector=status.phase=Failed \
  -o custom-columns=NOME:.metadata.name,MOTIVO:.status.reason
NOME                    MOTIVO
exportador              Evicted
importar-precos-2qjsc   <none>
importar-precos-bxjx6   <none>
importar-precos-mmhq5   <none>

A correção

  1. Disco temporário: arquivo que precisa sobreviver vai para volume persistente ou para storage de objetos. Se é descartável, dimensione o limite pelo tamanho real do lote.
  2. Memória do nó: declare requests próximos do uso real. O kubelet despeja primeiro quem passa do próprio request, e por último os pods Guaranteed (request igual a limit em CPU e memória).
  3. Disco do nó: confira a política de rotação de logs e a limpeza de imagens; em nuvem, discos de nó maiores costumam ser a solução mais barata.
deployment.yaml
resources:
  requests:
    memory: 256Mi
    ephemeral-storage: 200Mi
  limits:
    memory: 512Mi
    ephemeral-storage: 1Gi

Pods despejados ficam no cluster, na fase Failed, até alguém apagar ou até o coletor de pods terminados passar do limite configurado no kube-controller-manager (terminated-pod-gc-threshold). Se o pod era de um Deployment, um substituto já foi criado em outro nó; os despejados só servem de registro.

bash · apagar os pods Failed do namespace depois de ler o motivo
kubectl -n loja delete pods --field-selector=status.phase=Failed

Como aparece no Kubepier

O Kubepier mostra os eventos do pod com os avisos primeiro, com filtro por tipo, namespace e motivo. O diagnóstico por IA explica o erro a partir dos eventos e do log, em português, com a sua chave de API (Anthropic ou OpenAI). Abaixo, uma ilustração com dados fictícios.

Kubepier um produto
Evicted · ephemeral-storage
Diagnóstico por IA · sua chave Anthropic ou OpenAI

Causa provável: o container escreveu mais de 100Mi em disco local e passou do limits.ephemeral-storage. Evidência: evento Evicted com "Pod ephemeral local storage usage exceeds the total limit of containers 100Mi". Correção sugerida: gravar o arquivo em volume persistente ou em objeto de storage, ou subir o limite de disco temporário se o arquivo for realmente descartável.

Conhecer o KubepierFree · Pro R$ 49/mês · Team R$ 199/mês