Kustomize - 合并多个 configMapGenerator

Mah*_*yar 9 kubernetes configmap kustomize

所以我正在处理这样的结构:

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 1\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 env-vars\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 2\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 env-vars\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 env-vars\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 shared\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 env-vars\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 kustomization.yaml\n
Run Code Online (Sandbox Code Playgroud)\n

而每个级别内的环境变量都有一些环境变量并且

\n
$cat kustomization.yaml\nbases:\n- 1/\n- 2/\n\nnamePrefix: toplevel-\n\nconfigMapGenerator:\n  - name: env-cm\n    behavior: merge\n    envs:\n    - env-vars\n
Run Code Online (Sandbox Code Playgroud)\n
$cat 1/kustomization.yaml\nbases:\n- ./../shared\n\nnamePrefix: first-\n\nconfigMapGenerator:\n  - name: env-cm\n    behavior: merge\n    envs:\n    - env-vars\n
Run Code Online (Sandbox Code Playgroud)\n
$cat 2/kustomization.yaml\nbases:\n- ./../shared\n\nnamePrefix: second-\n\nconfigMapGenerator:\n  - name: env-cm\n    behavior: merge\n    envs:\n    - env-vars\n
Run Code Online (Sandbox Code Playgroud)\n
$cat shared/kustomization.yaml\nconfigMapGenerator:\n  - name: env-cm\n    behavior: create\n    envs:\n    - env-vars\n
Run Code Online (Sandbox Code Playgroud)\n

我本质上是试图创建 2 个具有一些共享值的配置映射(它们是从不同的资源注入的:从shared目录和顶级目录)

\n
\n

kustomize build .查找多个对象失败并出现一些冲突错误:

\n
Error: merging from generator <blah>: found multiple objects <blah> that could accept merge of ~G_v1_ConfigMap|~X|env-cm\n
Run Code Online (Sandbox Code Playgroud)\n

不幸的是,我需要merge在 top-level 上使用configMapGenerator,因为有一些标签被注入到1configmap中2(因此create顶级 configmap 也解决了环境变量,但排除了标签)

\n

任何有关如何解决此问题的建议表示赞赏

\n

moo*_*tte 4

我相信这应该可以解决您的问题。

kustomization.yaml位于base/

$ cat kustomization.yaml 
resources:
- ./1
- ./2

namePrefix: toplevel-

configMapGenerator:
  - name: first-env-cm
    behavior: merge
    envs:
    - env-vars
  - name: second-env-cm
    behavior: merge
    envs:
    - env-vars
Run Code Online (Sandbox Code Playgroud)

在搜索的帮助下,我发现了这个 github 问题,我想说的是同样的问题。然后是对代码进行更改的拉取请求。我们可以看到,在kustomize渲染期间,合并行为已更改为查找currentId而不是originalId。知道我们可以单独处理精确的“预渲染”配置图。