kubectl delete pod 를 실행했는데 파드가 계속 Terminating 으로 남아 있는 경우의 원인 확인과 조치를 정리한다. 대체 파드가 이미 떠서 서비스에 영향이 없는 경우가 많으므로, 강제 삭제 전에 원인을 먼저 확인하는 편이 낫다.
kubectl describe pod <pod> | tail -30
kubectl get pod <pod> -o yaml | grep -A5 -E "finalizers|deletionTimestamp|nodeName"
kubectl get nodes
전형적인 원인은 다음과 같다. 해당 노드의 kubelet 이 응답하지 않거나 노드가 NotReady 인 경우가 가장 흔하고, finalizer 가 남아 있는 경우, 컨테이너 런타임이 컨테이너를 종료하지 못하는 경우, 볼륨 언마운트가 멈춘 경우가 있다.
kubectl get nodes 에서 그 노드가 NotReady 면 파드가 아니라 노드가 문제다.
systemctl status kubelet
journalctl -u kubelet --since "1 hour ago" | tail -50
finalizer 가 원인이면 제거한다.
kubectl patch pod <pod> -p '{"metadata":{"finalizers":null}}'
kubelet 이 죽어 있으면 kubelet 을 재시작하는 것으로 대개 정리된다.
최후 수단은 강제 삭제다.
kubectl delete pod <pod> --grace-period=0 --force
crictl ps | grep <pod-name-prefix>