Хуки предварительного обновления вложенной диаграммы Helm запускаются при каждом обновлении общей диаграммы

#kubernetes #hook #kubernetes-helm

Вопрос:

У меня есть общая диаграмма, в которой есть вложенные диаграммы. Некоторые из вложенных диаграмм содержат перехваты (задания) предварительной установки / предварительного обновления. Каждый раз, когда я запускаю 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 запустить, потому что изменений нет child_chart_2 .

Комментарии:

1. не могли бы вы предоставить журналы и более подробную информацию?

2. привет, добавлено еще несколько деталей. Какие журналы вам нужны?

3. привет, @Arsen, мне нужны твои ценности. файл yaml и подключает yamls для воспроизведения вашей проблемы

4. Вот упакованная таблица: gist.github.com/arsssen/5353257ab9e84f6b6dc62d26106e3e68

Ответ №1:

Попробуйте добавить аннотацию checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} , чтобы избежать выполнения дочерней диаграммы, которая не была обновлена. Таким образом, если спецификация не изменена, то приложение продолжает работать со старой конфигурацией, что приводит к несогласованному развертыванию.

Для получения дополнительной информации, пожалуйста, обратитесь к этой статье «Советы и рекомендации по разработке диаграмм»


Обновить

Тогда это ожидаемое поведение. Какая у вас версия Helm? Поскольку это было полностью ожидаемым поведением в Helm 2, и в GitHub есть проблема с аналогичной проблемой, как у вас.

Также мы можем увидеть комментарий к разрешению, который объясняет новые 3-сторонние исправления стратегического слияния, которые должны каким-то образом решить эту проблему, но в их примерах я не вижу, что это было исправлено с помощью аннотации pre-upgrade . Не стесняйтесь открывать эту проблему и проверять их.

Комментарии:

1. К сожалению, это не помогает. Дочерняя диаграмма не обновляется с этой аннотацией или без нее, но перехваты выполняются всегда.

2. привет @Arsen, я отредактировал свой ответ с дополнительной информацией