# 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 ```go 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 ```go 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]]