115 lines
4.5 KiB
Markdown
115 lines
4.5 KiB
Markdown
# Cykl życia Agent Pod
|
|
|
|
#sympozium #architektura #agent-pod
|
|
|
|
## Anatomia Agent Pod
|
|
|
|
Każdy agent run tworzy pod z następującymi kontenerami:
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────┐
|
|
│ Agent Pod (Job) │
|
|
│ │
|
|
│ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐ │
|
|
│ │ Agent │ │ IPC Bridge │ │ Skill Sidecar│ │
|
|
│ │ Container │ │ Sidecar │ │ (kubectl, │ │
|
|
│ │ │ │ │ │ helm, etc.) │ │
|
|
│ │ - LLM loop │ │ - fsnotify │ │ │ │
|
|
│ │ - Tool exec │ │ - NATS pub │ │ - /workspace │ │
|
|
│ │ - /skills │ │ - /ipc │ │ - RBAC scope │ │
|
|
│ └──────┬──────┘ └──────┬──────┘ └──────┬───────┘ │
|
|
│ │ │ │ │
|
|
│ /workspace /ipc (tmpfs) /workspace │
|
|
│ /skills (ro) (RAM-backed) │
|
|
│ /ipc │
|
|
│ /tmp │
|
|
│ │
|
|
│ ┌──────────────┐ ┌──────────────┐ │
|
|
│ │ MCP Bridge │ │ Sandbox │ │
|
|
│ │ (opcjonalny) │ │ (opcjonalny) │ │
|
|
│ └──────────────┘ └──────────────┘ │
|
|
└─────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## Woluminy
|
|
|
|
| Wolumin | Typ | Rozmiar | Cel |
|
|
|---------|-----|---------|-----|
|
|
| `workspace` | emptyDir | 1Gi | Współdzielone pliki robocze agent ↔ sidecary |
|
|
| `ipc` | emptyDir (RAM) | 64Mi | JSON IPC: agent → bridge → NATS |
|
|
| `skills` | Projected ConfigMap | - | Markdown instrukcje ze SkillPacks (read-only) |
|
|
| `tmp` | emptyDir | 256Mi | Tymczasowe pliki (read-only root FS) |
|
|
|
|
## [[SecurityContext]] agenta
|
|
|
|
Hardened security context - patrz [[SecurityContext]] dla wyjaśnienia poszczególnych pól:
|
|
|
|
```go
|
|
SecurityContext: &corev1.SecurityContext{
|
|
ReadOnlyRootFilesystem: &readOnly, // true - root FS read-only
|
|
AllowPrivilegeEscalation: &noPrivEsc, // false - blokuje setuid
|
|
Capabilities: &corev1.Capabilities{
|
|
Drop: []corev1.Capability{"ALL"}, // Drop ALL Linux capabilities
|
|
},
|
|
}
|
|
```
|
|
|
|
## Zasoby
|
|
|
|
| Kontener | CPU Request | CPU Limit | Memory Request | Memory Limit |
|
|
|----------|-------------|-----------|----------------|--------------|
|
|
| Agent | 250m | 1 | 512Mi | 1Gi |
|
|
| IPC Bridge | 50m | 100m | 64Mi | 128Mi |
|
|
| Sandbox | 100m | 500m | 256Mi | 512Mi |
|
|
|
|
## Fazy lifecycle
|
|
|
|
```
|
|
Pending → Running → Succeeded
|
|
→ Failed
|
|
→ Serving (tryb server)
|
|
```
|
|
|
|
### Pending
|
|
1. Walidacja polityki
|
|
2. Tworzenie ServiceAccount `sympozium-agent`
|
|
3. Tworzenie input ConfigMap (task, system prompt, memory)
|
|
4. Rozwiązywanie sidecars i RBAC
|
|
5. Tworzenie Job/Sandbox CR
|
|
|
|
### Running
|
|
- Polling statusu poda co 10 sekund
|
|
- Monitorowanie completion/failure
|
|
|
|
### Succeeded/Failed
|
|
1. Zbieranie logów poda (wynik agenta)
|
|
2. Ekstrakcja memory markers z outputu
|
|
3. Aktualizacja memory ConfigMap
|
|
4. Usuwanie efemerycznego RBAC
|
|
5. Pruning historii (domyślnie 50 runów per instancja)
|
|
6. Usuwanie finalizera
|
|
|
|
### Serving (tryb server)
|
|
- Deployment zamiast Job
|
|
- Service dla routowania
|
|
- Używany dla web-endpoint
|
|
- Długo żyjący, nie jest garbage-collectowany po zakończeniu
|
|
|
|
## Zmienne środowiskowe agenta
|
|
|
|
| Zmienna | Wartość |
|
|
|---------|---------|
|
|
| `AGENT_RUN_ID` | Nazwa AgentRun CR |
|
|
| `AGENT_ID` | ID konfiguracji agenta |
|
|
| `SESSION_KEY` | Klucz sesji |
|
|
| `INSTANCE_NAME` | Nazwa SympoziumInstance |
|
|
| `MODEL_PROVIDER` | openai/anthropic/azure/ollama |
|
|
| `MODEL_NAME` | Identyfikator modelu |
|
|
| `THINKING_MODE` | off/low/medium/high |
|
|
| `SPAWN_DEPTH` | Głębokość zagnieżdżenia sub-agenta |
|
|
| `TRACEPARENT` | W3C traceparent (OTel) |
|
|
|
|
---
|
|
|
|
Powiązane: [[Control Plane]] | [[Orchestrator - PodBuilder i Spawner]] | [[Skill Sidecars i auto-RBAC]]
|