helmfile sync vs helmfile применить
sync sync all resources from state file (repos, releases and chart deps) apply apply all resources from state file only when there are changes
синхронизировать
The helmfile sync sub-command sync your cluster state as described in your helmfile ... Under the covers, Helmfile executes helm upgrade --install for each release declared in the manifest, by optionally decrypting secrets to be consumed as helm chart values. It also updates specified chart repositories and updates the dependencies of any referenced local charts. For Helm 2.9+ you can use a username and password to authenticate to a remote repository.
применять
The helmfile apply sub-command begins by executing diff. If diff finds that there is any changes sync is executed. Adding --interactive instructs Helmfile to request your confirmation before sync. An expected use-case of apply is to schedule it to run periodically, so that you can auto-fix skews between the desired and the current state of your apps running on Kubernetes clusters.
Я прошел через репозиторий Helmfile Readme
выяснить разницу между helmfile sync
а также helmfile apply
. Похоже, что в отличие от команды apply, команда sync не выполняетdiff
а также helm upgrade
черт возьми из всех выпусков. Но от словаsync
, вы ожидаете, что команда применит те выпуски, которые были изменены. Также упоминается о потенциальном примененииhelmfile apply
периодической синхронизации релизов. Почему бы не использоватьhelmfile sync
для этого? В целом, разница не стала кристально очевидной, и я подумал, что, вероятно, это могло быть больше. Итак, я спрашиваю.
4 ответа
Рассмотрим вариант использования, когда у вас есть задание Jenkins, которое запускается каждые 5 минут, и в этом задании вы хотите обновить свою диаграмму управления, но только при наличии изменений.
Если вы используете helmfile sync
который вызывает helm upgrade --install
каждые пять минут вы будете увеличивать версию диаграммы каждые пять минут.
$ helm upgrade --install httpd bitnami/apache > /dev/null
$ helm list
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
httpd 1 Thu Feb 13 11:27:14 2020 DEPLOYED apache-7.3.5 2.4.41 default
$ helm upgrade --install httpd bitnami/apache > /dev/null
$ helm list
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
httpd 2 Thu Feb 13 11:28:39 2020 DEPLOYED apache-7.3.5 2.4.41 default
Так что каждый helmfile sync
приведет к новой ревизии. Теперь, если бы вы бежалиhelmfile apply
, который сначала проверит различия и только потом (если найден) вызовет helmfile sync
который, в свою очередь, вызовет helm upgrade --install
этого не произойдет.
В остальных ответах все правильно. Однако есть еще одна важная вещь, которую нужно понять с vs:
-
sync
буду звонить по всем релизам. Таким образом, для каждого выпуска будет создан новый секрет руля, и все ревизии выпусков будут увеличены на одну. Helm 3 использует трехсторонний стратегический алгоритм слияния для вычисления исправлений, что означает, что он вернет ручные изменения, внесенные в ресурсы в активном кластере, обрабатываемые Helm; -
apply
сначала будет использовать плагин helm-diff, чтобы определить, какие выпуски были изменены, и будет запускать толькоhelm upgrade
на измененных. Однако helm-diff сравнивает только предыдущее состояние Helm с новым, оно не принимает во внимание состояние активного кластера . Это означает, что если вы что-то изменили вручную (или, точнее, плагин helm-diff), возможно, это не обнаружит и оставит как есть.
Таким образом, если вы всегда изменяете живой кластер через helm,
helmfile apply
это путь. Однако, если вы можете вносить изменения вручную и хотите убедиться, что текущее состояние согласовано с тем, что определено в Helm / helmfile, тогда
helmfile sync
это необходимо.
Если вам нужны более подробные сведения, моим сообщением в блоге ознакомьтесь сhelmfile: разница между синхронизацией и применением (Helm 3)
Проще говоря , вот как они оба работают:
звонки
звонки
helm upgrade --install
тогда и только тогда, когда возвращает некоторые изменения.
Так что, в общем, это будет быстрее, и я предлагаю использовать его большую часть времени.
Но учтите, что если кто-то удалил какие-либо
deployment
с или
configmap
s вручную с диаграммы,
helm diff
следовательно, никаких изменений не будет,
helmfile apply
работать не будет и эти ресурсы все равно будут удалены, а
helmfile sync
воссоздаст его, восстанавливая исходную конфигурацию диаграммы.
Мы обнаружили одну существенную проблему, которая также имеет значение.
Иногда операция или может завершиться неудачей из-за:
- Тайм-аут с
wait: true
. Например, кластеру k8s необходимо добавить больше узлов, и операция занимает больше времени, чем ожидалось (но в конечном итоге все развернуто). - Временная ошибка на
postsync
крюк.
В этих случаях простая повторная попытка задания развертывания конвейера решит проблему, но последовательная
helmfile apply
пропустит оба
helm upgrade
и выполнение хука, даже если релиз находится в статусе
failed
.
Итак, мои выводы:
-
apply
обычно быстрее, но может привести к ситуациям, когда требуется ручное управление (вне логики CI/CD). -
sync
более надежен (удобен для CI/CD), но обычно медленнее.