Skip to content

Configuration reference

Every Helm value maps to an environment variable on the operator container (set by the chart’s Deployment template). You normally configure via Helm values; the env column is useful for local runs and for understanding the pod spec.

Helm valueEnv varDefaultMeaning
modeSTEPSCALE_MODErecommendrecommend (only emit ScalingRecommendations, never mutate a workload - even an approved one) or apply (also patch approved + licensed targets). Start in recommend; switch to apply once the advice is trusted.
watchNamespacesSTEPSCALE_WATCH_NAMESPACES"" (all)Comma-separated namespaces to watch. Empty watches all namespaces. Example: prod,api.
intervalSecondsSTEPSCALE_INTERVAL_SECONDS300Seconds between reconcile ticks. Also drives the leader-lease duration (3× this value).
replicaCount-1Operator replicas. 2+ is safe with leader election (only the leader mutates).
costPerReplicaUsdMonthlySTEPSCALE_COST_PER_REPLICA_USD_MONTHLY30Estimated monthly cost (USD) of one always-on replica, pricing the projected-savings estimates (see Usage). Set it to your real per-replica node share; must be > 0.
Helm valueEnv varDefaultMeaning
metrics.prometheusUrlSTEPSCALE_PROMETHEUS_URL""Prometheus base URL. Set it for real history backfill; empty falls back to slow HPA-status accumulation. Example: http://prometheus.monitoring.svc:9090.
metrics.windowDaysSTEPSCALE_METRICS_WINDOW_DAYS14Days of history to backfill per workload from Prometheus.
metrics.stepSecondsSTEPSCALE_METRICS_STEP_SECONDS300Sampling step (seconds) for Prometheus history queries.
metrics.promqlCpuSTEPSCALE_PROMQL_CPU(built-in)PromQL override for CPU utilization. Supports {ns} / {deploy} placeholders. Defaults to a kube-state-metrics + cAdvisor query.
metrics.promqlReplicasSTEPSCALE_PROMQL_REPLICAS(built-in)PromQL override for replica count.
metrics.promqlQueueSTEPSCALE_PROMQL_QUEUE(built-in)PromQL override for queue depth (queue-based workloads).
Helm valueEnv varDefaultMeaning
safety.probationWindowMinutesSTEPSCALE_PROBATION_WINDOW_MINUTES45Minutes an applied change stays on probation before the verify pass judges its health. Clamped to a minimum of 1.
safety.rollbackEnabledSTEPSCALE_ROLLBACK_ENABLEDtrueAuto-revert a probationary change when health degrades. When false, a degraded change is held in degraded for re-judgement instead of reverted.
safety.healthCpuMarginSTEPSCALE_HEALTH_CPU_MARGIN0.15Headroom over the target CPU fraction tolerated before a change is judged degraded.
Helm valueEnv varDefaultMeaning
leaderElection.enabledSTEPSCALE_ENABLE_LEADER_ELECTIONtrueElect a single leader so replicaCount: 2+ never double-applies; only the leader mutates.
leaderElection.leaseNameSTEPSCALE_LEASE_NAMEstepscale-autoscaler-leaderName of the coordination.k8s.io Lease.
leaderElection.leaseNamespaceSTEPSCALE_LEASE_NAMESPACE"" (release ns)Namespace for the Lease; empty uses the operator’s own namespace.

Off by default. Requires Prometheus history and a genuinely periodic workload; flat or random workloads are left reactive.

Helm valueEnv varDefaultMeaning
forecasting.enabledSTEPSCALE_ENABLE_FORECASTINGfalseForecast recurring peaks and pre-scale the floor ahead of them.
forecasting.minHistoryDaysSTEPSCALE_FORECAST_MIN_HISTORY_DAYS14Minimum days of history before a forecast is attempted (needs ≥ 2 weekly cycles).
forecasting.binMinutesSTEPSCALE_FORECAST_BIN_MINUTES60Seasonal grid bin size in minutes (168 hourly bins per week by default).
forecasting.quantileSTEPSCALE_FORECAST_QUANTILE0.95Quantile of per-bin demand used for the forecast (safety headroom). Clamped to [0, 1].
forecasting.periodicityThresholdSTEPSCALE_PERIODICITY_THRESHOLD0.3Minimum lag-24h/7d autocorrelation for a workload to count as periodic.
forecasting.prescaleLeadMinutesSTEPSCALE_PRESCALE_LEAD_MINUTES10Minutes of head start to raise the floor before each forecasted peak.

LLM-backed analysis is not licensed - it runs whenever a provider key is configured, on a Community install or a paid one. See Licensing.

Helm valueEnv varDefaultMeaning
llm.providerSTEPSCALE_LLM_PROVIDERopenaiopenai, anthropic, or none (deterministic rules-only).
llm.modelSTEPSCALE_LLM_MODELgpt-4o-miniModel name passed to the provider. Any model the provider exposes works (e.g. gpt-4o, claude-sonnet-4-6).
llm.baseUrlSTEPSCALE_LLM_BASE_URL"" (provider default)Override the API base URL - point at an in-cluster proxy, a local-model sidecar, or a mock.
llm.timeoutSecondsSTEPSCALE_LLM_TIMEOUT_SECONDS30Per-request timeout; a stalled model can’t stretch a reconcile pass (a timed-out call is logged and skipped, no recommendation written).
llm.concurrencySTEPSCALE_LLM_CONCURRENCY4Max concurrent LLM calls during the analysis pass (values below 1 are treated as 1).
llm.analysisBudgetSecondsSTEPSCALE_ANALYSIS_BUDGET_SECONDS"" (one reconcile interval)Time budget for the analysis pass’s LLM phase. Workloads not reached before it elapses are analyzed on the next tick (the deferred count is logged).
llm.apiKeyOPENAI_API_KEY (see note)""Your API key. Setting it makes the chart create a Secret.
llm.existingSecret-""Name of an existing Secret holding the key under apiKey, used instead of llm.apiKey.

See Licensing for the model and lifecycle. Values:

Helm valueEnv varDefaultMeaning
license.publicKeySTEPSCALE_LICENSE_PUBKEY(stepscale key, baked)base64-encoded 32-byte ed25519 public key that verifies the license offline. Pre-set to stepscale’s public key in the chart - you do not normally set this. Required to apply.
license.payload(via Secret)""The license JSON payload. Setting it (with signature) makes the chart create the license Secret.
license.signature(via Secret)""The detached ed25519 signature for the payload.
license.existingSecretSTEPSCALE_LICENSE_SECRET (derived)""Name of an existing Secret holding license + signature keys.
license.gracePeriodDaysSTEPSCALE_LICENSE_GRACE_DAYS14Days past expiry to keep applying before degrading.
Helm valueDefaultMeaning
image.repositoryghcr.io/stepscale/stepscale-autoscalerImage repository (override for a mirrored registry).
image.tag"" (chart appVersion)Image tag.
image.pullPolicyIfNotPresentImage pull policy.
serviceAccount.namestepscale-autoscalerService account the operator runs as.
resources.requestscpu: 50m, memory: 64MiResource requests.
resources.limitscpu: 250m, memory: 128MiResource limits.

The operator’s run mode is the mode value (§4.1):

  • recommend (default) - a pure advisor. It watches, analyzes, and writes ScalingRecommendations, but never mutates a workload, even one whose recommendation you have approved. This is the safe way to start a rollout: trust the advice before granting apply.
  • apply - additionally patches approved and licensed targets, then runs the probation → verify → auto-rollback safety net. Requires a valid license (see §4.7 / Licensing); without one the operator stays analysis-only regardless of mode.

Switch with --set mode=apply on a helm upgrade. See Operating for the recommend → apply promotion path.