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
相关产品推荐
相关产品推荐

