#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, я отредактировал свой ответ с дополнительной информацией