OpsCanary
Back to daily brief
kuberneteshelmPractitioner

Mastering Helm Hooks: Control Your Release Lifecycle

5 min read Official DocsApr 22, 2026
PractitionerHands-on experience recommended

Helm hooks exist to give you, the chart developer, the ability to intervene at strategic points in a release's lifecycle. This is crucial for automating tasks that need to happen before or after certain events, such as installations or upgrades. For instance, when you run helm install foo, the default lifecycle processes the installation without any custom logic. By implementing hooks, you can alter this flow, adding operations that execute at specific moments, like running a job after the installation completes.

The mechanism works through annotations in your resource definitions. For example, you can define a post-install hook with the annotation helm.sh/hook: post-install. You can also set hook weights using helm.sh/hook-weight, which allows you to control the execution order of multiple hooks. The default weight is 0, but you can assign negative or positive values to dictate when hooks run relative to each other. Additionally, the helm.sh/hook-delete-policy annotation helps manage the lifecycle of hook resources, with options like before-hook-creation and hook-succeeded to determine when these resources should be cleaned up. Remember that hooks can block operations; the Helm client will pause while a job runs, which can affect deployment speed.

In production, understanding the implications of hooks is vital. For example, if you create resources within a hook, you can't rely on helm uninstall to remove them later. This can lead to orphaned resources if not managed carefully. Also, be aware that the crd-install hook has been removed in Helm 3, so you should use the crds/ directory instead. Starting from Helm 3.2.0, hooks with the same weight are installed in the same order as non-hook resources, which can simplify your deployment logic.

Key takeaways

  • Implement hooks to automate tasks at key points in the release lifecycle.
  • Use annotations like `helm.sh/hook` to define when your hooks should run.
  • Set hook weights with `helm.sh/hook-weight` to control execution order.
  • Manage hook resource lifecycles with `helm.sh/hook-delete-policy`.
  • Be cautious of blocking operations; Helm will pause while jobs run.

Why it matters

Using Helm hooks effectively can streamline your deployment processes and ensure that necessary operations occur at the right times, reducing manual intervention and potential errors.

Code examples

YAML
1apiVersion:batch/v1
2kind:Job
3metadata:
4  name: "{{ .Release.Name }}"
5  labels:
6    app.kubernetes.io/managed-by: {{.Release.Service | quote}}
7    app.kubernetes.io/instance: {{.Release.Name | quote}}
8    app.kubernetes.io/version: {{.Chart.AppVersion}}
9    helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
10  annotations:
11    # This is what defines this resource as a hook. Without this line, the
12    # job is considered part of the release.
13    "helm.sh/hook": post-install
14    "helm.sh/hook-weight": "-5"
15    "helm.sh/hook-delete-policy": hook-succeeded
16spec:
17  template:
18    metadata:
19      name: "{{ .Release.Name }}"
20      labels:
21        app.kubernetes.io/managed-by: {{.Release.Service | quote}}
22        app.kubernetes.io/instance: {{.Release.Name | quote}}
23        helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
24    spec:
25      restartPolicy: Never
26      containers:
27        - name: post-install-job
28          image: "alpine:3.3"
29          command: ["/bin/sleep", "{{default "10" .Values.sleepyTime}}"]
YAML
annotations:
  "helm.sh/hook": post-install,post-upgrade
YAML
annotations:
  "helm.sh/hook-weight": "5"

When NOT to use this

The official docs don't call out specific anti-patterns here. Use your judgment based on your scale and requirements.

Want the complete reference?

Read official docs

Test what you just learned

Quiz questions written from this article

Take the quiz →

Get the daily digest

One email. 5 articles. Every morning.

No spam. Unsubscribe anytime.