每次伞图升级时,Helm 子图预升级挂钩 运行
Helm subchart pre-upgrade hooks run every time the umbrella chart is upgraded
我有一个带有子图的伞舵图。一些子图有 pre-install/pre-upgrade 个挂钩(工作)。
每次我运行 helm upgrade <release name> <umbrella chart>
执行所有子图的预升级钩子,即使对应的子图没有变化。
这是预期的行为吗?是否有可能 运行 子图挂钩仅在子图发生变化时才挂钩?
UPD:更多详情
这是图表结构:
parent_chart/
├─ charts/
│ ├─ child_chart_1/
│ │ ├─ templates/
│ │ │ ├─ hooks_1.yaml
│ │ │ ├─ deployment_1.yaml
│ │ ├─ Chart.yaml
│ │ ├─ values.yaml
│ ├─ child_chart_2/
│ │ ├─ templates/
│ │ │ ├─ deployment_2.yaml
│ │ │ ├─ hooks_2.yaml
│ │ ├─ Chart.yaml
│ │ ├─ values.yaml
├─ values.yaml
├─ Chart.yaml
挂钩清单如下所示:
apiVersion: batch/v1
kind: Job
metadata:
name: {{ .Release.Name }}-migration-hook
namespace: {{ .Values.namespace }}
labels:
app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
app.kubernetes.io/instance: {{ .Release.Name | quote }}
helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
annotations:
"helm.sh/hook": pre-install, pre-upgrade
"helm.sh/hook-weight": "-5"
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
spec:
...
假设此图表已安装。
然后我在 child_chart_1/values.yaml
中进行更改并升级伞图:
helm upgrade release_name parent_chart
在 hooks_1.yaml
和 hooks_2.yaml
的升级挂钩期间,我只需要 hooks_1.yaml
到 运行,因为 [=19] 没有变化=].
尝试添加注释checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
以避免执行未更新的子图表。因此,如果未更改规范,则应用程序会保留 运行 旧配置,从而导致部署不一致。
更多信息请参考此'Chart Development Tips and Tricks' article
更新
这是预期的行为。你的 Helm 版本是多少?因为这完全是 Helm 2 中的预期行为,并且 Issue in GitHub 与您的问题类似。
我们还可以看到 resolution comment that's explaining of New 3-way Strategic Merge Patches 应该以某种方式解决这个问题,但在他们的例子中我看不到它是用注释 pre-upgrade
修复的。随便打开那个问题并 ping 他们。
我有一个带有子图的伞舵图。一些子图有 pre-install/pre-upgrade 个挂钩(工作)。
每次我运行 helm upgrade <release name> <umbrella chart>
执行所有子图的预升级钩子,即使对应的子图没有变化。
这是预期的行为吗?是否有可能 运行 子图挂钩仅在子图发生变化时才挂钩?
UPD:更多详情
这是图表结构:
parent_chart/
├─ charts/
│ ├─ child_chart_1/
│ │ ├─ templates/
│ │ │ ├─ hooks_1.yaml
│ │ │ ├─ deployment_1.yaml
│ │ ├─ Chart.yaml
│ │ ├─ values.yaml
│ ├─ child_chart_2/
│ │ ├─ templates/
│ │ │ ├─ deployment_2.yaml
│ │ │ ├─ hooks_2.yaml
│ │ ├─ Chart.yaml
│ │ ├─ values.yaml
├─ values.yaml
├─ Chart.yaml
挂钩清单如下所示:
apiVersion: batch/v1
kind: Job
metadata:
name: {{ .Release.Name }}-migration-hook
namespace: {{ .Values.namespace }}
labels:
app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
app.kubernetes.io/instance: {{ .Release.Name | quote }}
helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
annotations:
"helm.sh/hook": pre-install, pre-upgrade
"helm.sh/hook-weight": "-5"
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
spec:
...
假设此图表已安装。
然后我在 child_chart_1/values.yaml
中进行更改并升级伞图:
helm upgrade release_name parent_chart
在 hooks_1.yaml
和 hooks_2.yaml
的升级挂钩期间,我只需要 hooks_1.yaml
到 运行,因为 [=19] 没有变化=].
尝试添加注释checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
以避免执行未更新的子图表。因此,如果未更改规范,则应用程序会保留 运行 旧配置,从而导致部署不一致。
更多信息请参考此'Chart Development Tips and Tricks' article
更新
这是预期的行为。你的 Helm 版本是多少?因为这完全是 Helm 2 中的预期行为,并且 Issue in GitHub 与您的问题类似。
我们还可以看到 resolution comment that's explaining of New 3-way Strategic Merge Patches 应该以某种方式解决这个问题,但在他们的例子中我看不到它是用注释 pre-upgrade
修复的。随便打开那个问题并 ping 他们。