Capacity
No capacity envelope has been measured. This page is the arithmetic a deployment can do before it runs anything, and the defaults it would be running with. Neither is a throughput claim, and both are here because the alternative is a reader assuming the defaults fit their scale.
What an installation needs before it can size itself is on issue #224: measured latency, queue delay, API demand, CPU, memory, Pod count and retained growth, against a declared workload. Until that exists, treat what follows as the lower bound on cost rather than as a limit.
What a resource costs while nothing changes
Section titled “What a resource costs while nothing changes”A resource that is converged still works. The operator re-reads it at
spec.interval, and each pass runs the read-only operations its family needs.
PtahSchema |
PtahMigration |
|
|---|---|---|
| Operations per refresh | Resolve, Verify, Observe, Plan | Resolve, Verify, History |
Default spec.interval |
10m | 10m |
| Jobs per resource per day | 576 | 432 |
Each of those is a Job, a Pod, an image pull against the node’s cache, a database connection for the operations that open one, and a result read from the Pod’s log. The numbers are cadence arithmetic: four operations every ten minutes is 576 a day, three is 432. They are what the resource costs before a change, a retry, an approval wait or a post-Apply proof adds anything.
Raising spec.interval divides all of it. A resource whose artifact changes
once a week and whose database nothing else writes does not need a reading
every ten minutes, and the interval is the first thing to move on a large
installation.
What one manager is
Section titled “What one manager is”One manager reconciles, whatever the replica count. Additional replicas serve admission and take over on failure; they do not divide the reconciliation work, because a single leader holds it.
The chart’s defaults for that manager:
| Request | Limit | |
|---|---|---|
| CPU | 50m | — |
| Memory | 96Mi | 256Mi |
Those are defaults, not a measured working set. The manager caches the live status of every resource it watches, the Jobs it dispatched and the policy objects it reads, so the number that matters is the one your resource count produces, and nothing here establishes it.
What storage grows with
Section titled “What storage grows with”A plan is immutable, and a new fingerprint publishes a new one. Nothing is pruned automatically.
| Value | |
|---|---|
| Maximum executable plan | 8 MiB |
| Chunk size | 512 KiB |
A hundred distinct retained plans at that ceiling hold eight hundred mebibytes of SQL before metadata. That is arithmetic about the limit rather than a measurement of any installation. Which plans may be deleted is Pruning stored plans.
The dimensions an envelope has to be stated over
Section titled “The dimensions an envelope has to be stated over”A measured envelope is a set of numbers against a workload, and these are the axes that workload varies along. They are named here because a measurement that holds one of them fixed says nothing about an installation that moves it, and because the reader sizing an installation needs to know which of their own numbers matter.
| Dimension | Why it changes the answer |
|---|---|
| Resources, and realms across them | Every resource refreshes on its own interval; resources sharing a database realm serialize against each other, and resources in separate realms do not |
spec.interval |
The cadence above multiplies by resource count, and it is the first thing to move on a large installation |
| Plan size | A plan travels as ConfigMap chunks up to the 8 MiB ceiling, so it costs API bytes, etcd, and a longer read on the way back |
| Migration history length | History is read on every refresh of a PtahMigration, and the reading grows with the sequence already applied |
| Approvals waiting | A resource waiting for a person keeps refreshing and keeps its plan and its chunks, so a backlog is retained storage as well as queue |
| Changes at once | A rollout, or a restart, refreshes everything at once; the burst is what a steady-state figure does not describe |
None of these has a supported maximum, because none has been measured. What follows is what a measurement would have to produce for them.
What has not been measured
Section titled “What has not been measured”Everything that decides whether an installation is inside its budget:
- reconciliation lag and queue delay at a given resource count;
- Job creation rate and completion latency under a simultaneous refresh after a restart, which is the burst every installation gets on every rollout;
- manager CPU and resident memory against a named workload;
- API throttling and admission latency;
- fairness across independent database realms, and the time to reach safety-critical work while ordinary work is queued;
- behaviour beyond the admitted limits: whether it degrades or refuses.
An installation that needs a number for any of those has to measure it. Saying so is more useful than a figure nobody produced.