1.6 KiB
1.6 KiB
Finalizer
#kubernetes #lifecycle #słownik
Co to jest?
Finalizer to mechanizm Kubernetes blokujący usunięcie zasobu do czasu wykonania cleanup. Dopóki finalizer istnieje na zasobie, K8s nie usunie go z etcd.
Jak działa?
1. Zasób ma finalizer: ["sympozium.ai/finalizer"]
2. kubectl delete → DeletionTimestamp ustawiony, ale zasób ISTNIEJE
3. Controller widzi DeletionTimestamp → wykonuje cleanup
4. Controller usuwa finalizer z listy
5. K8s widzi brak finalizerów → zasób usunięty z etcd
Bez vs z finalizer
Bez finalizer:
kubectl delete agentrun → NATYCHMIAST usunięty
→ Orphaned Jobs, RBAC, ConfigMaps!
Z finalizer:
kubectl delete agentrun → DeletionTimestamp set
→ Controller: cleanup Jobs, RBAC, ConfigMaps
→ Controller: remove finalizer
→ Zasób usunięty
Użycie w Sympozium
AgentRun finalizer
const agentRunFinalizer = "sympozium.ai/agentrun-finalizer"
Cleanup przy usunięciu:
- Delete Job/Sandbox CR
- Delete ephemeral RBAC (ClusterRole, ClusterRoleBinding)
- Delete input ConfigMap
- Delete MCP ConfigMap
SympoziumInstance finalizer
const sympoziumInstanceFinalizer = "sympozium.ai/finalizer"
Cleanup:
- Delete channel Deployments
- Delete memory ConfigMap
- Delete memory Deployment/Service
Pułapki
- Jeśli controller jest niedostępny → finalizer blokuje usunięcie na zawsze
- "Stuck" zasoby: trzeba ręcznie usunąć finalizer (
kubectl edit) - Finalizer dodawany tylko dla non-terminal runs (nie dla Succeeded/Failed)
Powiązane: Controller i Reconciler | ownerReference | Cykl życia AgentRun