65 lines
1.6 KiB
Markdown
65 lines
1.6 KiB
Markdown
# 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]]
|