Kustomize 在 helmreleases 上使用 Strategic Merge 补丁

Kustomize using Strategic Merge patch on helmreleases

我们将 HelmReleases 保存在我们的 Flux 仓库中。我们使用 Kustomize 来编辑 HelmReleases 中的一些键。我尝试使用 Strategic Merge 补丁来将一个值附加到列表中,但列表被覆盖了(这似乎是默认设置..)

有没有一种方法可以在 HelmReleases 上使用 Strategic Merge Patch 以允许我将值附加到列表(补丁 - 合并)?

我的 base.yaml 是:

apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: MyReleaseX
spec:
  releaseName: serviceXRelease
  chart:
    spec:
      chart: serviceXchart
      sourceRef:
        kind: HelmRepository
        name: my-repo
      valuesFiles:
        - values.yaml
  values:
     env:
        - name: ACCOUNT
          value: "x5" 

我的 kustomization 文件在 overlay 目录下:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - ../base/serviceX
patchesStrategicMerge:
  - serviceX.yaml

我想在我的叠加层中添加另一个环境变量(我不想用现有环境覆盖它)。

当我在 overlay/ServiceX.yaml 中尝试以下操作时,列表被覆盖并且我只有一个值:

apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: serviceXRelease
spec:

  values:
     env:
       - name: NEW_ENV
         value: "val"

我唯一的选择是使用 json 补丁而不是建议的战略合并补丁 (只使用合并而不是替换)吗?

就我个人而言,我更喜欢@The Fool 建议的解决方案。但是,在我的情况下,该解决方案不起作用,可能与 Kustomize 的版本或我使用的 apiVersion (v4.4.1) 有关。

以下是我使用的解决方案(json个补丁):

我的 base/servicex.yaml 与我发布的保持一致。

自定义文件

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - ../base/serviceX # 

patches:
  - path: patch-env.yaml
    target:
      group: helm.toolkit.fluxcd.io
      version: v2beta1
      kind: HelmRelease
      name: MyReleaseX

补丁文件:

- op: add
  path: "/spec/values/env/0"
  value:
    name: NEW_ENV
    value: VAL