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/environment1
和 overlay/environment3
中,您有:
resources:
- ../patched_base
而在 overlay/environment2
中,您有:
resources:
- ../../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/environment1
和 overlay/environment3
中,您有:
resources:
- ../patched_base
而在 overlay/environment2
中,您有:
resources:
- ../../base
我认为这可以解决您的所有需求:
- 您只需要一个补丁实例
- 您可以选择是否使用每个叠加层的补丁