You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kustomize使用Strategic Merge合并数组而非替换的问题

Kustomize 用Strategic Merge追加数组元素失败的解决方法

问题背景

尝试通过Kustomize的Strategic Merge Patch为HelmRelease中的env数组追加元素,但实际结果是原数组被覆盖,而非合并。以下是相关配置与问题详情:

配置文件

kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- api.yaml
patches:
- path: patch.yaml

api.yaml

apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: my-api
  namespace: ns
spec:
  values:
    pod:
      env:
      - name: Elastic__AuthenticationType
        value: BasicAuth

初始Patch与问题

初始patch.yaml

apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: my-api
  namespace: ns
spec:
  values:
    pod:
      env:
      - name: MetaPod__AllowedClients
        value: Test

预期结果(数组合并)

apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: my-api
  namespace: ns
spec:
  values:
    pod:
      env:
      - name: Elastic__AuthenticationType
        value: BasicAuth
      - name: MetaPod__AllowedClients
        value: Test

实际结果(原数组被替换)

apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: my-api
  namespace: ns
spec:
  values:
    pod:
      env:
      - name: MetaPod__AllowedClients
        value: Test

已尝试无效的方法

曾在patch中添加$patch: merge,但未达到预期效果:

apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: my-api
  namespace: ns
spec:
  values:
    pod:
      env:
      - $patch: merge
        name: MetaPod__AllowedClients
        value: Test

使用环境

> kustomize version  
v5.4.2

解决方案

问题根源在于HelmRelease的spec.values.pod.env数组未被Kustomize识别为带合并键的列表——Flux的HelmRelease CRD中,values字段是通用对象类型,没有为内部的env数组定义合并规则,导致默认行为是替换整个数组。

要通过Strategic Merge实现追加,需使用$patch: add指令明确告知Kustomize追加新元素:

修正后的patch.yaml

apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: my-api
  namespace: ns
spec:
  values:
    pod:
      env:
      - $patch: add
        name: MetaPod__AllowedClients
        value: Test

执行该patch后,Kustomize会将新的env元素追加到原数组末尾,实现预期的合并效果。

内容的提问来源于stack exchange,提问作者Paul Knopf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 00:22:11