Files
obsidian-sympozium/08-Słownik-K8s/Finalizer.md
2026-03-25 00:05:57 +01:00

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