Helm Values & Environment Variables
Reference for all environment variables and Helm values used by Wave.
Core Configuration Parameters
Essential Environment Variables
| Variable | Description | Default | Required |
|---|---|---|---|
WA_LICENSE | Wave 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_LEVEL | Logging level (info, debug, trace) | info | No |
WA_API_SERVER_HOST | API server host address | 0.0.0.0 | No |
WA_API_SERVER_PORT | API server port | 3024 | No |
WA_KUBELET_METRICS_ENABLED | Enable kubelet metrics collection | true | No |
WA_CONFIG_MODE | Operation 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. | console | No |
License & Registry Credentials
License and image-pull credentials are set as Helm values, not environment variables:
| Value | Purpose | Default |
|---|---|---|
license.key | Wave license key, inline. | "" |
license.existingSecret | Name of a pre-created Secret holding the license (preferred for production; takes precedence over license.key). | "" |
license.existingSecretKey | Key within existingSecret that holds the license. | WA_LICENSE |
ghcr.enabled / ghcr.dockerconfigjson | Create an image-pull Secret for ghcr.io/stclab-inc/* (base64 dockerconfigjson). | false / "" |
redhat.enabled / redhat.dockerconfigjson | Create an image-pull Secret for registry.connect.redhat.com (Red Hat certified images). | false / "" |
crds.install | Install the 14 wavek8s.com CRDs with the chart. Set false when a cluster admin or ArgoCD manages them out-of-band. | true |
Data Management
| Variable | Description | Default |
|---|---|---|
WA_DATA_SAVE_DAYS | Data retention period (days) | 14 |
WA_NODE_SNAPSHOT_DATA_SAVE_DAYS | Node snapshot retention (days) | 90 |
WA_DATA_REMOVE_CRON_EXPRESSION | Data cleanup schedule | 0 0 0 * * * |
WA_DB_DIRECTORY | Database directory path | data |
WA_METRICS_DIRECTORY | Metrics storage path | data/metrics |
WA_LOGS_DIRECTORY | Logs storage path | data/logs |
Worker Intervals
| Variable | Description | Default (seconds) |
|---|---|---|
WA_K8S_DEPLOYMENT_WORKER_INTERVAL_SECONDS | Deployment sync interval | 10 |
WA_K8S_STATEFULSET_WORKER_INTERVAL_SECONDS | StatefulSet sync interval | 10 |
WA_K8S_DAEMONSET_WORKER_INTERVAL_SECONDS | DaemonSet sync interval | 10 |
WA_AWS_ASG_WORKER_INTERVAL_SECONDS | AWS Auto Scaling Group sync | 10 |
WA_AWS_ECS_WORKER_INTERVAL_SECONDS | AWS ECS sync interval | 10 |
WA_OPENSTACK_IG_WORKER_INTERVAL_SECONDS | OpenStack instance group sync | 30 |
Monitoring & Metrics
| Variable | Description | Default |
|---|---|---|
WA_STATS_CRON_EXPRESSION | Statistics collection schedule | 0 0 * * * * |
WA_CLUSTER_STATUS_CRON_EXPRESSION | Cluster status check schedule | 0 */5 * * * * |
WA_K8S_WORKLOADS_DISABLED_CRON_EXPRESSION | Disabled workload check | 0 */5 * * * * |
WA_PROMETHEUS_EXPORTER_EXPIRY_CHECK_INTERVAL_SECONDS | Prometheus exporter check | 0 0 * * * * |
WA_PROMETHEUS_EXPORTER_EXPIRATION_SECONDS | Prometheus metrics expiration | 10800 (3 hours) |
Forecast Intervals
| Variable | Description | Default |
|---|---|---|
WA_CLUSTER_STATUS_FORECAST_ENABLED | Enable Cluster Resource Forecast | true |
WA_CLUSTER_STATUS_FORECAST_HORIZON_DAYS | How far ahead the cluster forecast projects (days) | 7 |
WA_CLUSTER_STATUS_FORECAST_INTERVAL_HOURS | How often the cluster forecast API is called (hours). Wave 3.4.5+. | 24 |
WA_PV_FORECAST_HORIZON_DAYS | How far ahead the PV capacity forecast projects (days) | 7 |
WA_PV_CAPACITY_FORECAST_TASK_INTERVAL_MINUTES | How 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
| Variable | Description | Default |
|---|---|---|
WA_PLATFORM_K8S | Enable Kubernetes platform | true |
WA_PLATFORM_AWS | Enable AWS platform | true |
WA_PLATFORM_OPENSTACK | Enable OpenStack platform | true |
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.
| Variable | Description | Default |
|---|---|---|
WA_AUTOPILOT_ENABLED | Autopilot scaling task | true |
WA_SMART_SIZING_ENABLED | Smart Sizing task | true |
WA_WAVE_FLOW_ENABLED | Wave Flow (traffic protection) task | true |
WA_NF_ENABLED | NetFUNNEL integration task | true |
WA_DIAGNOSIS_ENABLED | Wave Diagnosis group gate. Turning this off disables every Diagnosis sub-task below, regardless of their own flags. | true |
WA_MEMORY_ANOMALY_DETECTION_ENABLED | Memory leak detection and OOM-kill risk (Diagnosis sub-task) | true |
WA_POD_CONTAINER_FAILURES_ENABLED | Pod/Container Failures detection (Diagnosis sub-task) | true |
WA_POD_SCHEDULING_DELAY_ENABLED | Pod scheduling delay detection (Diagnosis sub-task) | true |
WA_IDLE_NODE_DETECTION_ENABLED | Idle node detection (Diagnosis sub-task) | true |
WA_PV_UNUSED_DETECTION_ENABLED | Unused PV detection (Diagnosis sub-task) | true |
WA_PV_FORECAST_ENABLED | PV capacity forecasting (Diagnosis sub-task) | true |
WA_PVC_AUTO_EXPANSION_ENABLED | PVC auto-expansion. Standalone — not gated by WA_DIAGNOSIS_ENABLED. | true |
WA_KARPENTER_ENABLED | Wave Karpenter features | false |
WA_GPU_ENABLED | Wave GPU group gate | false |
WA_GPU_COST_TRACKING_ENABLED | GPU cost tracking (requires WA_GPU_ENABLED=true) | false |
WA_GPU_WASTE_DETECTION_ENABLED | GPU 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
| Variable | Description | Default |
|---|---|---|
WA_WAVE_SHAPER_MODULE_URL | Wave Shaper module image | public.ecr.aws/wave-autoscale/wave-shaper:0.1.3 |
WA_EVENT_QUEUE_CHANNEL_CAPACITY | Event queue capacity | 64 |
WA_METRIC_STORE_SAVE_BATCH_WORKER_CNT | Metric batch workers | 50 |
WA_AWS_METERING_CRON_EXPRESSION | AWS metering schedule | 0 59 * * * * |
WA_WATCH_DURATION_SECONDS | Watch duration for updates | 5 |
Component Configuration
Autopilot Configuration
| Variable | Description | Default |
|---|---|---|
WA_AUTOPILOT_SERVER_HOST | Autopilot server host | localhost |
WA_AUTOPILOT_SERVER_PORT | Autopilot server port | 3026 |
OpenStack Configuration
| Variable | Description | Default |
|---|---|---|
WA_OPENSTACK_SERVER_HOST | OpenStack server host | localhost |
WA_OPENSTACK_SERVER_PORT | OpenStack server port | 3027 |
Karpenter Configuration
Karpenter features require an Amazon EKS cluster with Karpenter installed. The webhook configuration is only needed for Spot Workload Placement.
Karpenter Settings
| Parameter | Description | Default |
|---|---|---|
karpenter.enabled | Enable Karpenter ClusterRole + Spot Placement MutatingWebhook | false |
Webhook TLS Settings
| Variable / Parameter | Description | Default |
|---|---|---|
webhooks.tls.enabled (WA_K8S_WEBHOOK_TLS_ENABLED) | Enable/disable webhook TLS | false |
webhooks.tls.port (WA_WEBHOOK_PORT) | Webhook server port | 9443 |
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.enabled | Auto-create cert-manager Issuer/Certificate | true |
webhooks.tls.certManager.duration | Certificate validity duration | 8760h (1 year) |
webhooks.tls.certManager.renewBefore | Renew certificate before expiry | 720h (30 days) |
webhooks.tls.secretName | Kubernetes secret name for TLS cert | wave-autoscale-webhook-tls |
Example Configuration
# 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-creationStorage 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 DaemonSetAWS EKS with Fargate
spec:
core:
nodeSelector:
eks.amazonaws.com/compute-type: fargateCluster Permissions
Standard Configuration
clusterRole:
readOnly: false # Full automation capabilities
istioAdmin: false # Set true for Istio service mesh integrationRead-Only Mode
clusterRole:
readOnly: true # Limited to monitoring only
istioAdmin: falseResource Sizing Guidelines
Wave resource requirements scale with cluster size (~1% of total cluster capacity):
| Cluster Size | Target Workloads | WA Core | Intelligence | Web Console | Total Resources | Storage |
|---|---|---|---|---|---|---|
| 2000 vCPUs | 200 workloads | 6 vCPU / 6GB | 9 vCPU / 9GB | 0.3 vCPU / 300MB | 15.3 vCPU / 15.3GB | 40GB |
| 1000 vCPUs | 100 workloads | 3 vCPU / 3GB | 6 vCPU / 6GB | 0.3 vCPU / 300MB | 9.3 vCPU / 9.3GB | 20GB |
| 500 vCPUs | 50 workloads | 2 vCPU / 2GB | 4 vCPU / 4GB | 0.3 vCPU / 300MB | 6.3 vCPU / 6.3GB | 10GB |
| 300 vCPUs | 30 workloads | 1.5 vCPU / 1GB | 2 vCPU / 2GB | 0.3 vCPU / 300MB | 3.8 vCPU / 3.3GB | 6GB |
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: trueValidation and Troubleshooting
Pre-Installation Checklist
- Verify Kubernetes version compatibility (≥ 1.26)
- Ensure sufficient cluster resources based on sizing guidelines
- Validate license key availability
- Confirm storage class availability
- Check network policies allow component communication
Common Configuration Issues
License Validation
kubectl logs -n wave-autoscale wave-autoscale-0 -c core | grep LICENSEMetrics Collection
# Verify agent is collecting metrics
kubectl logs -n wave-autoscale -l app=wave-autoscale-agent | grep metricsStorage Issues
# Check PVC status
kubectl get pvc -n wave-autoscalePerformance Tuning
High-Load Clusters (>1000 vCPUs)
- Increase
WA_METRIC_STORE_SAVE_BATCH_WORKER_CNTto100 - Set
WA_EVENT_QUEUE_CHANNEL_CAPACITYto128 - Adjust worker intervals based on workload volatility
Limited Resources
- Set
WA_DATA_SAVE_DAYSto7to 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:
| Variable | Default | Description |
|---|---|---|
WA_GPU_ENABLED | false | Master flag for Wave GPU features. |
WA_GPU_COST_TRACKING_ENABLED | false | Enable GPU cost tracking task. |
WA_GPU_WASTE_DETECTION_ENABLED | false | Enable GPU waste detection task. |
WA_GPU_COST_TRACKING_TASK_INTERVAL_MINUTES | 10 | Cost tracking task interval (minutes). |
WA_GPU_WASTE_DETECTION_TASK_INTERVAL_MINUTES | 10 | Waste detection task interval (minutes). |
See the Wave GPU section for feature details.