В Helm существуют механизмы, называемые Hooks .
Helm предоставляет механизм ловушек, позволяющий разработчикам диаграмм вмешиваться в определенные моменты жизненного цикла выпуска. Например, вы можете использовать ловушки для:
Загрузите ConfigMap или Secret во время установки до загрузки любых других диаграмм
Выполните задание всоздайте резервную копию базы данных перед установкой новой диаграммы, а затем выполните второе задание после обновления, чтобы восстановить данные
Запустите задание перед удалением выпуска, чтобы изящно вывести службу извращение перед его удалением.
Хуки работают как обычные шаблоны, но имеют специальные аннотации, которые заставляют Helm использовать их по-разному. В этом разделе мы рассмотрим базовый шаблон использования хуков.
Хуки объявляются как аннотация в разделе метаданных манифеста:
apiVersion: ...
kind: ....
metadata:
annotations:
"helm.sh/hook": "pre-install"
Если ресурсы относятся к типу Job,Tiller будет ждать, пока работа не будет успешно завершена. И если работа не удалась, релиз не удастся. Это операция блокировки, поэтому клиент Helm будет приостанавливать работу при выполнении задания.
КАК ПИСАТЬ КРЮЧКИ:
Крюки - это просто файлы манифеста Kubernetes со специальными аннотациямив разделе метаданных. Поскольку они являются файлами шаблонов, вы можете использовать все обычные функции шаблонов, включая чтение. Значения ,. Release и .Template .
Например, этот шаблон, хранящийся в templates / post-install-job.yaml, объявляет задание, которое будет запущено после установки:
apiVersion: batch/v1
kind: Job
metadata:
name: "{{.Release.Name}}"
labels:
app.kubernetes.io/managed-by: {{.Release.Service | quote }}
app.kubernetes.io/instance: {{.Release.Name | quote }}
app.kubernetes.io/version: {{ .Chart.AppVersion }}
helm.sh/chart: "{{.Chart.Name}}-{{.Chart.Version}}"
annotations:
# This is what defines this resource as a hook. Without this line, the
# job is considered part of the release.
"helm.sh/hook": post-install
"helm.sh/hook-weight": "-5"
"helm.sh/hook-delete-policy": hook-succeeded
spec:
template:
metadata:
name: "{{.Release.Name}}"
labels:
app.kubernetes.io/managed-by: {{.Release.Service | quote }}
app.kubernetes.io/instance: {{.Release.Name | quote }}
helm.sh/chart: "{{.Chart.Name}}-{{.Chart.Version}}"
spec:
restartPolicy: Never
containers:
- name: post-install-job
image: "alpine:3.3"
command: ["/bin/sleep","{{default "10" .Values.sleepyTime}}"]
Что делает этот шаблон ловушкой, так это аннотация:
annotations:
"helm.sh/hook": post-install