Skip to content

Deployment Size

Deployment size sets the starting CPU, memory and replica count for every service on a runtime plane. You choose it once, when the plane is created, and it seeds the values each service starts with. Individual services can be tuned afterwards; the size itself cannot be changed.

There are three sizes: Small, Medium and Large.

The size is chosen once

Deployment size is recorded when the plane is created and cannot be changed afterwards. To move a running plane to different resources, edit the services you want to change under Kubernetes Configs — see Changing values after creation. Planes created before this feature shipped show their size as Not recorded, and a size cannot be assigned to them retrospectively.

The three sizes

Size Resources per service Replicas
Small Each service at its default CPU and memory One of every service
Medium Roughly twice Small, though the exact factor varies by service 3 for ZooKeeper, Solr, Nebula Metad and Nebula Storaged; 2 for Auditserver and Fluentd
Large Roughly four times Small, again varying by service Same as Medium

Medium and Large carry the same replica counts. The two sizes differ in how much CPU and memory each pod gets, not in how many pods run. Choosing Large gives each service more capacity; it does not add more copies of it.

Solr redundancy moves with the pod count. At Medium and Large, Solr runs three pods and each collection keeps two copies of every shard (replicationFactor: 2), so losing a pod does not lose an index. At Small there is one Solr pod and one copy — a second copy has nowhere to go. Two copies also means each collection occupies roughly twice the index space it would at Small, spread across the pods' volumes, which is worth allowing for when sizing Solr storage.

Why the factor varies by service

"Roughly twice" and "roughly four times" are medians, not a rule, and the spread around them is wide. Measured on main-container memory requests across every sized service, Medium ranges from 1x (unchanged) to 8x with a median of 2x, and Large from 1x to 32x with a median of 4x.

Two separate things drive that spread:

  • Some services take their tiers from field-tested production values rather than from a flat multiplier, so they grow much faster than the headline (auditserver, solr, ranger) or not at all (grafana, postgres_db).
  • At Medium and Large, a service's memory request is raised to equal its limit, which makes the pod guaranteed QoS. Where Small requested well below its limit, that convergence appears as a large increase in the request even though the limit itself grew much less. Compare the request and limit rows for a service to see which of the two is happening.

Read the per-service reference for any single service. The headline figures are a fleet-level orientation only, and should not be used to size a specific workload.

How to set it

In the create wizard

Choose a size from the Deployment size dropdown on the first step of runtime plane creation. The control summarizes what the selected size changes as you switch between them.

Small is pre-selected. If you skip the field, the plane is created as Small.

Through the API

Set deploymentSize in the plane's runtimeConfigs when you create it:

JSON
1
2
3
4
5
6
{
  "runtimeConfigs": {
    "namespace": "my-plane",
    "deploymentSize": "MEDIUM"
  }
}

Accepted values are SMALL, MEDIUM and LARGE, case-insensitive. Any other value is rejected at creation rather than deploying something unintended. Deployment size applies to Self-Managed and Partially Managed (D2P) planes. It is not accepted on PrivaceraCloud planes, where Privacera manages the sizing for you.

What size does and does not change

It sets CPU requests and limits, memory requests and limits, and replica counts, for the services listed in the reference below. Values are applied when each service's configuration row is created, so services added to a plane later also pick up the plane's size.

It does not change:

  • Storage. Volume sizes are identical at every size. Note that volumes are provisioned per replica, so a size that raises a replica count does raise total provisioned storage even though no individual volume grew.
  • Observability sidecars. The otelClient and diagClient containers keep the same resources at every size.
  • Ranger's replica count. Ranger runs a single replica at every size. Its database schema import is not safe to run concurrently, so the first start must have a single writer. Ranger can be scaled up safely once the plane is running and its schema exists.

Changing values after creation

Every value in the reference below is editable per service after the plane exists, under that service's Kubernetes Configs tab. Editing one service does not affect the others, and does not change the plane's recorded size.

Two constraints are worth knowing before you plan a change:

  • Volume sizes cannot be reduced, and on a StatefulSet they generally cannot be changed at all once the workload exists. Size volumes before the first deploy on a plane you expect to carry heavy volume.
  • Memory requests equal memory limits at Medium and Large, which makes those pods guaranteed QoS. A guaranteed pod needs a node with that much memory actually free, so a Medium or Large plane may need larger nodes — or a cluster autoscaler — where a Small plane schedules immediately.

Per-service reference

Values as shipped, generated from the service templates. Select a size to see every service at that size; the Small table is the baseline the other two are built from.

A dash means deployment size does not pin that property for the service, so it deploys at its chart default. Property names match the keys on each service's Kubernetes Configs tab.

Service Replicas CPU request CPU limit Memory request Memory limit
ai_assets_collector — 100m 500m 1Gi 1Gi
auditserver 1 500m 1000m 1Gi 1Gi
bigquery — 500m 2000m 2Gi 4Gi
databricks_sql_analytics — 500m 2000m 2Gi 2Gi
databricks_unity_catalog — 500m 2000m 2Gi 2Gi
dataserver — 100m 2000m 2Gi 2Gi
diagnostics_server — 200m 400m 512Mi 512Mi
discovery_classifier — 500m 2000m 1Gi 4Gi
fluentd 1 100m 1000m 512Mi 1Gi
grafana — 200m 1 2Gi 2Gi
lakeformation — 500m 2000m 2Gi 4Gi
mariadb — 100m 1000m 2Gi 2Gi
mssql — 500m 2000m 2Gi 2Gi
nebula_cluster_manager — 50m 500m 128Mi 512Mi
nebula_console 0 10m 100m 32Mi 128Mi
nebula_exporter — 50m 200m 128Mi 256Mi
nebula_graphd 1 200m 2000m 1Gi 2Gi
nebula_metad 1 100m 1000m 512Mi 1Gi
nebula_storaged 1 200m 2000m 1Gi 2Gi
nebula_studio 0 200m 1000m 256Mi 1Gi
omni_connector — 100m 2000m 1Gi 2Gi
omni_metadata — 100m 1000m 1Gi 2Gi
omni_metadata_schema_job — 100m 1000m 512Mi 1Gi
opensearch 1 200m 2000m 2Gi 2Gi
opensearch_templates_manager — 100m 500m 256Mi 512Mi
otel_collector — 200m 1000m 2Gi 2Gi
portal 1 500m 2000m 2Gi 4Gi
postgres — 500m 2000m 2Gi 2Gi
postgres_db — 100m 1000m 2Gi 2Gi
prometheus — — — — —
ranger 1 500m 2000m 1536Mi 3Gi
redshift — 500m 2000m 2Gi 2Gi
runtime_agent — 200m 2000m 2Gi 2Gi
runtime_manager — 100m 1000m 2Gi 2Gi
snowflake — 500m 2000m 2Gi 2Gi
solr 1 100m 1000m 2Gi 2Gi
solr_collection_manager — 50m 500m 128Mi 512Mi
usersync — 500m 2000m 2Gi 2Gi
zookeeper 1 100m 500m 2Gi 2Gi
Service Replicas CPU request CPU limit Memory request Memory limit
ai_assets_collector — 200m 1000m 2Gi 2Gi
auditserver 2 2000m 4000m 8Gi 8Gi
bigquery — 1000m 4000m 8Gi 8Gi
databricks_sql_analytics — 1000m 4000m 4Gi 4Gi
databricks_unity_catalog — 1000m 4000m 4Gi 4Gi
dataserver — 200m 4000m 4Gi 4Gi
diagnostics_server — 500m 1000m 1Gi 1Gi
discovery_classifier — 1000m 4000m 8Gi 8Gi
fluentd 2 200m 1000m 1Gi 1Gi
grafana — 200m 1 2Gi 2Gi
lakeformation — 1000m 4000m 8Gi 8Gi
mariadb — 1000m 2000m 2Gi 2Gi
mssql — 1000m 4000m 4Gi 4Gi
nebula_cluster_manager — 100m 1000m 1Gi 1Gi
nebula_console 0 20m 200m 256Mi 256Mi
nebula_exporter — 100m 400m 512Mi 512Mi
nebula_graphd 1 400m 4000m 4Gi 4Gi
nebula_metad 3 200m 2000m 2Gi 2Gi
nebula_storaged 3 400m 4000m 4Gi 4Gi
nebula_studio 0 400m 2000m 2Gi 2Gi
omni_connector — 200m 4000m 4Gi 4Gi
omni_metadata — 200m 2000m 4Gi 4Gi
omni_metadata_schema_job — 200m 2000m 2Gi 2Gi
opensearch 1 400m 4000m 4Gi 4Gi
opensearch_templates_manager — 200m 1000m 1Gi 1Gi
otel_collector — 400m 2000m 4Gi 4Gi
portal 1 1000m 4000m 8Gi 8Gi
postgres — 1000m 4000m 4Gi 4Gi
postgres_db — 100m 1000m 2Gi 2Gi
prometheus — — — — —
ranger 1 4000m 8000m 11008Mi 11008Mi
redshift — 1000m 4000m 4Gi 4Gi
runtime_agent — 400m 4000m 4Gi 4Gi
runtime_manager — 200m 2000m 4Gi 4Gi
snowflake — 1000m 4000m 4Gi 4Gi
solr 3 4000m 8000m 9984Mi 9984Mi
solr_collection_manager — 100m 1000m 1Gi 1Gi
usersync — 1000m 4000m 4Gi 4Gi
zookeeper 3 1000m 2000m 2560Mi 2560Mi
Service Replicas CPU request CPU limit Memory request Memory limit
ai_assets_collector — 400m 2000m 4Gi 4Gi
auditserver 2 8000m 16000m 32Gi 32Gi
bigquery — 2000m 8000m 16Gi 16Gi
databricks_sql_analytics — 2000m 8000m 8Gi 8Gi
databricks_unity_catalog — 2000m 8000m 8Gi 8Gi
dataserver — 400m 8000m 8Gi 8Gi
diagnostics_server — 1000m 2000m 2Gi 2Gi
discovery_classifier — 2000m 8000m 16Gi 16Gi
fluentd 2 500m 1000m 2Gi 2Gi
grafana — 200m 1 2Gi 2Gi
lakeformation — 2000m 8000m 16Gi 16Gi
mariadb — 2000m 4000m 4Gi 4Gi
mssql — 2000m 8000m 8Gi 8Gi
nebula_cluster_manager — 200m 2000m 2Gi 2Gi
nebula_console 0 40m 400m 512Mi 512Mi
nebula_exporter — 200m 800m 1Gi 1Gi
nebula_graphd 1 800m 8000m 8Gi 8Gi
nebula_metad 3 400m 4000m 4Gi 4Gi
nebula_storaged 3 800m 8000m 8Gi 8Gi
nebula_studio 0 800m 4000m 4Gi 4Gi
omni_connector — 400m 8000m 8Gi 8Gi
omni_metadata — 400m 4000m 8Gi 8Gi
omni_metadata_schema_job — 400m 4000m 4Gi 4Gi
opensearch 1 800m 8000m 8Gi 8Gi
opensearch_templates_manager — 400m 2000m 2Gi 2Gi
otel_collector — 800m 4000m 8Gi 8Gi
portal 1 2000m 8000m 16Gi 16Gi
postgres — 2000m 8000m 8Gi 8Gi
postgres_db — 100m 1000m 2Gi 2Gi
prometheus — — — — —
ranger 1 8000m 16000m 22016Mi 22016Mi
redshift — 2000m 8000m 8Gi 8Gi
runtime_agent — 800m 8000m 8Gi 8Gi
runtime_manager — 400m 4000m 8Gi 8Gi
snowflake — 2000m 8000m 8Gi 8Gi
solr 3 8000m 16000m 39680Mi 39680Mi
solr_collection_manager — 200m 2000m 2Gi 2Gi
usersync — 2000m 8000m 8Gi 8Gi
zookeeper 3 2000m 4000m 5Gi 5Gi

Three services keep the same resources at every size

grafana, postgres_db and prometheus are unchanged across Small, Medium and Large. Their tiers were set from measured use rather than a multiplier, and nothing about a larger plane makes them need more. If you are comparing the tables and think you have misread a row for one of these, you have not.

Sidecar containers

Most services run one or two sidecars alongside the main container. Their resources are identical on every service that has them, and identical at all three sizes — deployment size does not touch them. They are listed once here rather than repeated under each service.

otelClient — the OpenTelemetry sidecar (26 services)
Property Small, Medium and Large
otelClient.resources.limits.cpu 400m
otelClient.resources.limits.memory 512Mi
otelClient.resources.requests.cpu 200m
otelClient.resources.requests.memory 256Mi

Runs on: ai_assets_collector, auditserver, bigquery, databricks_sql_analytics, databricks_unity_catalog, diagnostics_server, discovery_classifier, lakeformation, mssql, nebula_console, nebula_exporter, nebula_graphd, nebula_metad, nebula_storaged, nebula_studio, omni_connector, opensearch, portal, postgres, ranger, redshift, runtime_agent, runtime_manager, snowflake, solr, usersync.

diagClient — the diagnostics sidecar (10 services)
Property Small, Medium and Large
diagClient.resources.limits.cpu 400m
diagClient.resources.limits.memory 1024Mi
diagClient.resources.requests.cpu 200m
diagClient.resources.requests.memory 1024Mi

Runs on: bigquery, databricks_sql_analytics, databricks_unity_catalog, lakeformation, mssql, postgres, redshift, runtime_agent, snowflake, usersync.

Other properties

Settings that belong to a single service — 27 rows across 2 services. Bold marks a value that differs from Small.

prometheus — 4 properties
Property Small Medium Large
server.resources.limits.cpu 2 2 2
server.resources.limits.memory 4Gi 4Gi 4Gi
server.resources.requests.cpu 500m 500m 500m
server.resources.requests.memory 2Gi 2Gi 2Gi
solr_collection_manager — 23 properties
Property Small Medium Large
collections.admin_audits.replicationFactor 1 2 2
collections.policysync_audit.replicationFactor 1 2 2
collections.policysync_resource.replicationFactor 1 2 2
collections.privacera_alerts.replicationFactor 1 2 2
collections.privacera_audits.replicationFactor 1 2 2
collections.privacera_aws_audits.replicationFactor 1 2 2
collections.privacera_classification.replicationFactor 1 2 2
collections.privacera_classification_audit_logs.replicationFactor 1 2 2
collections.privacera_classification_audits.replicationFactor 1 2 2
collections.privacera_discovery_telemetry.replicationFactor 1 2 2
collections.privacera_emr_info.replicationFactor 1 2 2
collections.privacera_lineage.replicationFactor 1 2 2
collections.privacera_logs.replicationFactor 1 2 2
collections.privacera_metrics.replicationFactor 1 2 2
collections.privacera_offline_scan_cleanup.replicationFactor 1 2 2
collections.privacera_offline_scan_summary.replicationFactor 1 2 2
collections.privacera_peg_telemetry.replicationFactor 1 2 2
collections.privacera_resource.replicationFactor 1 2 2
collections.privacera_resource_meta_info.replicationFactor 1 2 2
collections.privacera_spark_events.replicationFactor 1 2 2
collections.privacera_telemetry.replicationFactor 1 2 2
collections.ranger_audits.replicationFactor 1 2 2
env.variables.SOLR_EXPECTED_NODES 1 3 3