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

tit*_*nic 1 kubernetes kustomize

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

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 base\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 app-new-manifest.yaml # I am trying to patch this\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 app\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 app.yaml\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 overlay\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 environment1\n    \xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kustomization.yaml # I want to patch app-new-manifest.yaml in base\n    \xe2\x94\x82\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 environment2\n    \xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kustomization.yaml # No patch. app.yaml will be as is\n    \xe2\x94\x82\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 environment3\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kustomization.yaml # I want to patch app-new-manifest.yaml in base\n
Run Code Online (Sandbox Code Playgroud)\n

当我尝试这样做时,我收到此错误:

\n
'/base/app/app-new-manifest.yaml' is not in or below '/overlays/environment1'\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

任何有关此的想法都将受到高度赞赏,谢谢!

\n

编辑:

\n

添加 /base/app/kustomization.yaml

\n
resources:\n  - app.yaml\n
Run Code Online (Sandbox Code Playgroud)\n

添加 /overlays/environment1/kustomization.yaml

\n
apiVersion: kustomize.config.k8s.io/v1beta1\nkind: Kustomization\n\nresources:\n  - ../../base/app\n\npatchesStrategicMerge:\n  - ../../base/app/app-new-manifest.yaml # Patch new manifest\n
Run Code Online (Sandbox Code Playgroud)\n

定制版本:

\n
{Version:kustomize/v4.2.0 GitCommit:d53a2ad45d04b0264bcee9e19879437d851cb778 BuildDate:2021-07-01T00:44:28+01:00 GoOs:darwin GoArch:amd64}\n
Run Code Online (Sandbox Code Playgroud)\n

lar*_*sks 5

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

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 base\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 overlay\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 patched_based\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 environment1\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 environment2\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 environment3\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
resources:\n  - ../base\n\npatchesStrategicMerge:\n  - app-new-manifest.yaml\n
Run Code Online (Sandbox Code Playgroud)\n

overlay/environment1和 中overlay/environment3,您有:

\n
resources:\n   - ../patched_base\n
Run Code Online (Sandbox Code Playgroud)\n

而在 中overlay/environment2,您有:

\n
resources:\n  - ../../base\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
    \n
  • 您只需要该补丁的一个实例
  • \n
  • 您可以从每个单独的覆盖层中选择是否使用补丁
  • \n
\n