Sizing
The numbers on this page are the defaults in the chart’s values.yaml. They are starting points
for your own measurements, not figures measured for a number of people: how much an installation
needs depends on how many people use it at once, how many tool servers they run, and what they do.
Watch what the pods use under Administration → Platform or in your monitoring, and adjust.
The platform’s components
Section titled “The platform’s components”| Component | Replicas | Autoscaling (CPU 70 %) | Requests | Limits |
|---|---|---|---|---|
| Control API | 2 | 2 to 6 | 100m CPU, 256Mi | 1 CPU, 512Mi |
| MCP gateway | 2 | 2 to 10 | 100m CPU, 256Mi | 1 CPU, 512Mi |
| Egress gateway | 2 | 2 to 10 | 100m CPU, 128Mi | 1 CPU, 512Mi |
| Controller | 2 (one leads) | – | 50m CPU, 128Mi | 500m CPU, 256Mi |
| Console | 2 | – | 50m CPU, 128Mi | 500m CPU, 256Mi |
| Classifier (off) | 1 | – | 2 CPU, 6Gi | 4 CPU, 8Gi |
With autoscaling on, the autoscaler sets the number of replicas and replicas is not used; it
needs a metrics server.
Services beside them
Section titled “Services beside them”| Service | Replicas | Requests | Limits | Other defaults |
|---|---|---|---|---|
| Postgres (CloudNativePG) | 2 instances | the operator’s | the operator’s | postgres.storage: 10Gi each |
| Garage | 1 node | 50m CPU, 128Mi | 1 CPU, 1Gi | volumes meta 1Gi, data 20Gi |
| SearXNG | 1 | 50m CPU, 256Mi | 1 CPU, 512Mi | |
| Docling | 1 | 1 CPU, 2Gi | 4 CPU, 8Gi | 2 workers, 4 threads each; scratch 2Gi |
| Gotenberg (off) | 1 | 100m CPU, 256Mi | 2 CPU, 2Gi | queue 8; scratch 1Gi |
| Presidio (off) | 1 | 100m CPU, 768Mi | 1 CPU, 1536Mi | starts in up to 6 minutes |
The chart’s README notes for Docling that OCR with EasyOCR on scanned pages took up to 6 GiB; each
further set of options kept loaded (optionsCacheSize) takes about 1 to 2 GiB more.
What the controller starts
Section titled “What the controller starts”These run outside the platform namespace and are bounded by counts and quotas, not by replicas:
| What | At once | Each requests | Each at most |
|---|---|---|---|
Build jobs (builds) |
2 per person, 8 in all | 500m CPU, 1Gi | 2 CPU, 4Gi; 15 minutes |
Check steps of a build (checks.resources) |
one per build | 100m CPU, 128Mi | 1 CPU, 1Gi; 3 minutes per tool |
Code sandboxes (sandboxes, off) |
2 per person, 20 in all, 2 kept warm | 100m CPU, 256Mi | 1 CPU, 2Gi; disk 2Gi; a run 120 s |
Code environments (devenvs, off) |
2 per person, 10 in all | 250m CPU, 512Mi, 1Gi disk | 2 CPU, 4Gi, 12Gi disk |
People’s tool servers run in a namespace per person, on instances.quota: 4 CPU, 8Gi memory, 20
pods, 5 volumes. An organisation’s namespace holds every copy its people share, one per version
and set of sign-ins, and uses instances.orgQuota, by default the same as a person’s. The chart’s
README suggests giving organisations more, for example:
instances: orgQuota: { cpu: "16", memory: 32Gi, pods: "100" }An idle instance goes to sleep after 15 minutes (setting instances.idleTimeout) and frees what it
used until the next call.
What grows with what
Section titled “What grows with what”| Grows with | Where | What to watch |
|---|---|---|
| People working at the same time | Control API, MCP gateway | CPU of these pods; the autoscalers’ maxima. |
| Tool calls to the outside | Egress gateway | CPU, and memory for API rules: egress.apiBodyBudget (64 MiB) bounds the request bodies one replica holds while it checks them. |
| People and organisations with their own tool servers | Their namespaces | The nodes’ room for instances.quota per namespace; the organisation’s quota. |
| Building tool servers | Build namespace | 8 build jobs at most, each up to 2 CPU and 4Gi. |
| Chats, memories, wiki pages, sessions, the audit log | Postgres | postgres.storage. Vectors for memory search are in Postgres too (pgvector). |
| Code bundles of tool servers | Postgres | Each up to bundles.maxSize (256Mi), every version kept. |
| Files | Garage or S3 | data 20Gi by default. Files go after 7 days unless kept, a person may keep up to 5 GB (settings); objects no file names any more stay storage.graceDays (90 days). |
| Documents read | Docling | Memory per worker, more with OCR; workers. |
Making it highly available
Section titled “Making it highly available”- Postgres:
postgres.instances: 2gives a primary and a replica. CloudNativePG fails over between them. - Garage: one node keeps every object once.
storage.garage.ha.enabled: trueruns at least three nodes, each object on three of them, never two on one Kubernetes node. A one-node Garage cannot simply become several later: start an HA one and copy the bucket over. - The components run with two replicas each by default.