使用相同的状态依赖项进行单独后续部署的Helm Chart策略

问题描述

我正在尝试编写我的第一个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依赖于它的组件之一。在注释中引用的链接中,这恰好是“软依赖关系”情况,其中“依赖关系可以单独管理”。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...