database - 使用相同状态依赖的单独(后续)部署的 Helm 图表策略
问题描述
我正在尝试编写我的第一个 Helm 图表,并想知道如何最好地处理某个场景:两个部署(后端)共享相同的依赖项(数据库),但我希望能够在不同的时间部署每个后端。
我将尝试用一个例子来说明:
- 周一,John 部署了 Backend A,它依赖于 Postgres。
- 周二,John 部署了Backend 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 依赖于它的一个组件。在您在评论中引用的链接中,这正是“软依赖”案例,其中“依赖关系可以单独管理”。
推荐阅读
- javascript - Electron 自定义 `window.prompt()` (自定义,因为不支持提示)
- objective-c - 突出显示带有发件人标签的按钮
- python - 来自函数的 TensorFlow 占位符
- python - 过滤 ID 相邻的 SQL 元素
- python - 无法将文本翻译成单元格内的其他语言或 pptx 中的某些表格
- bash - 当使用“WHENEVER SQLERROR EXIT 1”时,为什么 Sqlplus bash 脚本不返回 ORA-02291 完整性约束的错误?
- python - 基于两列标记数据
- java - Unirest 抛出类未找到异常
- javascript - TypeError:无法读取未定义的属性“数据”-但已定义
- python - 重置 sync_reasoner 推理