【问题标题】:Deploying multiple Helm charts despite duplicated objects尽管有重复的对象,但部署多个 Helm 图表
【发布时间】:2021-10-10 02:06:22
【问题描述】:

我有 2 个掌舵子图表1 个伞形图表,这取决于两个孩子。 不幸的是,这两个子图表都包含重复的 k8s 对象(因此它们也共享 相同的名称)。

那么继续helm install release1 umbrella 我得到Error: configmaps "x-1" already exists

提示:我们是“子”图表的作者(因此我们可以更改它们),但我们无法避免名称冲突。

尽管有一些 k8s 对象是重复的,是否可以做 helm install ?我们能否调整“子”图表以使其成为可能(例如“仅在尚未定义的情况下考虑此对象”)

我知道可以用普通的kubectl 来做这件事,因为它会合并重复项而不会出错。

【问题讨论】:

    标签: kubernetes kubernetes-helm


    【解决方案1】:

    典型的 Helm 约定是在发布名称和图表名称之后命名对象。在依赖图表情况下,每个图表都有自己的图表名称,但所有图表将共享相同的发布名称。

    metadata:
      name: {{ .Release.Name }}-{{ .Chart.Name }}-x-1
    

    如果您使用helm create 创建图表,它将在_helpers.tpl 中包含一个"chartname.fullname" 帮助程序,以帮助以标准方式构造此名称。

    这种方法将为您提供两个独立的、不冲突的 ConfigMap,但它们可能具有重复的内容。

    如果您只想拥有一个 ConfigMap 副本,您可以将其移动到自己的图表中,并让两个“子”图表依赖于此。如果伞形图依赖于 A 和 B,并且 A 和 B 都依赖于一些常见的依赖项 C,那么 Helm 只会安装该依赖项一次。服务图表 A 和 B 仍然知道 ConfigMap 的名称,因为它们知道发布名称(与当前的 .Release.Name 相同)和图表名称(公共依赖图​​表的名称)。

    configMapRef:
      name: {{ .Release.Name }}-common-x-1
    

    【讨论】:

    • 将重复项外包到孙图表的好主意。
    • 但是还有其他选项(没有孙子图表)并且不包括 {{ .Chart.Name }} 到孩子的名字中?
    • 并非如此。如果您告诉 Helm 安装两个具有相同种类和名称但它们不同的东西,该怎么办?
    • "Helm will only install that dependency once" 似乎不是真的:当将公共依赖项外包到自己的图表中时,我仍然得到Error: configmaps "x-1" already exists。可能与这个问题有关:github.com/helm/helm/issues/2247
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 2020-01-11
    • 2019-09-16
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 2018-05-27
    相关资源
    最近更新 更多