Skip to Content
GuideConfiguration and Metrics ReferenceWorkload Autoscaler Helm Values

Workload Autoscaler Helm Values

Use exported CLOUDPILOT_WA_HELM_VALUES YAML to customize the Workload Autoscaler (WA) Helm installation. This input configures the WA controller, certificate job, metrics storage, and NodeAgent. To configure workload recommendations and updates, use WA policies and workloads.

Availability: the selected installation script must support CLOUDPILOT_WA_HELM_VALUES. Older generated installers ignore this variable. Confirm that your target release includes support before using it. For an upgrade sequence with intermediate versions, every WA installer in that sequence must support the input and the supplied fields. An older step can ignore the variable and reset custom settings before a later step reapplies them. Available chart fields and defaults also depend on each selected WA chart version.

Using saved Pre Run settings for a standalone WA installation also requires server support for prepending Pre Run to that command. Older servers omit it; export the YAML directly in your terminal before running the generated command instead.

Set values in Pre Run

For supported AWS, Azure, and GCP clusters, open Settings > Advanced Options > Pre Run Command in the Console, add an exported YAML string, and save. Then obtain and run the cluster’s installation or manual-upgrade command.

Standalone WA installation executes Pre Run before the installation command; it does not execute Post Run. Cluster manual upgrades retain their existing Pre Run and Post Run behavior.

For example, this partial configuration adds a toleration to the WA controller:

export CLOUDPILOT_WA_HELM_VALUES=' tolerations: - key: example.com/dedicated operator: Equal value: platform effect: NoSchedule '

On Azure, retain the installer-generated Spot toleration when replacing a list; see the Azure example. Setting only the root list does not configure the certificate job, metrics storage, or NodeAgent.

You can export the variable directly in the shell before running the generated command. This also applies to Universal clusters, whose Settings page currently does not expose the Pre Run editor. To read an existing file:

export CLOUDPILOT_WA_HELM_VALUES="$(cat ./wa-values.yaml)"

The file must exist in the command’s execution environment. Both release and development installers write the YAML literally to a temporary file. They do not expand ${VARIABLE} placeholders inside it. Export is required because the installer executes in a child shell; the single-quoted examples also prevent shell expansion.

Saving Pre Run alone does not update running resources. Keep the configuration for subsequent shell upgrades. Automatic upgrades do not execute Pre Run or apply newly edited values through these installation scripts; use the supported installation/manual-upgrade command to apply a change.

Empty and partial values

Only include fields you intend to change.

InputResult
Variable unset, an empty string, an empty YAML document, or {}No customer overrides. Target chart defaults and existing installer behavior apply.
A partial mapUnspecified map keys keep their target defaults or installer-generated settings.
A list, such as tolerationsReplaces that entire values list. Include every required entry.
tolerations: []Removes customer and Azure-generated root tolerations for the WA controller. It does not change other components’ lists.
nodeAgent.tolerations: []Clears the configurable NodeAgent list, while its built-in operator: Exists toleration remains.
nodeAgent.nodeSelector: {}Adds no selector keys; any explicit installer selector still wins.

The installers use --reset-values. They do not discover and retain arbitrary historical Helm overrides: omitted fields return to target defaults, subject to installer arguments. Existing storage-class and tracing-mount handling remain exceptions described under installer precedence.

Find all values for your version

The managed Helm release is workload-autoscaler, in namespace cloudpilot. Its chart version can differ from the Agent and NA chart versions. Use the target WA chart version selected by the generated installer (CLOUDPILOT_WORKLOAD_AUTOSCALER_CHART_VERSION), not the NA installer’s CLOUDPILOT_REBALANCE_VERSION.

Replace <target-wa-chart-version> before running:

helm repo add onboard https://onboard.cloudpilot.ai helm repo update onboard export WA_CHART_VERSION='<target-wa-chart-version>' helm show values onboard/workload-autoscaler --version "${WA_CHART_VERSION}" > wa-defaults.yaml

This is the complete defaults document for that chart version, not the complete effective installation configuration. The installer adds provider defaults and explicit arguments. Copy only the overrides you need.

Inspect the installed release separately:

helm list --namespace cloudpilot --filter '^workload-autoscaler$' helm get values workload-autoscaler --namespace cloudpilot --all --output yaml

Helm can accept unknown keys that no template reads. In the current chart, nodeAgent.nodeSelector is the only exposed node-selector field. Root nodeSelector, certGenerator.nodeSelector, and victoriaMetrics.nodeSelector do not select nodes. The NA controller uses a separate chart and input.

Complete value reference

These paths are relative to the YAML root. Image, tracing, and cold-memory fields require support in the target chart and component versions.

ValuesTypePurpose and limitations
replicaCountIntegerWA controller Deployment replica count; does not change metrics storage or NodeAgent replicas.
nameOverride, fullnameOverrideStringChart naming helpers and labels. Some managed component names are fixed; preserve the managed naming configuration.
serviceAccount.nameStringServiceAccount name shared by WA components.
serviceAccount.createBooleanSelects the naming helper’s fallback: generated name when true, default when false, unless a name is supplied. The current chart still renders a ServiceAccount when false.
serviceAccount.annotationsMapPresent in defaults, but the current ServiceAccount template does not render these annotations. Do not use it to configure cloud identity.
tolerationsListWA controller Pod tolerations.
certGenerator.tolerationsListWebhook certificate-generation Job Pod tolerations.
victoriaMetrics.tolerationsListMetrics StatefulSet Pod tolerations, covering both VictoriaMetrics and its kube-state-metrics sidecar.
victoriaMetrics.storageClassStringMetrics PVC storage class. Use the STORAGE_CLASS installation variable for new installations; do not change existing storage through custom YAML. See storage precedence.
prometheus.endpointStringPrometheus-compatible query endpoint used by the WA controller.
kubeStateMetrics.host, kubeStateMetrics.portString, integerSidecar listen address and port; the chart also configures the local scrape target from the port.
kubeStateMetrics.metricsPathStringPath used to scrape kube-state-metrics. Keep it consistent with the sidecar’s exposed metrics path.
kubeStateMetrics.extraArgsList of stringsAdditional kube-state-metrics command arguments.
nodeAgent.enableBooleanRender the NodeAgent DaemonSet. An explicit ENABLE_NODE_AGENT overrides this YAML value. The Console’s standalone installation command sets it to true; see NodeAgent enablement.
nodeAgent.nodeSelectorMap of stringsRestrict NodeAgent to nodes with matching labels. This does not select nodes for cluster-wide WA components.
nodeAgent.tolerationsListAdditional NodeAgent tolerations, appended to its built-in operator: Exists entry. It cannot remove that built-in entry.
nodeAgent.tracefs.enabledBooleanMount tracefs at /sys/kernel/tracing. Disable only when selected nodes expose tracing through debugfs; explicit or preserved installer mount settings override YAML.
nodeAgent.coldMemory.enabledBooleanEnable cold-memory collection on selected nodes with the required DAMON sysfs capabilities.
nodeAgent.coldMemory.sampleIntervalDuration stringSampling interval from 1us to 3s in whole microseconds; aggregation uses ten samples.
nodeAgent.coldMemory.maxContainersIntegerMaximum containers considered for cold-memory collection.

Each of the following image groups supports all four fields: repository, tag, digest, and pullPolicy.

Image groupField typesComponent
image.controllerStringWA controller.
image.certGeneratorStringWebhook certificate generator.
image.nodeAgentStringNodeAgent.
image.victoriaMetricsStringVictoriaMetrics storage and scraping.
image.kubeStateMetricsStringkube-state-metrics sidecar.

For example, image.controller.repository is the controller repository and image.controller.pullPolicy is its pull policy. Preserve the supported repository/tag/digest combination; changing a tag alone does not override a pinned digest. Release image-source selection can override these repositories.

Installer precedence

The effective order, from lowest to highest priority, is:

  1. Target chart defaults.
  2. Azure-generated values, when CLOUD_PROVIDER=azure.
  3. YAML exported as CLOUDPILOT_WA_HELM_VALUES.
  4. Explicit installer --set, --set-json, and release image-source arguments.
Existing installation inputEffect on YAML
ENABLE_NODE_AGENTOverrides nodeAgent.enable. The Console’s standalone installation command sets it to true, overriding earlier exports. See NodeAgent enablement.
NODE_AGENT_NODE_SELECTORRelease installer JSON input overrides the entire nodeAgent.nodeSelector map. The development helper does not currently consume this legacy variable.
NODE_AGENT_TRACEFS_ENABLEDExplicit true/false overrides nodeAgent.tracefs.enabled. The installer can also preserve an existing debugfs-only mount as false when this variable is unset.
Existing StatefulSet or STORAGE_CLASSCan supply an explicit victoriaMetrics.storageClass override. See below before configuring storage.
Release image-source selectionCan supply final repository overrides for the WA controller, certificate generator, NodeAgent, VictoriaMetrics, and kube-state-metrics images.

To change an existing debugfs-only NodeAgent installation to mount tracefs, use export NODE_AGENT_TRACEFS_ENABLED=true after verifying the selected nodes expose the required filesystem. A YAML true value alone does not override a preserved false installer argument. This retains existing installer behavior.

NodeAgent enablement

The Console’s standalone installation command includes export ENABLE_NODE_AGENT=true. To disable NodeAgent for that installation, change this assignment to export ENABLE_NODE_AGENT=false in the copied command. Setting false earlier in your terminal or in Pre Run does not override the unchanged command’s true assignment. The resulting explicit installer argument also takes precedence over nodeAgent.enable in customer YAML.

Storage class

For a new installation, set the supported installation variable before running the command:

export STORAGE_CLASS='example-wait-for-first-consumer'

The named class must exist and use volumeBindingMode: WaitForFirstConsumer. When STORAGE_CLASS is omitted, the installer checks the cluster’s default class. The StorageClass preflight does not read customer YAML, so setting only victoriaMetrics.storageClass can fail before Helm or validate a different class. Use STORAGE_CLASS for this choice and omit victoriaMetrics.storageClass from custom YAML.

For an existing metrics StatefulSet, its nonempty storage-class setting takes precedence over STORAGE_CLASS and YAML. If its template omits the field, avoid adding a new class through YAML: volume claim templates cannot be changed in place. Keep the existing storage configuration; this input is not a storage migration mechanism. SKIP_SC_VERIFICATION=true only skips the new-install binding-mode check and does not resolve storage-class conflicts.

Tolerations examples

WA has four independent toleration paths. The root tolerations list does not propagate to the certificate job, metrics StatefulSet, or NodeAgent. A toleration permits a matching taint; it does not select nodes.

AWS, GCP, and other non-Azure installations

This example replaces each configurable list with an illustrative dedicated-node toleration:

export CLOUDPILOT_WA_HELM_VALUES=' tolerations: - key: example.com/dedicated operator: Equal value: platform effect: NoSchedule certGenerator: tolerations: - key: example.com/dedicated operator: Equal value: platform effect: NoSchedule victoriaMetrics: tolerations: - key: example.com/dedicated operator: Equal value: platform effect: NoSchedule nodeAgent: tolerations: - key: example.com/dedicated operator: Equal value: platform effect: NoSchedule '

The three cluster-wide component lists default to empty on non-Azure installs. NodeAgent still has its built-in operator: Exists toleration, which tolerates all taints. Adding a narrower NodeAgent toleration does not narrow its placement. To limit NodeAgent coverage, use nodeAgent.nodeSelector and verify the selected nodes still cover the workloads whose runtime metrics you need.

Azure / AKS

The installer adds kubernetes.azure.com/scalesetpriority=spot:NoSchedule to all four lists. When replacing them, retain that entry wherever Spot eligibility is required:

export CLOUDPILOT_WA_HELM_VALUES=' tolerations: - key: kubernetes.azure.com/scalesetpriority operator: Equal value: spot effect: NoSchedule - key: example.com/dedicated operator: Equal value: platform effect: NoSchedule certGenerator: tolerations: - key: kubernetes.azure.com/scalesetpriority operator: Equal value: spot effect: NoSchedule - key: example.com/dedicated operator: Equal value: platform effect: NoSchedule victoriaMetrics: tolerations: - key: kubernetes.azure.com/scalesetpriority operator: Equal value: spot effect: NoSchedule - key: example.com/dedicated operator: Equal value: platform effect: NoSchedule nodeAgent: tolerations: - key: kubernetes.azure.com/scalesetpriority operator: Equal value: spot effect: NoSchedule - key: example.com/dedicated operator: Equal value: platform effect: NoSchedule '

The built-in NodeAgent toleration remains in addition to its configured list. Replace illustrative taints with those on your nodes and include every other required toleration when replacing a list.

Configure NA and WA independently

CLOUDPILOT_NA_HELM_VALUES configures only the NA controller chart. CLOUDPILOT_WA_HELM_VALUES configures only the WA chart. You can export both in one Pre Run Command; neither variable is automatically copied into the other chart.

For example, this partial configuration adds an AWS/Azure NA node selector and limits WA NodeAgent coverage independently, without replacing toleration lists:

export CLOUDPILOT_NA_HELM_VALUES=' nodeSelector: example.com/node-pool: platform ' export CLOUDPILOT_WA_HELM_VALUES=' nodeAgent: nodeSelector: example.com/runtime-metrics: "true" '

For GCP NA, put its selector under controller as described in Node Autoscaler Helm values. The WA NodeAgent path is the same across providers. Existing explicit selector arguments, if supplied, retain precedence. These selectors restrict placement; ensure eligible nodes exist before applying them.

Verify and recover

After installation or a shell upgrade, inspect both the Helm values and all WA components:

helm get values workload-autoscaler --namespace cloudpilot --all --output yaml kubectl get deployment cloudpilot-workload-autoscaler --namespace cloudpilot kubectl get statefulset cloudpilot-victoria-metrics --namespace cloudpilot kubectl get daemonset cloudpilot-node-agent --namespace cloudpilot kubectl get jobs,pods --namespace cloudpilot --output wide kubectl get events --namespace cloudpilot --sort-by=.metadata.creationTimestamp

The NodeAgent DaemonSet is absent when disabled. Helm runs the certificate Job as a post-install/post-upgrade hook; successful Jobs can be deleted by its hook policy. The installation wrapper’s existing readiness wait covers the WA controller Pods, not metrics storage or NodeAgent. Inspect those components and use kubectl describe pod <pod-name> --namespace cloudpilot for scheduling failures.

Malformed YAML fails in Helm, potentially after the installer has already applied CRDs. Correct the values and rerun the supported command. For Pending components, restore the last known working tolerations or selector and check storage binding. An empty custom input returns to target defaults plus installer behavior on the next run; it does not recover arbitrary earlier custom values.

Last updated on