Kubernetes 2个具有共享Redis相关性的舵图

Kubernetes 2个具有共享Redis相关性的舵图,kubernetes,charts,redis,dependencies,kubernetes-helm,Kubernetes,Charts,Redis,Dependencies,Kubernetes Helm,目前,我有两个头盔图表-图表A和图表B。图表A和图表B对Redis实例的依赖性相同,如Chart.yaml文件中所定义: dependencies: - name: redis version: 1.1.21 repository: https://kubernetes-charts.storage.googleapis.com/ 我还覆盖了Redis的名称,因为连续应用两个图表会产生两个Redis实例,如下所示: redis: fullnameOverride: "redis"

目前,我有两个头盔图表-图表A和图表B。图表A和图表B对Redis实例的依赖性相同,如
Chart.yaml
文件中所定义:

dependencies:
- name: redis
  version: 1.1.21
  repository: https://kubernetes-charts.storage.googleapis.com/
我还覆盖了Redis的名称,因为连续应用两个图表会产生两个Redis实例,如下所示:

redis:
  fullnameOverride: "redis"
当我尝试安装图表A和图表B时,出现以下错误:

错误:呈现的清单包含已存在的资源。无法继续安装:现有资源冲突:种类:PersistentVolumeClaim,命名空间:默认,名称:redis


给我留下的印象是,如果已经存在相同的实例,则具有相同依赖关系的两个图表将使用相同的实例?

不幸的是,Helm无法处理具有相同名称的多个资源,或者换句话说,没有任何共享资源功能。 你可以跟着


我认为你可以使用模板来使用共享资源。这是一篇非常好的文章。

当您使用Helm安装图表时,它通常希望每个版本都有自己独立的Kubernetes对象集。在您展示的基本示例中,我希望看到Kubernetes服务对象的名称如下

release-a-application-a
release-a-redis
release-b-application-b
release-b-redis
umbrella-application-a
umbrella-application-b
umbrella-redis
有一个通用约定,对象的命名以
{{.Release.Name}}
开头,因此这两个redise是分开的

这实际上是一个预期的设置。构建微服务的一个典型规则是,每个服务都包含自己的独立存储,并且服务之间从不共享存储。这个头盔模式支持这一点,并且拥有这个设置并没有真正的缺点

如果您真的希望这两个图表共享一个Redis安装,您可以编写一个“伞形”图表,它本身不做任何事情,而是依赖于这两个应用程序图表。该图表将有一个
chart.yaml
文件和(在Helm 2中)一个
requirements.yaml
文件,该文件引用了另外两个图表,但没有自己的
模板
目录。这将导致赫尔姆得出结论,一个Redis可以同时支持这两个应用程序,你最终会得到类似的结果

release-a-application-a
release-a-redis
release-b-application-b
release-b-redis
umbrella-application-a
umbrella-application-b
umbrella-redis

(根据我的经验,您通常不希望这样做——您确实希望每个应用程序都有一个单独的Redis,因此尝试使用伞形图表管理多个安装并不特别有效。)

如何处理每个共享Redis子图表的values.yaml?