在Kubernetes中,我有一个基本的kustomize软件包,其中有两个补丁,每个补丁都调整了基础的不同方面-一个用于大型部署,另一个用于使用旧映像而不是当前映像。有没有办法我可以创建一个“组合的”补丁-具有两个更改的补丁,而无需复制大而旧的补丁内容?
- base/
- large-deployment-patch/
- legacy-image-patch/
当我尝试将两个补丁简单地用作组合补丁中的基础时,会出现如下错误:
Error: ../legacy: id '"~G_v1_ConfigMap|~X|~P|pg-database|~S"' already used
答案 0 :(得分:2)
正如@Jamie 在他的评论中提到的,如果两个“补丁”中的任何一个包含 kustomization.yaml
文件,其中包含您的 base/
目录作为资源,它将是一个覆盖。每个叠加层都会生成您基地中所有资源的副本并对其进行修改。
如果您的基础创建了一个名为 ConfigMap
的 pg-database
并且您的任何叠加都没有修改此资源的名称,那么您最终将得到两个名为 ConfigMap
的 pg-database
.
总而言之:每个叠加层都会创建资源的副本,并且您不能在同一个 kind
中拥有具有相同 name
的相同 namespace
的两个资源。
通常的做法是在叠加层中添加 namePrefix
或 nameSuffix
转换器以避免冲突并为资源提供更有意义的名称。