Vertical Pod Autoscaler¶
Overview¶
Kubernetes Vertical Pod Autoscaler (VPA) automatically adjusts CPU and memory requests for pods based on observed usage. DataRobot supports VPA across all workload types (Deployments, StatefulSets, DaemonSets, Jobs, and CronJobs).
VPA is disabled by default. When enabled, DataRobot operates VPA in Initial mode, which sets resource requests once at pod creation and never mutates running pods.
Prerequisites¶
The VPA operator must be installed on your Kubernetes cluster before enabling this feature. Refer to the VPA installation documentation for instructions.
Enable VPA¶
Set the following in your values.yaml to enable VPA for all DataRobot workloads:
global:
vpa:
enabled: true
Update mode¶
DataRobot uses VPA Initial mode exclusively. In this mode, VPA sets resource requests when a pod is first scheduled. It does not evict or modify running pods.
Using other VPA update modes (such as Recreate or Auto) is not supported.
HPA coexistence¶
Many DataRobot services run with Horizontal Pod Autoscaler (HPA) enabled. The Kubernetes autoscaler documentation states that VPA should not be used with HPA on the same resource metric (CPU or memory). However, Initial mode is safe in practice because:
- Resource requests are fixed after pod creation—HPA sees a stable utilization denominator.
- The feedback loop (i.e., VPA changes requests > HPA reacts > VPA reacts again) cannot occur because VPA never modifies live pods.
Warning
Enabling VPA modes other than Initial when HPA is active can cause conflicting scaling behavior and is not supported.
Resource bounds¶
VPA bounds prevent recommendations from going below a minimum or above a maximum. DataRobot automatically derives bounds from each container's configured resources:
| Bound | Default |
|---|---|
minAllowed |
0.5 × resource requests. |
maxAllowed |
Resource limits. |
You can override these globally in values.yaml:
global:
vpa:
enabled: true
minAllowed:
cpu: 100m
memory: 128Mi
maxAllowed:
cpu: 4
memory: 8Gi
Global bounds apply to all workloads. To override bounds for a specific service, set vpa.minAllowed and vpa.maxAllowed under that service's key:
mongodb:
vpa:
minAllowed:
cpu: "185m"
memory: "1513Mi"
maxAllowed:
cpu: "6000m"
memory: "24Gi"
Per-service values take precedence over the global defaults.