Helm Upgrade & Rollback

A comprehensive guide to Helm upgrade and rollback covering helm upgrade, rollback, release management, history, and best practices for managing Helm releases.

helm upgrade rollback Release Management History
Understanding Helm Release Lifecycle

Helm manages releases through a lifecycle that includes installation, upgrade, and rollback operations. Understanding this lifecycle is essential for effective application management.

  • Install: First deployment of a chart
  • Upgrade: Update an existing release
  • Rollback: Revert to a previous revision
  • History: Track all release revisions
  • Status: Check the current state of a release
Key Concept: Helm stores release history as Kubernetes Secrets, enabling rollback to any previous revision. Each upgrade creates a new revision.
Helm Upgrade
# Basic upgrade helm upgrade my-release ./my-chart # Upgrade with new values helm upgrade my-release ./my-chart -f new-values.yaml # Upgrade with --set helm upgrade my-release ./my-chart --set replicaCount=5 # Upgrade to specific version helm upgrade my-release ./my-chart --version 2.0.0 # Upgrade with dependency update helm dependency update ./my-chart helm upgrade my-release ./my-chart # Upgrade with timeout helm upgrade my-release ./my-chart --timeout 10m # Upgrade with wait helm upgrade my-release ./my-chart --wait # Upgrade with atomic (rollback on failure) helm upgrade my-release ./my-chart --atomic # Upgrade with dry-run helm upgrade my-release ./my-chart --dry-run --debug # Upgrade with force (recreate resources) helm upgrade my-release ./my-chart --force # Upgrade with reset values helm upgrade my-release ./my-chart --reset-values # Upgrade with history limit helm upgrade my-release ./my-chart --history-max 5

--atomic

Rollback on failure. Ensures your release is always in a stable state.

--timeout

Set a timeout for the upgrade operation. Default is 5 minutes.

--wait

Wait for all resources to be ready before marking the upgrade as successful.

--reset-values

Reset values to the chart's defaults, ignoring previous values.
Upgrade Best Practices:
  • Always use --dry-run to preview changes
  • Use --atomic for production upgrades
  • Set appropriate timeouts for large deployments
  • Use --wait to ensure resource readiness
  • Test upgrades in staging first
Release History
# View release history helm history my-release # View history with detailed information helm history my-release --max 10 # View history with output format helm history my-release --output yaml helm history my-release --output json # View specific revision helm get all my-release --revision 2 # View release status helm status my-release # View release notes helm get notes my-release # View release values helm get values my-release helm get values my-release --revision 2 # View release manifests helm get manifest my-release helm get manifest my-release --revision 2
Revision Status Chart App Version Description
1 superseded my-app-1.0.0 1.0.0 Initial install
2 superseded my-app-1.1.0 1.1.0 Added new feature
3 deployed my-app-1.2.0 1.2.0 Bug fix release
4 failed my-app-2.0.0 2.0.0 Failed upgrade
History Best Practices:
  • Review history before rollback
  • Limit history size with --history-max
  • Use helm get to inspect revisions
  • Document changes in upgrade descriptions
  • Monitor history for failed releases
Rollback
# Rollback to previous revision helm rollback my-release # Rollback to specific revision helm rollback my-release 2 # Rollback with wait helm rollback my-release 2 --wait # Rollback with timeout helm rollback my-release 2 --timeout 5m # Rollback with dry-run helm rollback my-release 2 --dry-run # Rollback with force helm rollback my-release 2 --force # Rollback with history cleanup helm rollback my-release 2 --cleanup-on-fail # Check rollback status helm status my-release # Verify rollback helm history my-release

Rollback

Revert to a previous revision of your release.

Rollback to Revision

Specify a revision number to rollback to a specific state.

Rollback with Wait

Wait for resources to be ready after rollback.

Cleanup on Fail

Clean up resources if rollback fails.
Rollback Considerations:
  • Rollback reverts to a previous revision's state
  • Rollback is not available for failed releases (use --force)
  • Rollback preserves the history of all revisions
  • Test rollbacks in staging before production
  • Document rollback procedures
Upgrade Strategies
# Standard upgrade helm upgrade my-release ./my-chart # Atomic upgrade (rollback on failure) helm upgrade my-release ./my-chart --atomic # Canary upgrade (partial rollout) helm upgrade my-release ./my-chart --set canary.enabled=true # Blue-green upgrade (using ingress) helm upgrade my-release ./my-chart --set ingress.active=green # Rollback on failure with --atomic helm upgrade my-release ./my-chart --atomic --wait # Upgrade with hooks # In Chart.yaml: # hooks: # upgrade: # - migration-job.yaml # Upgrade with pre-upgrade hook apiVersion: batch/v1 kind: Job metadata: name: pre-upgrade-migration annotations: helm.sh/hook: pre-upgrade helm.sh/hook-delete-policy: hook-succeeded spec: template: spec: containers: - name: migration image: myapp:migration command: ["python", "migrate.py"] restartPolicy: Never
Upgrade Strategy Best Practices:
  • Use --atomic for zero-downtime upgrades
  • Implement canary deployments for riskier changes
  • Use blue-green for production rollouts
  • Test upgrade strategies in staging
  • Monitor application health during upgrades
Release Management
# List releases helm list helm list --all-namespaces helm list --deployed helm list --failed helm list --pending # List releases with filter helm list --filter "my*" # List releases with output format helm list --output yaml helm list --output json # Show release status helm status my-release # Show release notes helm get notes my-release # Get release values helm get values my-release # Get release manifests helm get manifest my-release # Check release for pending operations helm list --pending # View release history helm history my-release

helm list

List all releases in a namespace or cluster.

helm status

Show the status of a specific release.

helm get

Get detailed information about a release.

helm history

View the revision history of a release.
Release Management Best Practices:
  • Use namespaces to organize releases
  • Monitor release status regularly
  • Keep release history manageable
  • Use consistent naming conventions
  • Document release configurations
Troubleshooting Upgrades and Rollbacks
# Check release status helm status my-release # View release history helm history my-release # Get release values helm get values my-release # Check for pending operations helm list --pending # View failed releases helm list --failed # Debug upgrade failures helm upgrade my-release ./my-chart --dry-run --debug # Check upgrade logs helm upgrade my-release ./my-chart --debug 2>&1 | grep -i error # Rollback failed release helm rollback my-release 2 --force # Check Kubernetes events kubectl get events --field-selector involvedObject.name=my-release # Check pod status kubectl get pods -l app=my-app # Check resource status kubectl get all -l app=my-app # Check Helm secrets kubectl get secrets -n default | grep sh.helm.release.v1
Common Issues:
  • Timeout: Increase timeout with --timeout
  • Resource Conflicts: Use --force to recreate resources
  • Failed Hooks: Check hook logs and delete policies
  • Value Conflicts: Use --reset-values for clean upgrade
  • Pending Operations: Use --force for rollback
Frequently Asked Questions
What is the difference between helm upgrade and helm rollback?
helm upgrade applies changes from a new chart version or values. helm rollback reverts to a previous revision of the same release. Upgrade goes forward, rollback goes backward.
How do I rollback a failed upgrade?
Use helm rollback <release> <revision> to revert to a previous revision. If the release is in a failed state, use --force to force the rollback.
How do I view release history?
Use helm history <release> to view all revisions of a release. Each revision shows status, chart version, and description.
What is the default history limit?
Helm keeps the last 10 revisions by default. You can change this with --history-max during installation or upgrade.
Can I rollback to a specific revision?
Yes, use helm rollback <release> <revision-number> to rollback to a specific revision. Check the revision number with helm history.
What does --atomic do in helm upgrade?
--atomic ensures that if the upgrade fails, Helm automatically rolls back to the previous revision. This provides zero-downtime upgrades.
How do I check the status of a release?
Use helm status <release> to check the current status of a release. It shows the status, revision, and deployed resources.
How do I list all releases?
Use helm list to list all releases in the current namespace. Use --all-namespaces to list releases across all namespaces.
Previous: Pushing and Pulling Charts Next: Uninstalling Charts

Mastering Helm upgrade and rollback is essential for managing releases in production. Use these commands and best practices to ensure smooth, reliable deployments and quick recovery from issues.