Files
obsidian-sympozium/02-Architektura/Orchestrator - PodBuilder i Spawner.md
2026-03-25 00:05:57 +01:00

105 lines
3.0 KiB
Markdown

# Orchestrator - PodBuilder i Spawner
#sympozium #architektura #orchestrator
## Lokalizacja
`internal/orchestrator/` - pakiet odpowiedzialny za budowanie specyfikacji podów i spawning Job'ów.
## PodBuilder
`PodBuilder` to struct odpowiedzialny za konstruowanie pod spec'ów. Konfigurowany jest tagiem obrazów:
```go
type PodBuilder struct {
DefaultAgentImage string // agent-runner
DefaultIPCBridgeImage string // ipc-bridge
DefaultSandboxImage string // sandbox
DefaultMCPBridgeImage string // mcp-bridge
EventBusURL string // nats://nats.sympozium-system.svc:4222
ImageTag string // np. "v0.0.25"
}
```
Registry: `ghcr.io/sympozium-ai/sympozium`
## Budowanie kontenerów
### BuildAgentContainer
Główny kontener agenta z:
- Read-only root filesystem
- Drop ALL capabilities
- No privilege escalation
- Woluminy: workspace, skills (ro), ipc, tmp
- EnvFrom: secret z kluczem API
### BuildIPCBridgeContainer
Sidecar IPC bridge z:
- Wolumin ipc (shared z agentem)
- Env: AGENT_RUN_ID, INSTANCE_NAME, EVENT_BUS_URL
- Opcjonalnie: TRACEPARENT, OTEL_* (observability)
### BuildSandboxContainer
Opcjonalny sidecar sandbox z:
- Read-only root filesystem
- Drop ALL capabilities
- Command: `sleep infinity` (czeka na komendy z agenta)
- Woluminy: workspace, tmp
### BuildVolumes
4 woluminy:
- `workspace` - emptyDir 1Gi
- `ipc` - emptyDir (Memory medium) 64Mi - **RAM-backed** dla szybkości
- `tmp` - emptyDir 256Mi
- `skills` - Projected volume z ConfigMapów SkillPacks
## AgentPodConfig
Konfiguracja przekazywana do buildera:
```go
type AgentPodConfig struct {
RunID string
InstanceName string
AgentID string
SessionKey string
ModelProvider string
ModelName string
ThinkingMode string
AuthSecretRef string
SandboxEnabled bool
SandboxImage string
SpawnDepth int
Skills []SkillMount
Traceparent string // W3C traceparent
OTelEndpoint string // OTLP endpoint
}
```
## Proces tworzenia poda (w AgentRunReconciler)
```
1. reconcilePending()
├── validatePolicy() - sprawdza SympoziumPolicy
├── ensureAgentServiceAccount() - ServiceAccount w namespace
├── createInputConfigMap() - task + system prompt
├── resolveSkillSidecars() - SkillPack CRDs → sidecar specs
├── ensureMCPConfigMap() - konfiguracja MCP serwerów
├── buildContainers() - PodBuilder buduje spec
├── createEphemeralRBAC() - Role + RoleBinding per sidecar
└── createJob() / createSandboxCR() - finalne tworzenie zasobu K8s
```
## Relacja z AgentRun Controller
`AgentRunReconciler` (`internal/controller/agentrun_controller.go`) jest "klientem" PodBuilder'a. Reconciler:
1. Obserwuje AgentRun CRDs
2. Używa PodBuilder do budowania spec'ów
3. Tworzy Job/Sandbox CR w Kubernetes
4. Monitoruje lifecycle poda
5. Zbiera wyniki i czyści zasoby
---
Powiązane: [[Cykl życia Agent Pod]] | [[AgentRun]] | [[Cykl życia AgentRun]]