如何为多个kustomization.yaml文件使用统一补丁目录?
可行解决方案
你直接引用../patches目录失败的原因是:Kustomize的patchesStrategicMerge字段不支持直接指定目录作为补丁源,它需要明确指向文件,或通过通配符/复用配置的方式间接加载目录内的补丁。以下是三种可行的实现方式:
方法一:通配符批量加载补丁文件
适用于Kustomize v4.0及以上版本,直接用通配符匹配补丁目录下的所有YAML文件,无需逐个列出。修改directory1和directory2中的kustomization.yaml:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: numaflow-system resources: - service-a.yaml patchesStrategicMerge: - ../patches/*.yaml
该配置会自动加载patches目录下所有.yaml后缀的补丁文件,并作用到匹配的Service-A资源上。
方法二:将补丁目录转为独立Kustomization配置
- 在
patches目录下新建kustomization.yaml,列出需要应用的补丁文件:
# patches/kustomization.yaml apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization patchesStrategicMerge: - service-a-patch.yaml # 替换为你的实际补丁文件名
- 修改
directory1和directory2中的kustomization.yaml,将patches目录作为资源引入:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: numaflow-system resources: - service-a.yaml - ../patches
Kustomize会合并patches目录的配置,自动将补丁应用到对应资源。
方法三:用Component组件复用补丁(Kustomize v3.10+)
Component是Kustomize专为复用配置设计的机制,适合长期复用的补丁场景:
- 在
patches目录下创建component.yaml:
# patches/component.yaml apiVersion: kustomize.config.k8s.io/v1alpha1 kind: Component patchesStrategicMerge: - service-a-patch.yaml # 替换为你的实际补丁文件名
- 修改
directory1和directory2中的kustomization.yaml,添加组件引用:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: numaflow-system resources: - service-a.yaml components: - ../patches
组件中的补丁会自动匹配并作用到同种类、同命名空间、同名的Service-A资源上。
内容的提问来源于stack exchange,提问作者vmayer
相关产品推荐
相关产品推荐

