Развертывание ресурса по условию
Чтобы развернуть ресурс только для конкретного типа развертывания (install, upgrade, rollback, uninstall) или на конкретной стадии развертывания (pre, main, post), используйте аннотацию werf.io/deploy-on, вдохновлённую аннотацией helm.sh/hook.
Доступные значения для werf.io/deploy-on:
pre-install,install,post-install— рендерить ресурс только при установке релизаpre-upgrade,upgrade,post-upgrade— рендерить ресурс только при обновлении релизаpre-rollback,rollback,post-rollback— рендерить ресурс только при откате релизаpre-delete,delete,post-delete— рендерить ресурс только при удалении релиза
По умолчанию для обычных ресурсов используется значение install,upgrade,rollback, а для хуков значение берётся из helm.sh/hook.
Пример:
# .helm/templates/example.yaml:
apiVersion: batch/v1
kind: Job
metadata:
name: database-initialization
annotations:
werf.io/deploy-on: pre-install
werf.io/delete-policy: before-creation
# ...
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
# ...
В этом примере ресурс database-initialization будет задеплоен при первичной установке релиза и до myapp, а ресурс myapp будет развернут в основной стадии выката всякий раз, когда релиз устанавливается, обновляется или откатывается.
Владелец ресурса
Аннотация werf.io/ownership определяет, как ресурс удаляется и как работают релизные аннотации. Допустимые значения:
release: ресурс удаляется, если он удалён из чарта или при удалении релиза, а релизные аннотации ресурса применяются/проверяются во время выката.anyone: обратное отrelease— ресурс никогда не удаляется при удалении релиза или при его удалении из чарта, а релизные аннотации не применяются/не проверяются во время выката.
Обычные ресурсы по умолчанию имеют владельцем release, а хуки и CRD из директории crds имеют владельцем anyone.
Пример:
# .helm/templates/example.yaml:
apiVersion: batch/v1
kind: Job
metadata:
name: database-migrations
annotations:
werf.io/ownership: "anyone"
# ...
Здесь владелец anyone делает эту Job похожей на Helm-хук: она не будет удалена при удалении релиза или при удалении из чарта, а её релизные аннотации не будут применяться/проверяться во время выката.
Политики удаления ресурса
werf.io/delete-policy
Аннотация werf.io/delete-policy управляет удалениями ресурса во время его развертывания и вдохновлена аннотацией helm.sh/hook-delete-policy. Допустимые значения:
before-creation: ресурс всегда пересоздаётсяbefore-creation-if-immutable: ресурс пересоздается только если мы получили ошибкуfield is immutable, пытаясь обновить ресурсsucceeded: ресурс удаляется после успешной проверки готовностиfailed: ресурс удаляется, если проверка готовности завершилась неудачно
Можно указать несколько значений одновременно. По умолчанию у обычных ресурсов политика удаления отсутствует, а у хуков значения берутся из helm.sh/hook-delete-policy и транслируются в werf.io/delete-policy.
Пример:
# .helm/templates/example.yaml:
apiVersion: batch/v1
kind: Job
metadata:
name: database-migrations
annotations:
werf.io/delete-policy: before-creation,succeeded
# ...
Здесь Job database-migrations всегда пересоздаётся, а затем удаляется после достижения готовности.
helm.sh/resource-policy
Аннотация helm.sh/resource-policy: keep запрещает любое удаление ресурса. Ресурс не может быть удалён ни по какой причине, если присутствует эта аннотация. Эта аннотация также учитывается на ресурсе в кластере, даже если её нет в чарте.
Пример:
# .helm/templates/example.yaml:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
annotations:
helm.sh/resource-policy: keep
# ...
Здесь PersistentVolumeClaim my-pvc никогда не будет удалён ни по какой причине.