Migrate from v2 to v3
4 minute read
With v3, the separate stormforge-agent and stormforge-applier Helm charts are combined into a single stormforge chart.
Prerequisites
Before you begin, ensure you have:
- The StormForge CLI installed
- Access to the
values.yamlfiles for the Agent and/or the Applier
Webhook considerations
The v3 chart’s MutatingWebhookConfiguration reuses the name of the v2 applier webhook. This means:
- Helm-managed installs: If a v2 Applier is still installed when you run
helm install stormforge, Helm’s release-ownership check will refuse to install. - GitOps users (ArgoCD, Flux, kubectl apply): There is no automatic conflict detection. You must fully remove the v2 Applier before applying the v3 manifests. Failing to do so will result in two conflicting
MutatingWebhookConfigurationresources.
CRD considerations
When you uninstall the v2 Agent, the optimize.stormforge.io CustomResourceDefinitions (CRDs) — and all associated custom resources, such as optimization configurations — remain on your cluster. This is expected, as helm uninstall doesn’t remove CRDs. Don’t delete them manually. Deleting a CRD removes every associated custom resource from the cluster.
In step 4 of the migration, you’ll use Helm to transfer ownership of the CRDs to the v3 release.
GitOps users (ArgoCD, Flux, kubectl apply): No action is needed. There is no release-ownership check when applying rendered manifests; the existing CRDs are updated in place.
Migration steps
There will be a brief period of downtime during the migration. Plan accordingly.
1. Convert your values file
Use the StormForge CLI to convert your v2 values files into a single v3 values.yaml, replacing ./agent-values.yaml and ./applier-values.yaml with the paths to your files. At least one of --agent-values and --applier-values is required:
stormforge migrate helm-values \
--agent-values ./agent-values.yaml \
--applier-values ./applier-values.yaml \
--output ./values.yaml
The command writes the converted values to the output file and reports any keys that require manual attention.
Review the output file and address any warnings before proceeding.
2. Uninstall the Applier
helm uninstall stormforge-applier -n stormforge-system
3. Uninstall the Agent
helm uninstall stormforge-agent -n stormforge-system
4. Install the v3 unified chart
The --take-ownership flag (Helm 3.17 or later) lets Helm take ownership of the CRDs left in place by the v2 Agent:
helm install stormforge oci://registry.stormforge.io/library/stormforge \
--namespace stormforge-system \
--create-namespace \
--take-ownership \
--values values.yaml
This installs the Agent, Exporter, and Applier in a single chart, replacing the separate v2 installations.
If your Helm version doesn’t support --take-ownership, label and annotate the existing CRDs to match the v3 release before installing:
for crd in workloadoptimizers optimizationconfigurations clusteroptimizationconfigurations; do
kubectl label crd ${crd}.optimize.stormforge.io \
app.kubernetes.io/managed-by=Helm --overwrite
kubectl annotate crd ${crd}.optimize.stormforge.io \
meta.helm.sh/release-name=stormforge \
meta.helm.sh/release-namespace=stormforge-system --overwrite
done
If migration fails
Migration issues are typically environment-specific and may require manual intervention. If you run into problems, contact StormForge support.
Values reference
The stormforge migrate helm-values command handles these conversions automatically. These tables are a reference for what changed between v2 and v3.
Renamed values
| v2 key | v3 key |
|---|---|
authSecret |
authSecretName |
envSecret |
envSecretName |
commonMetaLabels |
commonLabels |
manageAuthSecret |
createAuthSecret |
rbac.additional |
agent.rbac.additionalRules |
rbac.* (all other keys) |
agent.rbac.* |
serviceAccount.* |
agent.serviceAccount.* |
workload.allowNamespaces |
agent.allowNamespaces |
workload.denyNamespaces |
agent.denyNamespaces |
workload.inactiveWorkloadsGC |
agent.garbageCollectInactiveWorkloads |
prom.extraScrapeConfigs |
exporter.additionalScrapeConfigs |
workloadResourceTypes |
Merged into workloadResourceKinds |
Removed values
| v2 key | Action in v3 |
|---|---|
clusterDefaultConfig |
Deprecated, but still accepted as a migration aid — prefer a ClusterOptimizationConfiguration resource |
featureGates.optimizeCronJobs |
Removed — an enabled gate is converted to the equivalent workloadResourceKinds entry |
featureGates.optimizeSparkOperator |
Removed — an enabled gate is converted to the equivalent workloadResourceKinds entry |
featureGates.optimizeGithubARC |
Removed — an enabled gate is converted to the equivalent workloadResourceKinds entry |
patchTargetTypes |
Removed — use workloadResourceKinds |
enableOptimizationConfigurationCRDs |
Always-on |
extraEnvVars |
Removed — was a deprecated alias; use additionalEnvVars |
Resource name changes
The following Kubernetes resource names changed in v3. Update any references to these names in monitoring, alerts, or scripts.
Deployments
| v2 name | v3 name |
|---|---|
stormforge-agent-workload-controller |
stormforge-agent |
stormforge-agent-metrics-forwarder |
stormforge-exporter |
{release}-stormforge-applier (where {release} is your Helm release name) |
stormforge-applier |
CI/CD automation updates
Update any CI/CD pipelines that reference the old chart URLs or release name:
| v2 | v3 | |
|---|---|---|
| Agent chart URL | oci://registry.stormforge.io/library/stormforge-agent |
oci://registry.stormforge.io/library/stormforge |
| Applier chart URL | oci://registry.stormforge.io/library/stormforge-applier |
Not needed — Applier is bundled |
| Release name | stormforge-agent |
stormforge |