Migrating and Upgrading Charts

1. Upgrading Chart API Version

Example: v1 → v2

# Old (Chart.yaml)
apiVersion: v1
# requirements.yaml was external

# New (Chart.yaml)
apiVersion: v2
dependencies:
  - name: postgresql
    version: "15.3.0"
    repository: https://charts.bitnami.com/bitnami
type: application

2. Migrating from requirements.yaml

StepAction
MoveCopy requirements.yaml contents under dependencies: in Chart.yaml
DeleteRemove requirements.yaml and requirements.lock
Rebuildhelm dependency update regenerates Chart.lock

3. Updating Deprecated Kubernetes APIs

Old APINew API
extensions/v1beta1 Deploymentapps/v1
extensions/v1beta1 Ingressnetworking.k8s.io/v1
policy/v1beta1 PodDisruptionBudgetpolicy/v1
autoscaling/v2beta2 HPAautoscaling/v2
batch/v1beta1 CronJobbatch/v1
rbac.authorization.k8s.io/v1beta1rbac.authorization.k8s.io/v1

4. Handling Breaking Changes

Change typeStrategy
Renamed valueAccept both for one MAJOR cycle; emit deprecation via NOTES.txt
Removed templateDocument in CHANGELOG with migration path
Selector changeForce fresh install — selectors are immutable

5. Testing Migration Changes

StepTool
Diff old vs newhelm diff upgrade
Render bothhelm template old/ > o.yaml; helm template new/ > n.yaml; diff o.yaml n.yaml
Test in stagingRun full helm upgrade against representative cluster

6. Rolling Back Failed Migrations

Example: Atomic with auto-rollback

helm upgrade api ./chart --atomic --timeout 15m -f values-prod.yaml
# Manual rollback if needed
helm rollback api

7. Updating Chart Dependencies

WorkflowCommand
Resolve latesthelm dependency update
LockCommit updated Chart.lock
CI rebuildhelm dependency build (lock-file driven)

8. Migrating to OCI Registries

StepCommand
Loginhelm registry login ghcr.io
Push existinghelm push chart.tgz oci://ghcr.io/acme/charts
Update dependenciesChange repo URL to oci://... in Chart.yaml
Deprecate HTTP repoKeep mirroring for transition period

9. Converting to Library Charts

ChangeDetail
Chart.yamlAdd type: library
TemplatesConvert manifests to define blocks in _*.tpl
ValuesRemove resource-specific defaults; document expected inputs
ConsumersAdd as dependency + include helpers in their templates

10. Documenting Migration Steps

DocContent
UPGRADING.mdVersion-by-version migration notes
CHANGELOG annotationartifacthub.io/changes in Chart.yaml
NOTES.txtRuntime warnings for deprecated values