我有一个伞舵图,其中有子图。某些子图表具有预安装/预升级挂钩(作业)。每次运行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
hook manifest看起来像这样:
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
,因为child_chart_2
中没有任何更改。
2条答案
按热度按时间v2g6jxz61#
尝试添加注解
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
以避免执行未更新的子图表。因此,如果不更改规范,那么应用程序将继续使用旧配置运行,从而导致部署不一致。有关更多信息,请参阅这篇“图表开发技巧和技巧”文章
更新
这是预期的行为。你的Helm版本是什么因为这完全是Helm 2中的预期行为,并且有一个Issue in GitHub与您的问题类似。
我们还可以看到解析注解,它解释了新的3路战略合并补丁,应该以某种方式解决这个问题,但在他们的示例中,我看不到它是用注解
pre-upgrade
修复的。打开那个问题并ping他们。hm2xizp92#
我也有同样的问题。所有升级前和升级后作业每次都会运行。即使我只是运行
helm upgrade
而不做任何更改,它也会触发作业运行。以前在helm 2中,除非我提升具有升级前/升级后挂钩的子图表的版本,否则它不会运行