Skip to main content
Version: v1.5

Scalability

To demonstrate Nova Control Plane's scalability, we perform stress tests measuring the Control Plane's (API Server, etcd, Scheduler, Controller Manager) resource usage across varying fleet sizes, while actively orchestrating an application across every cluster in the fleet.

Test Environment

  • Infrastructure: Nova control plane deployed on a dedicated AKS hosting cluster (eastus, 2 nodes, 4 vCPU / 16 GB each). The hosting cluster provides the API server, etcd, scheduler, and controller manager components that are monitored during the tests.

  • Workload Clusters: Simulated using vclusters on a separate AKS cluster. Nodes are 8 vCPU / 32-64 GB, managed by the cluster autoscaler, which grows the fleet as vClusters are added — roughly 5-6 vClusters per node at this workload profile. This approach allows us to scale the number of virtual clusters without requiring physical cluster infrastructure for each one.

  • Workload: Retail Store Application (Microservices) distributed via Nova Spread Duplicate Policy, deploying one instance to every cluster. Each instance consists of:

    • ServiceAccount: 5
    • Secret: 4
    • ConfigMap: 5
    • Service: 10
    • Deployment: 7 (1 pod each, all with replicas: 1)
    • StatefulSet: 3 (1 pod each, all with replicas: 1)

    That is 10 workload objects managed by Nova per cluster (7 Deployments + 3 StatefulSets), i.e. 2,000 workloads at 200 clusters.

  • Measurement: Resource consumption is measured with kubectl top pod -n elotl in the hosting cluster once the fleet has settled at each cluster count. Each data point is the average of two settled snapshots; transient snapshots taken immediately after a scale-up are excluded, because agents are still registering and their metrics have not yet landed. Per-agent figures aggregate every Nova agent in the fleet at that point.

  • Nova version: nova-v1.5.5

note

Rows marked with * (150 clusters) are estimates on the surrounding trend, not measurements. At that step the control plane was starved — the API server was pinned at its default 500m CPU limit and the Nova scheduler had exhausted its 64Mi ephemeral-storage limit — so kube-controller-manager crash-looped and agents disconnected. Raising both limits (see Tuning the control plane for scale) restored normal behaviour, which the 175 and 200 measurements confirm. In the charts these points are drawn as hollow markers.

Control plane totals

Active ClustersWorkloadsCPU Usage (cores)Memory Usage (bytes)
2525090m549Mi
50500194m664Mi
75750350m874Mi
1001,000350m1034Mi
1251,250594m1250Mi
1501,500733m*1578Mi*
1751,750892m1848Mi
2002,0001115m1853Mi

Control plane, by component

Active ClustersAPI ServeretcdController ManagerNova Scheduler
2558m / 365Mi20m / 74Mi5m / 43Mi8m / 67Mi
50130m / 414Mi30m / 100Mi6m / 54Mi28m / 96Mi
75238m / 543Mi38m / 140Mi8m / 68Mi65m / 124Mi
100268m / 649Mi32m / 147Mi9m / 83Mi42m / 155Mi
125444m / 818Mi48m / 150Mi11m / 91Mi91m / 191Mi
150*512m / 1064Mi63m / 187Mi15m / 106Mi143m / 221Mi
175632m / 1179Mi69m / 252Mi17m / 134Mi173m / 283Mi
200777m / 1102Mi90m / 268Mi17m / 144Mi231m / 339Mi

Nova control plane CPU by component

Nova control plane memory by component

Nova agent footprint

Measured across every Nova agent in the fleet. Figures are the median across all agents at that fleet size.

Active ClustersCPU median (min–max)Memory median (min–max)
255m (3–12)41Mi (39–43)
506.5m (5–15)54Mi (51–56)
758m (6–40)68Mi (53–70)
10010m (7–46)81Mi (74–83)
12512m (8–24)95Mi (83–97)
150*14m (9–38)121Mi (104–148)
17515m (11–35)137Mi (112–175)
20017m (13–50)142Mi (133–184)

Nova agent CPU, median per agent

Nova agent memory, median per agent

Tuning the control plane for scale

ComponentFieldDefaultRecommended
API Serverresources.limits.cpu500m3 (request 1)
Nova Schedulerresources.limits.ephemeral-storage64Mi512Mi