kubernetes Helm子图预升级钩子在每次伞图升级时运行

daolsyd0  于 2023-06-28  发布在  Kubernetes
关注(0)|答案(2)|浏览(154)

我有一个伞舵图,其中有子图。某些子图表具有预安装/预升级挂钩(作业)。每次运行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.yamlhooks_2.yaml的钩子都会执行,但我只需要运行hooks_1.yaml,因为child_chart_2中没有任何更改。

v2g6jxz6

v2g6jxz61#

尝试添加注解checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}以避免执行未更新的子图表。因此,如果不更改规范,那么应用程序将继续使用旧配置运行,从而导致部署不一致。
有关更多信息,请参阅这篇“图表开发技巧和技巧”文章

更新

这是预期的行为。你的Helm版本是什么因为这完全是Helm 2中的预期行为,并且有一个Issue in GitHub与您的问题类似。
我们还可以看到解析注解,它解释了新的3路战略合并补丁,应该以某种方式解决这个问题,但在他们的示例中,我看不到它是用注解pre-upgrade修复的。打开那个问题并ping他们。

hm2xizp9

hm2xizp92#

我也有同样的问题。所有升级前和升级后作业每次都会运行。即使我只是运行helm upgrade而不做任何更改,它也会触发作业运行。以前在helm 2中,除非我提升具有升级前/升级后挂钩的子图表的版本,否则它不会运行

相关问题