Pular para o conteúdo
Abrir o Kubepier

Ciclo de vida · STATUS: Terminating

Terminating preso

O pod foi apagado, mas não sai da lista. Alguém ainda precisa confirmar o fim: um finalizer, ou o kubelet de um nó que não responde.

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: "Pod Lifecycle", seções "Termination of Pods" e "Forced Pod termination", e "Finalizers"

Sinal

STATUS Terminating muito depois do grace period, com deletionTimestamp preenchido.

Causa mais comum

Finalizer que nenhum controlador remove, ou o pod está num nó fora do ar.

Correção rápida

Descobrir quem segura: finalizer (tirar depois de entender) ou nó (esperar ou forçar sabendo o risco).

Comando que confirma

kubectl get pod NOME -o jsonpath='{.metadata.finalizers}'

O que significa

Apagar um pod não o remove na hora. A API marca o objeto com deletionTimestamp e o kubectl passa a mostrar Terminating. O kubelet do nó manda SIGTERM aos containers, espera o grace period, que tem 30 segundos por padrão, e manda SIGKILL a quem não saiu (documentação do Kubernetes, "Pod Lifecycle"). Quando o kubelet confirma o fim e não há mais finalizers, o objeto sai da API.

Preso quer dizer que um desses dois passos não acontece: há finalizer que ninguém remove, ou não há kubelet para confirmar.

Causas comuns

Finalizer que ninguém removemetadata.finalizers

Um controlador pôs um finalizer para limpar algo antes da remoção (volume, registro externo, sessão) e não está rodando, ou falhou. A API não apaga o objeto enquanto houver finalizer.

Nó fora do arNODE em NotReady

O kubelet é quem confirma que o container parou. Com o nó inalcançável, ninguém confirma, e o pod fica em Terminating até o nó voltar ou até uma remoção forçada.

Processo que ignora SIGTERMsegue o grace period inteiro

O kubelet manda SIGTERM, espera o grace period (30 s por padrão) e só então SIGKILL. Um grace period de horas faz o pod ficar em Terminating por horas, de propósito.

Volume que não desmontaeventos de volume no nó

O runtime não consegue desmontar um volume de rede. O container para, mas o pod não termina de sair.

Diagnóstico

Reproduzimos as duas causas principais no mesmo pod de teste: um finalizer de um controlador que não existe e, depois, o nó dele desligado.

1 · o pod segue em Terminating

saída real
kubectl -n loja get pod carrinho
NAME       READY   STATUS        RESTARTS   AGE
carrinho   1/1     Terminating   0          2m16s

2 · há finalizer?

saída real
kubectl -n loja get pod carrinho -o jsonpath='{.metadata.deletionTimestamp} {.metadata.finalizers}{"\n"}'
2026-09-25T22:44:36Z ["loja.internal/limpar-sessoes"]

O finalizer loja.internal/limpar-sessoes espera um controlador que não está rodando. Antes de removê-lo, descubra o que ele deveria limpar: tirar o finalizer pula essa limpeza.

3 · em que nó ele está, e o nó responde?

terminal
kubectl -n loja get pod carrinho -o wide
kubectl get nodes

A correção

Finalizer: o certo é corrigir o controlador que deveria removê-lo. Se ele não existe mais e a limpeza já foi feita à mão, remova o finalizer:

saída real
kubectl -n loja patch pod carrinho --type=json \
  -p='[{"op":"remove","path":"/metadata/finalizers"}]'
pod/carrinho patched

No nosso teste, o pod continuou em Terminating mesmo sem finalizer: ele estava num nó desligado. Esse é o segundo caso.

saída real, 3 s depois do patch
kubectl -n loja get pod carrinho
NAME       READY   STATUS        RESTARTS   AGE
carrinho   1/1     Terminating   0          7m52s

Nó fora do ar: o melhor é recuperar o nó; ao voltar, o kubelet termina o que ficou pendente. Se o nó não volta, a remoção forçada tira o objeto da API sem esperar confirmação:

saída real
kubectl -n loja delete pod carrinho --grace-period=0 --force
Warning: Immediate deletion does not wait for confirmation that the running resource has been terminated.
The resource may continue to run on the cluster indefinitely.
pod "carrinho" force deleted from loja namespace

avisoO aviso do kubectl é literal: o container pode continuar rodando no nó. Em StatefulSet isso pode colocar duas instâncias com a mesma identidade escrevendo no mesmo volume. A documentação do Kubernetes pede cuidado redobrado com remoção forçada de pods de StatefulSet.

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
Terminating há 7 min
Diagnóstico por IA · sua chave Anthropic ou OpenAI

Causa provável: o pod está no nó k3d-ia4code-lab-agent-0, que está NotReady; sem o kubelet, ninguém confirma o fim do container. Evidência: o pod segue em Terminating mesmo depois de removido o finalizer, e o nó não reporta status. Correção sugerida: recuperar o nó; se ele não volta e o pod não tem estado a proteger, remover à força.

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