问题描述
我正在尝试编写我的第一个Helm图表,想知道如何最好地处理某种情况:共享相同依赖关系(数据库)的两个部署(后端),但是我希望能够将每个后端分别部署时间。
我将尝试举例说明:
- 星期一,约翰部署了后端A ,这取决于Postgres。
- 周二,John部署了后端B ,理想情况下,该后端依赖于相同的Postgres实例
我希望后端B使用后端A的Postgres实例(如果存在),否则,请设置一个新实例。反之亦然,如果可能的话-有人先部署后端B,后端A将重新使用Postgres。看来CREATE DATABASE ...
似乎需要运行,因此每个后端都具有自己的数据库,但不确定是否可行。
使用Helm完成此操作的推荐路径是什么?
解决方法
我建议让每个服务都部署自己的数据库。后端A和后端B均在其requirements.yaml
(或Helm 3 Chart.yaml
)文件中列出PostgreSQL依赖项,并分别连接到{{ .Release.Name }}-postgres
。不要尝试共享数据库。
如果共享数据库对您而言真的很重要,请单独部署它。 helm install stable/postgres
,或使用您的云提供商的托管数据库系统(如Amazon RDS)。然后将两个后端图表的Helm值配置为指向该外部管理的数据库。
Helm并没有真正根据集群中的现有状态有条件地部署事物的概念:部署后端B时,Helm无法查看集群并说“后端A已经有一个数据库,所以我赢了自己动手”。如果您要卸载A,也会有类似的问题。它不会知道B依赖于它的组件之一。在注释中引用的链接中,这恰好是“软依赖关系”情况,其中“依赖关系可以单独管理”。