我正在尝试编写我的第一个Helm图表,并想知道如何最好地处理一个特定的场景:两个共享相同依赖关系(数据库)的部署(后端),但是我希望能够在不同的时间部署每个后端。
我将尝试用一个例子来说明:
我希望后端B使用后端A的Postgres实例,如果它存在,否则,设置一个新的实例。反之亦然,如果可能的话,有人会先部署后端B,后端A会重复使用Postgres。表面上看来,CREATE DATABASE ...
需要运行,因此每个后端都有自己的DB,但不确定这是可能的。
使用Helm实现这一目标的推荐路径是什么?
发布于 2020-09-10 06:38:50
我建议让每个服务部署自己的数据库。让后端A和B在它们的PostgreSQL (或Helm 3 Chart.yaml
)文件中列出一个Chart.yaml
依赖项,并让每个后端都连接到{{ .Release.Name }}-postgres
。不要试图共享数据库。
如果共享一个数据库对您来说真的很重要,那么单独部署它。helm install stable/postgres
,或者使用云提供商的托管数据库系统(比如Amazon )。然后将两个后端图表的Helm值配置为指向该外部管理的数据库。
Helm实际上并没有基于集群中现有状态有条件地部署东西的概念:当您部署后端B时,Helm不能查看集群并说“后端A已经有了数据库,所以我不会部署自己的数据库”。如果要卸载A,也会出现类似的问题;它将不知道B是否依赖于其组件之一。在您在评论中引用的链接中,这正是“软依赖”的情况,“依赖关系可以单独管理”。
https://stackoverflow.com/questions/63830149
复制