Коллеги, всем привет! =)
У ребят из Flant вышла интересная статья про то как они решали проблему 3 way merge при развертывании ресурсов при помощи Helm.
Не то что бы я был фанатом Werf, но почитать про 3 way merger, для освежения памяти было интересно =)
Проблема кроется в том, что некоторые ресурсы могут появляться в кластере и Helm про них может сооовсем ничего не знать. Например у нас есть deployment и при помощи аннотации мы добавляем Istio Sidecar в pod нашго deployment. Обычно при выполнение helm upgrade проблем не возникает, чаще всего проблемы могут возникнуть если мы выполнили helm rollback или “стопнули” helm upgrade —install.
Как работает 3 way merge:
1 - Получаем манифесты ресурса из релиза который установлен в кластере k8s
2 - Получаем манифесты из чарта который хотим установить/обновить
3 - Получаем манифест из кластера k8s (самый спорный пункт, много думал)
4 - Собираем в кучу все 3 манифеста и мержим их
5 - Отправляем PATCH запрос в k8s
Что бы решить проблему 3WM, пришел новый механизм под названием Server-Side Apply или SSA
Он “из коробки” лишен недостатков 3WM и выполняет гораздо меньше действий с ресурсами:
1 - Получаем манифесты из чарта
2 - Отправляем PATCH запрос в k8s
Ииии у нас все работает хорошо =)
А если вы давно пользуетесь ArgoCD, скорее всего server-side apply включен у вас для большинства ресурсов =)
ЗЫ - с приколами 3WM периодически сталкиваемся, решений обычно два, отправиться править ресурсы руками внутри k8s, сделать helm uninstall и развернуть приложение заново.
Post #76
702
- 🔥 8
- 👍 4
- ❤ 2