Kustomize能否合并Base与Overlay中的PatchesJson6902补丁?
Kustomize patchesJson6902 覆盖问题解答
这是预期行为吗?
是。Kustomize中,当base和overlay的kustomization.yaml都定义了patchesJson6902字段时,overlay的配置会完全替换base中的对应字段,而非追加合并。这意味着base里的补丁会被覆盖,最终只有overlay中的补丁生效。
拆分补丁的可行方法及替代方案
方案1:改用patches字段(推荐)
Kustomize 3.1及以上版本引入了patches字段,它支持合并多个补丁(无论定义在base还是overlay中),补丁会按base到overlay的顺序依次执行。
修改base的kustomization.yaml:
… patches: - target: { group: networking.k8s.io, version: v1, kind: Ingress, name: ingress-frontend } path: ingress-letsencrypt.patch.yaml patchType: json6902
修改overlay的kustomization.yaml:
bases: - ../../base/04-public-letsencrypt-ingress/ patches: - target: { group: networking.k8s.io, version: v1, kind: Ingress, name: ingress-frontend } path: ingress-tls-hostname.patch.yaml patchType: json6902
这样base中的通用补丁和overlay中的实例专属补丁都会被执行,实现补丁拆分的需求。
方案2:将通用补丁整合到overlay(适用于简单场景)
如果不想改用patches字段,可以把base中的通用补丁内容复制到overlay的patchesJson6902列表中,让overlay包含所有需要执行的补丁:
bases: - ../../base/04-public-letsencrypt-ingress/ patchesJson6902: - target: { group: networking.k8s.io, version: v1, kind: Ingress, name: ingress-frontend } path: ingress-letsencrypt.patch.yaml - target: { group: networking.k8s.io, version: v1, kind: Ingress, name: ingress-frontend } path: ingress-tls-hostname.patch.yaml
但这种方式会导致通用补丁重复出现在多个overlay中,不利于维护,只适合实例数量少的场景。
方案3:使用组件(Component)拆分通用补丁
如果需要在多个overlay中复用通用补丁,可以将通用补丁封装成Kustomize组件:
- 创建组件目录
components/letsencrypt-patch,在其中创建kustomization.yaml:
patches: - target: { group: networking.k8s.io, version: v1, kind: Ingress, name: ingress-frontend } path: ingress-letsencrypt.patch.yaml patchType: json6902
并放入ingress-letsencrypt.patch.yaml文件。
- 在base或overlay中引用该组件:
# base/04-public-letsencrypt-ingress/kustomization.yaml … components: - ../../components/letsencrypt-patch
# overlay/04-public-letsencrypt-ingress/kustomization.yaml bases: - ../../base/04-public-letsencrypt-ingress/ patches: - target: { group: networking.k8s.io, version: v1, kind: Ingress, name: ingress-frontend } path: ingress-tls-hostname.patch.yaml patchType: json6902
这种方式能更好地复用通用补丁,适合多实例场景。
内容的提问来源于stack exchange,提问作者Christian Fuchs
相关产品推荐
相关产品推荐

