105 lines
3.0 KiB
Markdown
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]]
|