feat(sessions): sandbox resource — per-session k8s Pod+PVC+Service (§4.15.4) #60

Merged
rock merged 1 commits from feat/sessions-sandbox-manager into main 2026-09-28 14:02:54 +00:00
Owner

Adds X-Resource: sandbox to X-Service: sessions.

See commit message for full spec.

Adds `X-Resource: sandbox` to `X-Service: sessions`. See commit message for full spec.
rock added 1 commit 2026-09-28 11:53:51 +00:00
New X-Resource: sandbox on X-Service: sessions

POST ?session_id=  → CreateOrResume
  1. Ensure PVC workspace-session-<id> (Longhorn 1Gi)
  2. If pod already Running → return DNS (resume path, idempotent)
  3. Ensure pi-session-sandbox NetworkPolicy (shared, created once)
  4. Create Pod pi-session-<id> + Service pi-session-<id>:8787
  5. Wait up to 30s for Pod Ready
  6. Fire-and-forget: merge pod_name/pvc_name/svc_dns/last_active_at
     into session memory_entity summary

DELETE ?session_id= → delete Pod + Service + PVC

Idle reaper goroutine (5min interval, configurable via
SANDBOX_REAPER_INTERVAL_MINUTES): lists pi-session-* pods,
deletes Succeeded/Failed ones, preserves PVCs for resume.

Security: runAsNonRoot/1000, readOnlyRootFilesystem, drop ALL
caps, RuntimeDefault seccomp, automountServiceAccountToken:false.
Resources: 500m/512Mi req, 1/1Gi limit.
NetworkPolicy: egress → DNS + api:8080 only; ingress ← poimen-frontend.

RBAC: Role session-sandbox-manager + RoleBinding in poimen ns.
7 unit tests — all pass (mock k8s server).

Image: forgejo.riotpiao.com/riotpiao-poimen/poimen-pi-session-runtime:latest
rock merged commit 49c9071a59 into main 2026-09-28 14:02:54 +00:00
rock deleted branch feat/sessions-sandbox-manager 2026-09-28 14:02:54 +00:00
Sign in to join this conversation.