Docs
Helm Values & Environment Variables

Helm Values & Environment Variables

Reference for all environment variables and Helm values used by Wave.

Core Configuration Parameters

Essential Environment Variables

VariableDescriptionDefaultRequired
WA_LICENSEWave license key. Injected into Core by the chart from the license Secret; set it via the license.key or license.existingSecret Helm value (below), not as a hand-written env var.-Yes (via Helm value)
WA_LOG_LEVELLogging level (info, debug, trace)infoNo
WA_API_SERVER_HOSTAPI server host address0.0.0.0No
WA_API_SERVER_PORTAPI server port3024No
WA_KUBELET_METRICS_ENABLEDEnable kubelet metrics collectiontrueNo
WA_CONFIG_MODEOperation mode. console (default): configure via the web console. crd: operational settings are managed as Custom Resources and the console becomes read-only; see CRD Mode.consoleNo

License & Registry Credentials

License and image-pull credentials are set as Helm values, not environment variables:

ValuePurposeDefault
license.keyWave license key, inline.""
license.existingSecretName of a pre-created Secret holding the license (preferred for production; takes precedence over license.key).""
license.existingSecretKeyKey within existingSecret that holds the license.WA_LICENSE
ghcr.enabled / ghcr.dockerconfigjsonCreate an image-pull Secret for ghcr.io/stclab-inc/* (base64 dockerconfigjson).false / ""
redhat.enabled / redhat.dockerconfigjsonCreate an image-pull Secret for registry.connect.redhat.com (Red Hat certified images).false / ""
crds.installInstall the 14 wavek8s.com CRDs with the chart. Set false when a cluster admin or ArgoCD manages them out-of-band.true

Data Management

VariableDescriptionDefault
WA_DATA_SAVE_DAYSData retention period (days)14
WA_NODE_SNAPSHOT_DATA_SAVE_DAYSNode snapshot retention (days)90
WA_DATA_REMOVE_CRON_EXPRESSIONData cleanup schedule0 0 0 * * *
WA_DB_DIRECTORYDatabase directory pathdata
WA_METRICS_DIRECTORYMetrics storage pathdata/metrics
WA_LOGS_DIRECTORYLogs storage pathdata/logs

Worker Intervals

VariableDescriptionDefault (seconds)
WA_K8S_DEPLOYMENT_WORKER_INTERVAL_SECONDSDeployment sync interval10
WA_K8S_STATEFULSET_WORKER_INTERVAL_SECONDSStatefulSet sync interval10
WA_K8S_DAEMONSET_WORKER_INTERVAL_SECONDSDaemonSet sync interval10
WA_AWS_ASG_WORKER_INTERVAL_SECONDSAWS Auto Scaling Group sync10
WA_AWS_ECS_WORKER_INTERVAL_SECONDSAWS ECS sync interval10
WA_OPENSTACK_IG_WORKER_INTERVAL_SECONDSOpenStack instance group sync30

Monitoring & Metrics

VariableDescriptionDefault
WA_STATS_CRON_EXPRESSIONStatistics collection schedule0 0 * * * *
WA_CLUSTER_STATUS_CRON_EXPRESSIONCluster status check schedule0 */5 * * * *
WA_K8S_WORKLOADS_DISABLED_CRON_EXPRESSIONDisabled workload check0 */5 * * * *
WA_PROMETHEUS_EXPORTER_EXPIRY_CHECK_INTERVAL_SECONDSPrometheus exporter check0 0 * * * *
WA_PROMETHEUS_EXPORTER_EXPIRATION_SECONDSPrometheus metrics expiration10800 (3 hours)

Forecast Intervals

VariableDescriptionDefault
WA_CLUSTER_STATUS_FORECAST_ENABLEDEnable Cluster Resource Forecasttrue
WA_CLUSTER_STATUS_FORECAST_HORIZON_DAYSHow far ahead the cluster forecast projects (days)7
WA_CLUSTER_STATUS_FORECAST_INTERVAL_HOURSHow often the cluster forecast API is called (hours). Wave 3.4.5+.24
WA_PV_FORECAST_HORIZON_DAYSHow far ahead the PV capacity forecast projects (days)7
WA_PV_CAPACITY_FORECAST_TASK_INTERVAL_MINUTESHow often the PV capacity forecast task runs (minutes)1440 (24 hours)
⚠️

Two forecast intervals changed in Wave 3.4.5. The cluster-status cron collects data every 5 minutes and previously called the forecast API on every tick, which could saturate the intelligence service and time out Autopilot predictions. Forecast calls are now gated to WA_CLUSTER_STATUS_FORECAST_INTERVAL_HOURS (default 24 h), and the PV capacity forecast task interval default was raised from 10 minutes to 1440 minutes. Forecasts are daily-horizon projections, so a 24-hour cadence loses no accuracy. Lower these only if you have a specific reason and headroom on the intelligence service.

Platform Features

VariableDescriptionDefault
WA_PLATFORM_K8SEnable Kubernetes platformtrue
WA_PLATFORM_AWSEnable AWS platformtrue
WA_PLATFORM_OPENSTACKEnable OpenStack platformtrue

Feature Toggles

Wave 3.4.0+. Each background task can be turned off at deploy time. Turning a task off stops the task from starting at all — Core does not collect its data or run its detector, so there is no CPU, memory, or storage footprint for that feature.

VariableDescriptionDefault
WA_AUTOPILOT_ENABLEDAutopilot scaling tasktrue
WA_SMART_SIZING_ENABLEDSmart Sizing tasktrue
WA_WAVE_FLOW_ENABLEDWave Flow (traffic protection) tasktrue
WA_NF_ENABLEDNetFUNNEL integration tasktrue
WA_DIAGNOSIS_ENABLEDWave Diagnosis group gate. Turning this off disables every Diagnosis sub-task below, regardless of their own flags.true
WA_MEMORY_ANOMALY_DETECTION_ENABLEDMemory leak detection and OOM-kill risk (Diagnosis sub-task)true
WA_POD_CONTAINER_FAILURES_ENABLEDPod/Container Failures detection (Diagnosis sub-task)true
WA_POD_SCHEDULING_DELAY_ENABLEDPod scheduling delay detection (Diagnosis sub-task)true
WA_IDLE_NODE_DETECTION_ENABLEDIdle node detection (Diagnosis sub-task)true
WA_PV_UNUSED_DETECTION_ENABLEDUnused PV detection (Diagnosis sub-task)true
WA_PV_FORECAST_ENABLEDPV capacity forecasting (Diagnosis sub-task)true
WA_PVC_AUTO_EXPANSION_ENABLEDPVC auto-expansion. Standalone — not gated by WA_DIAGNOSIS_ENABLED.true
WA_KARPENTER_ENABLEDWave Karpenter featuresfalse
WA_GPU_ENABLEDWave GPU group gatefalse
WA_GPU_COST_TRACKING_ENABLEDGPU cost tracking (requires WA_GPU_ENABLED=true)false
WA_GPU_WASTE_DETECTION_ENABLEDGPU waste detection (requires WA_GPU_ENABLED=true)false

Group gates are AND-ed with the sub-task flag. A Diagnosis sub-task runs only when WA_DIAGNOSIS_ENABLED and its own flag are true. The same applies to the GPU group. WA_PVC_AUTO_EXPANSION_ENABLED is the exception — it is a standalone gate because its UI lives on the storage PVC tab rather than under Diagnosis.

How a disabled feature appears in the console. The menu entry stays visible and the page renders a panel telling you which environment variable to set to turn the feature back on. Wave Karpenter and Wave GPU behave differently: when off, their menu entries are hidden entirely.

WA_NF_ENABLED is folded together with the license: NetFUNNEL shows as available only when the license grants it and the environment variable is true. Setting it to false turns NetFUNNEL off even on a licensed cluster.

Advanced Features

VariableDescriptionDefault
WA_WAVE_SHAPER_MODULE_URLWave Shaper module imagepublic.ecr.aws/wave-autoscale/wave-shaper:0.1.3
WA_EVENT_QUEUE_CHANNEL_CAPACITYEvent queue capacity64
WA_METRIC_STORE_SAVE_BATCH_WORKER_CNTMetric batch workers50
WA_AWS_METERING_CRON_EXPRESSIONAWS metering schedule0 59 * * * *
WA_WATCH_DURATION_SECONDSWatch duration for updates5

Component Configuration

Autopilot Configuration

VariableDescriptionDefault
WA_AUTOPILOT_SERVER_HOSTAutopilot server hostlocalhost
WA_AUTOPILOT_SERVER_PORTAutopilot server port3026

OpenStack Configuration

VariableDescriptionDefault
WA_OPENSTACK_SERVER_HOSTOpenStack server hostlocalhost
WA_OPENSTACK_SERVER_PORTOpenStack server port3027

Karpenter Configuration

Karpenter features require an Amazon EKS cluster with Karpenter installed. The webhook configuration is only needed for Spot Workload Placement.

Karpenter Settings

ParameterDescriptionDefault
karpenter.enabledEnable Karpenter ClusterRole + Spot Placement MutatingWebhookfalse

Webhook TLS Settings

Variable / ParameterDescriptionDefault
webhooks.tls.enabled (WA_K8S_WEBHOOK_TLS_ENABLED)Enable/disable webhook TLSfalse
webhooks.tls.port (WA_WEBHOOK_PORT)Webhook server port9443
webhooks.tls.certFile (WA_K8S_WEBHOOK_TLS_CERT_FILE)TLS certificate file path/etc/tls/tls.crt
webhooks.tls.keyFile (WA_K8S_WEBHOOK_TLS_KEY_FILE)TLS private key file path/etc/tls/tls.key
webhooks.tls.certManager.enabledAuto-create cert-manager Issuer/Certificatetrue
webhooks.tls.certManager.durationCertificate validity duration8760h (1 year)
webhooks.tls.certManager.renewBeforeRenew certificate before expiry720h (30 days)
webhooks.tls.secretNameKubernetes secret name for TLS certwave-autoscale-webhook-tls

Example Configuration

wa-values.yaml
# Karpenter Integration (EKS only)
karpenter:
  enabled: true
 
# Webhook TLS (required for Spot Workload Placement)
webhooks:
  tls:
    enabled: true
    port: 9443
    certManager:
      enabled: true
      duration: "8760h"
      renewBefore: "720h"
    secretName: "wave-autoscale-webhook-tls"

See the Karpenter Getting Started guide for detailed setup instructions.

Storage Configuration

Persistent Volume Configuration

spec:
  storageClassName: "gp3"  # AWS EKS example
  existingPvcName: ""       # Use existing PVC or leave empty for auto-creation

Storage Class Examples by Platform

  • AWS EKS: gp3, gp2, io1
  • GKE: standard, standard-rwo, premium-rwo
  • Azure AKS: managed-premium, azurefile
  • On-premises: local-path, nfs, ceph-rbd

Platform-Specific Configuration

Red Hat OpenShift

openshift:
  waveAutoscale:
    scc:
      create: true  # Create custom SCC for core components
  waveAutoscaleAgent:
    scc:
      create: true  # Create custom SCC for agent DaemonSet

AWS EKS with Fargate

spec:
  core:
    nodeSelector:
      eks.amazonaws.com/compute-type: fargate

Cluster Permissions

Standard Configuration

clusterRole:
  readOnly: false    # Full automation capabilities
  istioAdmin: false  # Set true for Istio service mesh integration

Read-Only Mode

clusterRole:
  readOnly: true     # Limited to monitoring only
  istioAdmin: false

Resource Sizing Guidelines

Wave resource requirements scale with cluster size (~1% of total cluster capacity):

Cluster SizeTarget WorkloadsWA CoreIntelligenceWeb ConsoleTotal ResourcesStorage
2000 vCPUs200 workloads6 vCPU / 6GB9 vCPU / 9GB0.3 vCPU / 300MB15.3 vCPU / 15.3GB40GB
1000 vCPUs100 workloads3 vCPU / 3GB6 vCPU / 6GB0.3 vCPU / 300MB9.3 vCPU / 9.3GB20GB
500 vCPUs50 workloads2 vCPU / 2GB4 vCPU / 4GB0.3 vCPU / 300MB6.3 vCPU / 6.3GB10GB
300 vCPUs30 workloads1.5 vCPU / 1GB2 vCPU / 2GB0.3 vCPU / 300MB3.8 vCPU / 3.3GB6GB

Note: WA Metrics Agent requires 0.1 vCPU / 50MB per node (deployed as DaemonSet).

Complete Configuration Example

Most installs only need a license, image-pull credentials, and a StorageClass; the published chart already sets image repositories, tags, and default resources. Override per-component values only when you need to.

# Image-pull secret for ghcr.io/stclab-inc/* (provided by the Wave team)
ghcr:
  enabled: true
  dockerconfigjson: "eyJhdXRocyI6eyJnaGNyLmlvIjp7...}}"
 
# License: inline, or reference a pre-created Secret via license.existingSecret
license:
  key: "YOUR-LICENSE-KEY-HERE"
 
# Install the 14 wavek8s.com CRDs with the chart (default true)
crds:
  install: true
 
# Cluster permissions
clusterRole:
  readOnly: false
  istioAdmin: true
 
# Per-component overrides (optional; the chart ships sensible defaults)
spec:
  core:
    image:
      repository: ghcr.io/stclab-inc/wave-autoscale-core
      tag: <version>
    env:
      - name: WA_LOG_LEVEL
        value: "info"
      - name: WA_DATA_SAVE_DAYS
        value: "30"
    resources:
      requests:
        cpu: "1500m"
        memory: "3Gi"
      limits:
        cpu: "1500m"
        memory: "3Gi"
 
  webConsole:
    image:
      repository: ghcr.io/stclab-inc/wave-autoscale-web-console
      tag: <version>
    resources:
      requests:
        cpu: "100m"
        memory: "100Mi"
 
  intelligence:
    image:
      repository: ghcr.io/stclab-inc/wave-autoscale-intelligence
      tag: <version>
    resources:
      requests:
        cpu: "500m"
        memory: "1Gi"
 
  agent:
    image:
      repository: ghcr.io/stclab-inc/wave-autoscale-agent
      tag: <version>
    resources:
      requests:
        cpu: "100m"
        memory: "50Mi"
 
  cadvisor:
    image:
      repository: gcr.io/cadvisor/cadvisor
      tag: v0.52.1
    resources:
      requests:
        cpu: "100m"
        memory: "200Mi"
 
  # Storage configuration
  storageClassName: "gp3"
  existingPvcName: ""
 
# Platform-specific settings (uncomment as needed)
# openshift:
#   waveAutoscale:
#     scc:
#       create: true
#   waveAutoscaleAgent:
#     scc:
#       create: true

Validation and Troubleshooting

Pre-Installation Checklist

  1. Verify Kubernetes version compatibility (≥ 1.26)
  2. Ensure sufficient cluster resources based on sizing guidelines
  3. Validate license key availability
  4. Confirm storage class availability
  5. Check network policies allow component communication

Common Configuration Issues

License Validation

kubectl logs -n wave-autoscale wave-autoscale-0 -c core | grep LICENSE

Metrics Collection

# Verify agent is collecting metrics
kubectl logs -n wave-autoscale -l app=wave-autoscale-agent | grep metrics

Storage Issues

# Check PVC status
kubectl get pvc -n wave-autoscale

Performance Tuning

High-Load Clusters (>1000 vCPUs)

  • Increase WA_METRIC_STORE_SAVE_BATCH_WORKER_CNT to 100
  • Set WA_EVENT_QUEUE_CHANNEL_CAPACITY to 128
  • Adjust worker intervals based on workload volatility

Limited Resources

  • Set WA_DATA_SAVE_DAYS to 7 to reduce storage requirements
  • Increase worker intervals to reduce CPU usage
  • Consider read-only mode for monitoring-only deployments

Security Considerations

Network Policies

Ensure proper network policies allow:

  • Core component communication on ports 3024-3027
  • Agent communication with kubelet (port 10250)
  • External access to Web Console (port 3025) if required

RBAC Configuration

Wave requires specific RBAC permissions:

  • Read access to all Kubernetes resources
  • Write access to workload resources (Deployments, StatefulSets, etc.)
  • Metrics collection from nodes and pods

GPU Features (preview)

Wave's GPU features are gated behind feature flags during the preview period. Enable them via these env vars:

VariableDefaultDescription
WA_GPU_ENABLEDfalseMaster flag for Wave GPU features.
WA_GPU_COST_TRACKING_ENABLEDfalseEnable GPU cost tracking task.
WA_GPU_WASTE_DETECTION_ENABLEDfalseEnable GPU waste detection task.
WA_GPU_COST_TRACKING_TASK_INTERVAL_MINUTES10Cost tracking task interval (minutes).
WA_GPU_WASTE_DETECTION_TASK_INTERVAL_MINUTES10Waste detection task interval (minutes).

See the Wave GPU section for feature details.