首页 > 解决方案 > 使用相同状态依赖的单独(后续)部署的 Helm 图表策略

问题描述

我正在尝试编写我的第一个 Helm 图表,并想知道如何最好地处理某个场景:两个部署(后端)共享相同的依赖项(数据库),但我希望能够在不同的时间部署每个后端。

我将尝试用一个例子来说明:

我希望后端 B 使用后端 A 的 Postgres 实例,如果它存在,否则,设置一个新实例。反之亦然,如果可能的话——有人首先部署后端 B,后端 A 将重新使用 Postgres。表面上似乎CREATE DATABASE ...需要运行,所以每个后端都有自己的数据库,但不确定这是可能的。

使用 Helm 完成此任务的推荐路径是什么?

标签: databasedeploymentkubernetes-helmdependency-management

解决方案


我建议让每个服务都部署自己的数据库。让后端 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 依赖于它的一个组件。在您在评论中引用的链接中,这正是“软依赖”案例,其中“依赖关系可以单独管理”。


推荐阅读