You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Helm3中before-hook-creation钩子删除策略未生效问题排查

Helm钩子Job的before-hook-creation策略失效问题

我有一个名为myapp的Helm Chart,其中包含一个作为pre-install和pre-upgrade钩子的Job,配置了before-hook-creation的hook-deletion-policy:

apiVersion: batch/v1
kind: Job
metadata:
  name: "job-{{ .Release.Name }}-{{ .Release.Revision }}"
  labels:
    app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
    app.kubernetes.io/instance: {{ .Release.Name | quote }}
    app.kubernetes.io/version: {{ .Chart.AppVersion }}
    helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
  annotations:
    # This is what defines this resource as a hook. Without this line, the
    # job is considered part of the release.
    "helm.sh/hook": pre-install,pre-upgrade
    "helm.sh/hook-weight": "1"
    "helm.sh/hook-delete-policy": "before-hook-creation"
spec:
  template:
    metadata:
      name: "{{ .Release.Name }}"
      labels:
        app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
        app.kubernetes.io/instance: {{ .Release.Name | quote }}
        helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
    spec:
      restartPolicy: Never
      containers:
      - name: post-install-job
        image: "alpine:3.3"
        command: ["/bin/sleep","{{ default "10" .Values.sleepyTime }}"]

根据Helm文档描述:

before-hook-creation: 在启动新钩子之前删除旧资源(默认策略)

按预期,第二次执行helm upgrade时,旧的job-myapp-1应该被删除,但实际并未生效;而改用hook-succeeded策略时,Job成功后能正常被删除。想确认是YAML配置有误,还是对before-hook-creation的理解存在偏差?


更新:
保留before-hook-creation配置:

"helm.sh/hook-delete-policy": before-hook-creation

修改Job名称,移除发布版本号:

name: "job-{{ .Release.Name }}"

修改后,多数发布会生成相同的Job名称,后续执行helm upgrade时Job会被替换,旧Job关联的Pod也会被删除。但存在一个问题:执行helm uninstall时Job不会被删除,因为Helm不会跟踪这些钩子资源。


问题原因解释

问题出在原Job名称包含{{ .Release.Revision }}——每次helm upgrade会递增Release版本号,导致新旧Job的名称完全不同。before-hook-creation策略只会删除同名称、同类型、属于当前发布实例的旧钩子资源,Helm通过资源的名称、元数据标签/注解来识别归属。当新旧Job名称不一致时,Helm无法识别旧Job是当前发布的钩子资源,因此不会触发删除操作。

改用固定名称后,新钩子创建前,Helm能匹配到同名称的旧钩子资源,所以会执行删除替换。但钩子资源不属于Helm跟踪的发布核心资源,因此helm uninstall不会清理这些钩子Job。

内容的提问来源于stack exchange,提问作者AnjK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:17:35