Provisioning
What the engine installs in the Infrastructure step.
The Infrastructure step is where everything is assembled on the host. The engine installs, in sequence, with progress streamed live:
- k3s — lightweight, production-grade Kubernetes (scales to multi-node later).
- Ingress (Traefik) + cert-manager — routing and automatic TLS via Let's Encrypt.
- PostgreSQL and Redis in-cluster — the definitive database and the queue/pub-sub for logs.
- The artifact Registry and the CI Runners.
- The Deploy serverless runtime.
- The definitive api and web images (deploy + migrations + super admin seed as in-cluster Jobs).
equantic-space-* prefix (namespace equantic-space, Deployments equantic-space-api / equantic-space-platform, database equantic-space-db).CI runners
Pipeline jobs run as isolated pods on the cluster — one pod per job, with its own CPU/memory limits, so a heavy job never starves the platform or its neighbours. Capacity is derived from the cluster itself (always reserving headroom for the control plane): jobs beyond the ceiling wait in the queue, and adding a node to the fleet grows CI capacity automatically.
docker build inside jobs? Set EQS_RUNNER_DIND=true: each job gets its own private Docker daemon, never shared between jobs or workspaces.Tuning the capacity
The derivation is a good default, not a verdict: Settings → Platform → CI capacity lets you decide how much of the machine the runner may take, with every change previewing what it would buy on this cluster before you save it.
Two knobs matter most. The platform reserve is the slice of each node CI never touches — lowering it gives CI more in total, though more slots then divide the memory further, so each job can end up smaller. And "do not start below" is a floor for admission: a job's ceiling is frozen when its pod is created, so a brief dip in free memory can hand a two-hour build a limit it cannot finish under. Below the floor the node offers no slots and the job waits in the queue — late beats crippled.
EQS_RUNNER_* environment variable, and takes effect within one budget refresh (30 s) — no restart. Clear a field to fall back to the environment or the built-in default.