Helm production discipline — safety, review, and the discipline of pinning
What you'll learn
- Apply Helm safety nets (--atomic, --wait, --dry-run, helm diff)
- Use helmfile for multi-release management
- Integrate Helm with Argo CD for GitOps-driven deployments
- Apply the operational discipline of treating Helm as production deployment infrastructure
Prerequisites
Verified against Kubernetes 1.34.x · kubeadm 1.34.x · kubectl 1.34.x · etcd 3.6.x · CoreDNS 1.11.x · containerd 1.7.x / 2.x · 2026-08-16
Helm production discipline is the operational rigour that turns a useful tool into production deployment infrastructure. This lesson walks the safety nets, the multi-release tooling, the GitOps integration, and the discipline.
The safety nets
flowchart LR
A[Helm safety nets] --> B[Pin versions]
A --> C[Sign charts]
A --> D[--dry-run before apply]
A --> E[--atomic for rollback]
A --> F[--wait for readiness]
A --> G[helm diff in PR review]
A --> H["Retention: --history-max"]
The safety nets:
- Pin versions.
helm install --version 1.0.0ensures the same chart version is installed. - Sign charts. cosign or Notary v2 signatures verify authenticity.
- —dry-run before apply.
helm install --dry-runshows what would happen without applying. - —atomic for rollback. If the upgrade fails, Helm rolls back automatically.
- —wait for readiness.
helm upgrade --waitwaits for resources to be Ready. - helm diff in PR review.
helm diff upgradeshows the changes; reviewed in the PR. - Retention: —history-max. Keep enough revisions to roll back; default is 10.
helmfile for multi-release management
# helmfile.yaml
repositories:
- name: bitnami
url: https://charts.bitnami.com/bitnami
- name: oci
oci: true
url: registry.example.com/charts
releases:
- name: postgresql
namespace: prod-data
chart: bitnami/postgresql
version: 12.1.0
values:
- values/postgresql.yaml
- name: myapp
namespace: prod-app
chart: oci/myapp
version: 1.2.3
values:
- values/myapp.yaml
environments:
prod:
values:
- values-prod/overrides.yaml
helmfile is a declarative spec for multiple Helm releases. It supports:
- Multiple releases in one file.
- Environment-specific values overrides.
- Diff before apply (
helmfile diff). - Apply with safety flags (
helmfile apply).
helmfile diff
helmfile apply
helmfile is the multi-release equivalent of Helm’s single-release commands.
Argo CD Helm integration
flowchart LR
A[Git repository] --> B[Helm chart]
B --> C[Argo CD Application]
C --> D["Argo CD: helm template"]
D --> E["Cluster: apply manifests"]
Argo CD can manage Helm charts natively:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp
namespace: argocd
spec:
source:
repoURL: https://github.com/example/manifests
targetRevision: main
path: apps/myapp
helm:
valueFiles:
- values-prod.yaml
parameters:
- name: image.tag
value: "2.0.0"
destination:
server: https://kubernetes.default.svc
namespace: prod-app
syncPolicy:
automated:
prune: true
selfHeal: true
Argo CD:
- Reads the Helm chart from Git.
- Renders the chart with the values.
- Applies the rendered manifests to the cluster.
- Continuously reconciles.
The GitOps benefits (audit trail, drift detection, PR review) apply to Helm charts.
The Helm production discipline
flowchart LR
A[Helm production discipline] --> B[Pin version]
B --> C[Sign chart]
C --> D["CI: lint, template, diff"]
D --> E[PR review]
E --> F[Deploy with --atomic --wait]
F --> G[Monitor]
G --> H{Rollback needed?}
H -->|Yes| I[helm rollback]
H -->|No| J[Continue]
The discipline:
- Pin version. Never use
latestin production. - Sign chart. Sign with cosign before publishing.
- CI: lint, template, diff. Every change goes through CI.
- PR review. The diff is reviewed in the PR.
- Deploy with —atomic —wait. Safety nets enabled.
- Monitor. Watch the release’s health.
- Rollback if needed. Use
helm rollbackif the release fails.
The operational failure modes
Helm production discipline fails for predictable reasons:
- No version pinning. A chart was upgraded unexpectedly because the version was not pinned.
- No signing. A tampered chart was installed.
- No dry-run. An unexpected change reached production because no one reviewed the diff.
- No —atomic. A failed upgrade left the cluster in an inconsistent state.
- No —wait. A release was marked successful before resources were ready; workloads failed.
- No history. A rollback was impossible because the previous revisions were garbage collected.
Quiz
Knowledge check · 4 questions
Q1. What is the purpose of --atomic in helm upgrade?
Q2. helmfile provides declarative management of multiple Helm releases, with environment-specific values and diff before apply.
Q3. A team upgraded a Helm chart without --atomic. The upgrade partially failed; some resources were updated, others were not. The cluster is in an inconsistent state. Diagnosis and recovery?
The team ran helm upgrade without --atomic. Half the resources were updated; the other half failed. The cluster has the new Deployment but the old Service (with the old selector). Workloads cannot be reached. Recovery requires manual intervention.
Q4. Name three Helm safety nets and the failure mode each addresses.
Passing score: 75%. Answers are checked in this browser.
Production discipline
Helm in production rests on five non-negotiable elements:
- Pin versions. Always specify —version.
- Sign charts. Sign with cosign; verify before install.
- —atomic and —wait. Safety nets on every upgrade.
- helm diff in PR review. The diff is reviewed before merge.
- helmfile or Argo CD for multi-release. No ad-hoc individual commands.
Helm is production deployment infrastructure. Treat it with the same rigour as any other production tool: pin, sign, review, monitor.