🛠️ Объект удалили, но он часами остаётся в Terminating
В YAML:
metadata:
deletionTimestamp: "2026-08-19T08:15:00Z"
finalizers:
- example.com/cleanup
Первая мысль:
«Удалим finalizer вручную».
Но так можно убрать объект из API и потерять cleanup, ради которого finalizer был установлен.
Как работает finalizer:
delete request
→ API server ставит deletionTimestamp
→ объект остаётся в API
→ controller выполняет cleanup
→ controller удаляет finalizer
→ объект исчезает окончательно
Finalizer — не код. Это строковый ключ, например:
Логику выполняет controller или operator.
Поэтому вопрос не «как стереть finalizer», а «какой компонент должен его снять и почему он не завершил cleanup».
Что проверить:
kubectl get exampleresource demo -n production -o yaml
kubectl describe exampleresource demo -n production
И точечно:
kubectl get exampleresource demo -n production \
-o jsonpath='{.metadata.deletionTimestamp}{"\n"}{.metadata.finalizers}{"\n"}'
Дальше смотрите:
— controller/operator;
— его Pod или Deployment;
— RBAC и ServiceAccount;
— events;
— logs;
— доступность внешнего API;
— состояние внешнего ресурса.
Частые причины:
— controller не работает;
— потерял права;
— внешний API недоступен;
— cleanup завершён частично;
— внешний ресурс уже в неожиданном состоянии;
— reconciliation падает с ошибкой.
Важно: events могут не содержать всю причину. Логи controller часто важнее.
Ручное удаление finalizer не всегда приводит к утечке, но риск есть. Последствия зависят от того, что именно этот finalizer должен был гарантировать.
Типичная ошибка:
объект завис
→ стерли finalizers
→ объект исчез
→ решили, что cleanup завершён
Вывод:
deletionTimestamp
→ finalizers
→ ответственный controller
→ cleanup
→ events/logs
→ внешний ресурс
→ причина сбоя
→ штатное снятие finalizer
Сохраните диагностическую последовательность для ресурсов, зависших в Terminating.
🔹🔹🔹🔹
В YAML:
metadata:
deletionTimestamp: "2026-08-19T08:15:00Z"
finalizers:
- example.com/cleanup
Первая мысль:
«Удалим finalizer вручную».
Но так можно убрать объект из API и потерять cleanup, ради которого finalizer был установлен.
Как работает finalizer:
delete request
→ API server ставит deletionTimestamp
→ объект остаётся в API
→ controller выполняет cleanup
→ controller удаляет finalizer
→ объект исчезает окончательно
Finalizer — не код. Это строковый ключ, например:
example.com/cleanup
Логику выполняет controller или operator.
Поэтому вопрос не «как стереть finalizer», а «какой компонент должен его снять и почему он не завершил cleanup».
Что проверить:
kubectl get exampleresource demo -n production -o yaml
kubectl describe exampleresource demo -n production
И точечно:
kubectl get exampleresource demo -n production \
-o jsonpath='{.metadata.deletionTimestamp}{"\n"}{.metadata.finalizers}{"\n"}'
Дальше смотрите:
— controller/operator;
— его Pod или Deployment;
— RBAC и ServiceAccount;
— events;
— logs;
— доступность внешнего API;
— состояние внешнего ресурса.
Частые причины:
— controller не работает;
— потерял права;
— внешний API недоступен;
— cleanup завершён частично;
— внешний ресурс уже в неожиданном состоянии;
— reconciliation падает с ошибкой.
Важно: events могут не содержать всю причину. Логи controller часто важнее.
Ручное удаление finalizer не всегда приводит к утечке, но риск есть. Последствия зависят от того, что именно этот finalizer должен был гарантировать.
Типичная ошибка:
объект завис
→ стерли finalizers
→ объект исчез
→ решили, что cleanup завершён
Вывод:
deletionTimestamp
→ finalizers
→ ответственный controller
→ cleanup
→ events/logs
→ внешний ресурс
→ причина сбоя
→ штатное снятие finalizer
Сохраните диагностическую последовательность для ресурсов, зависших в Terminating.
🔹🔹🔹🔹