Я бы порекомендовал одну диаграмму для каждой услуги, с дополнительным упрощением, чтобы диаграмма "служба B" зависела от ее базы данных. Я хотел бы сделать эти графики независимыми: ни одна из служб не зависит от других.
Место, где хорошо работают зависимости Helm, - это служба, которая встраивает / скрывает отдельные отдельные части. Например, база данных, лежащая в основе B, является деталью реализации, и ничего вне B не нужно знать об этом. Таким образом, B может зависеть от stable/postgres
или чего-то подобного, и это хорошо работает в Helm.
Есть одна специфическая механическая проблема, которая вызывает проблемы для подхода зонтичной диаграммы. Скажем, служба D также зависела от базы данных, и это была та же самая «разновидность» базы данных (скажем, обе используют PostgreSQL). Оперативно вы хотите, чтобы эти две базы данных были отдельными. Хелм увидит два пути umbrella > B > database
и umbrella > D > database
и установит только одну копию диаграммы базы данных, так что вы получите две службы, совместно использующие базу данных. Вы, вероятно, не хотите этого.
Другая механическая проблема, с которой вы столкнетесь при использовании зависимостей Helm, заключается в том, что большинству ресурсов присваивается какой-либо вариант {{ .Release.Name }}-{{ .Chart.Name }}
. В вашем варианте 1, скажем, вы просто устанавливаете сервис C; вы бы в конечном итоге с развертываниями, как service-C-C
, service-C-B
, service-C-database
. Если вы затем захотите развернуть службу А рядом с ней, это приведет к появлению собственных service-A-B
и service-A-database
, что опять-таки не то, что вам нужно.
Мне не известно о великолепном решении этой проблемы с открытым исходным кодом. Решение на основе Make-кода является хакерским, но может работать:
# -*- gnu-make -*-
all: api-proxy.deployed
%.deployed:
helm upgrade --install --name $* -f values.yaml ./charts/$*
touch $@
api-proxy.deployed: a.deployed c.deployed
a.deployed: b.deployed
c.deployed: b.deployed d.deployed