Kubernetes Kustomize 修补 - 无法修补位于 base 中的文件

Kubernetes Kustomize patching - Can't patch a file located in base

我有一个巨大的补丁文件,我想将其应用于特定的叠加层。我通常会在覆盖层下修补文件,因为它应该是。但是文件是一样的,我不想将它复制到每个覆盖层。如果我可以将我的补丁文件 app-new-manifest.yaml 保留在 base 下,并在 kustomization.yaml 中用一行在 overlay 下对其进行补丁,那就太棒了。

├── base
│   ├── app-new-manifest.yaml # I am trying to patch this
│   ├── kustomization.yaml
│   ├── app
│   │   ├── app.yaml
│   │   └── kustomization.yaml
└── overlay
    └── environment1
    │    ├── kustomization.yaml # I want to patch app-new-manifest.yaml in base
    │
    └── environment2
    │    ├── kustomization.yaml # No patch. app.yaml will be as is
    │
    └── environment3
        ├── kustomization.yaml # I want to patch app-new-manifest.yaml in base

当我尝试这样做时,出现此错误:

'/base/app/app-new-manifest.yaml' is not in or below '/overlays/environment1'

这意味着,当你打补丁时,补丁文件必须位于overlay下而不是base下。有什么解决方法吗?因为将相同的文件复制到每个环境对我来说没有意义。

如有任何想法,我们将不胜感激,谢谢!

编辑:

添加/base/app/kustomization.yaml

resources:
  - app.yaml

添加/overlays/environment1/kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - ../../base/app

patchesStrategicMerge:
  - ../../base/app/app-new-manifest.yaml # Patch new manifest

kustomize 版本:

{Version:kustomize/v4.2.0 GitCommit:d53a2ad45d04b0264bcee9e19879437d851cb778 BuildDate:2021-07-01T00:44:28+01:00 GoOs:darwin GoArch:amd64}

您不能包含当前目录之外的文件,但您可以包含另一个包含 kustomize.yaml 文件的目录。所以像这样组织你的布局:

.
├── base
└── overlay
    ├── patched_based
    ├── environment1
    ├── environment2
    └── environment3

overlay/patched_base 中,放置您的补丁文件和 kustomization 文件,例如:

resources:
  - ../base

patchesStrategicMerge:
  - app-new-manifest.yaml

overlay/environment1overlay/environment3 中,您有:

resources:
   - ../patched_base

而在 overlay/environment2 中,您有:

resources:
  - ../../base

我认为这可以解决您的所有需求:

  • 您只需要一个补丁实例
  • 您可以选择是否使用每个叠加层的补丁