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-runto preview changes - Use
--atomicfor production upgrades - Set appropriate timeouts for large deployments
- Use
--waitto 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 getto 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
--atomicfor 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
--forceto recreate resources - Failed Hooks: Check hook logs and delete policies
- Value Conflicts: Use
--reset-valuesfor clean upgrade - Pending Operations: Use
--forcefor 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.
Related Topics
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.