Uninstalling Releases
1. Uninstalling Release
2. Keeping Release History
| Flag | Effect |
|---|---|
--keep-history | Marks release uninstalled but retains history for rollback |
| Without flag | Purges all release Secrets |
3. Waiting for Deletion
| Flag | Behavior |
|---|---|
--wait | Block until resources fully deleted |
4. Setting Deletion Timeout
| Flag | Default |
|---|---|
--timeout | 5m |
5. Performing Dry Run Uninstall
6. Uninstalling with Cascade
| Flag | Effect |
|---|---|
--cascade background (default) | Server-side cascade in background |
--cascade foreground | Block until owned resources fully removed |
--cascade orphan | Leave child resources behind |
7. Viewing Uninstall Output
| Flag | Effect |
|---|---|
--description "reason" | Annotate uninstall in history |
--no-hooks | Skip pre/post-delete hooks |
8. Uninstalling Multiple Releases
Example: Batch uninstall
helm uninstall api web cache -n web
# All matching a regex
helm list -q -f '^test-' | xargs -r helm uninstall
9. Handling Failed Uninstalls
| Issue | Fix |
|---|---|
| Stuck Finalizers | kubectl patch <res> -p '{"metadata":{"finalizers":[]}}' --type=merge |
| Hook failure blocks | Re-run with --no-hooks |
| Release Secret remains | kubectl delete secret -l owner=helm,name=<release> |
10. Cleaning Up Orphaned Resources
| Resource | Cleanup |
|---|---|
| PVCs | Not deleted automatically; kubectl delete pvc -l app.kubernetes.io/instance=<release> |
| CRDs | Never deleted; remove manually if no longer needed |
| External LBs / DNS | Use post-delete hook or external automation |
Secrets created via lookup | Labelled with release; clean via selector |