【问题标题】:Kubernetes Kustomize patching - Can't patch a file located in baseKubernetes Kustomize 修补 - 无法修补位于基础中的文件
【发布时间】:2022-02-08 09:22:55
【问题描述】:

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

├── 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'

这意味着,当您打补丁时,补丁文件必须位于覆盖而不是基础之下。有什么解决方法可以做到这一点吗?因为将同一个文件复制到每个环境对我来说没有意义。

对此的任何想法将不胜感激,谢谢!

编辑:

添加 /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

自定义版本:

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

【问题讨论】:

  • 请提供 Kustomize 版本信息。此外,提供的错误有一个奇怪的路径:/base/app/app-new-manifest.yaml。 /base 目录下的 kustomization.yaml 是否有正确的资源声明?
  • 刚刚添加了 kustomization.yamls 和版本。好吧,对我来说,这种方式不允许修补位于 base.xml 中的任何文件。我收到此错误:security; file ‘path/base/app/app-new-manifest.yaml’ is not in or below ‘path/overlays/environmen1’ 并且将这个巨大的文件复制到每个环境对我来说也没有意义。 @AndrewSkorkin

标签: kubernetes kustomize


【解决方案1】:

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

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

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

resources:
  - ../base

patchesStrategicMerge:
  - app-new-manifest.yaml

overlay/environment1overlay/environment3 中,您有:

resources:
   - ../patched_base

而在overlay/environment2 中,您有:

resources:
  - ../../base

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

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

【讨论】:

    猜你喜欢
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2021-05-22
    • 2022-01-21
    • 2020-05-01
    • 1970-01-01
    相关资源
    最近更新 更多