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.
| Input | Result |
|---|---|
Variable unset, an empty string, an empty YAML document, or {} | No customer overrides. Target chart defaults and existing installer behavior apply. |
| A partial map | Unspecified map keys keep their target defaults or installer-generated settings. |
A list, such as tolerations | Replaces 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.yamlThis 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 yamlHelm 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.
| Values | Type | Purpose and limitations |
|---|---|---|
replicaCount | Integer | WA controller Deployment replica count; does not change metrics storage or NodeAgent replicas. |
nameOverride, fullnameOverride | String | Chart naming helpers and labels. Some managed component names are fixed; preserve the managed naming configuration. |
serviceAccount.name | String | ServiceAccount name shared by WA components. |
serviceAccount.create | Boolean | Selects 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.annotations | Map | Present in defaults, but the current ServiceAccount template does not render these annotations. Do not use it to configure cloud identity. |
tolerations | List | WA controller Pod tolerations. |
certGenerator.tolerations | List | Webhook certificate-generation Job Pod tolerations. |
victoriaMetrics.tolerations | List | Metrics StatefulSet Pod tolerations, covering both VictoriaMetrics and its kube-state-metrics sidecar. |
victoriaMetrics.storageClass | String | Metrics PVC storage class. Use the STORAGE_CLASS installation variable for new installations; do not change existing storage through custom YAML. See storage precedence. |
prometheus.endpoint | String | Prometheus-compatible query endpoint used by the WA controller. |
kubeStateMetrics.host, kubeStateMetrics.port | String, integer | Sidecar listen address and port; the chart also configures the local scrape target from the port. |
kubeStateMetrics.metricsPath | String | Path used to scrape kube-state-metrics. Keep it consistent with the sidecar’s exposed metrics path. |
kubeStateMetrics.extraArgs | List of strings | Additional kube-state-metrics command arguments. |
nodeAgent.enable | Boolean | Render 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.nodeSelector | Map of strings | Restrict NodeAgent to nodes with matching labels. This does not select nodes for cluster-wide WA components. |
nodeAgent.tolerations | List | Additional NodeAgent tolerations, appended to its built-in operator: Exists entry. It cannot remove that built-in entry. |
nodeAgent.tracefs.enabled | Boolean | Mount tracefs at /sys/kernel/tracing. Disable only when selected nodes expose tracing through debugfs; explicit or preserved installer mount settings override YAML. |
nodeAgent.coldMemory.enabled | Boolean | Enable cold-memory collection on selected nodes with the required DAMON sysfs capabilities. |
nodeAgent.coldMemory.sampleInterval | Duration string | Sampling interval from 1us to 3s in whole microseconds; aggregation uses ten samples. |
nodeAgent.coldMemory.maxContainers | Integer | Maximum containers considered for cold-memory collection. |
Each of the following image groups supports all four fields: repository, tag,
digest, and pullPolicy.
| Image group | Field types | Component |
|---|---|---|
image.controller | String | WA controller. |
image.certGenerator | String | Webhook certificate generator. |
image.nodeAgent | String | NodeAgent. |
image.victoriaMetrics | String | VictoriaMetrics storage and scraping. |
image.kubeStateMetrics | String | kube-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:
- Target chart defaults.
- Azure-generated values, when
CLOUD_PROVIDER=azure. - YAML exported as
CLOUDPILOT_WA_HELM_VALUES. - Explicit installer
--set,--set-json, and release image-source arguments.
| Existing installation input | Effect on YAML |
|---|---|
ENABLE_NODE_AGENT | Overrides nodeAgent.enable. The Console’s standalone installation command sets it to true, overriding earlier exports. See NodeAgent enablement. |
NODE_AGENT_NODE_SELECTOR | Release installer JSON input overrides the entire nodeAgent.nodeSelector map. The development helper does not currently consume this legacy variable. |
NODE_AGENT_TRACEFS_ENABLED | Explicit 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_CLASS | Can supply an explicit victoriaMetrics.storageClass override. See below before configuring storage. |
| Release image-source selection | Can 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.creationTimestampThe 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.