我有一个基本的yaml和一个重叠的yaml,使用“ kustomize”我想将这两个yaml合并。我发生的事情是,在运行kustomize构建时,会出现输出,但是为什么不这样呢?因为在我的案例中,使用Kustomize而不是从覆盖yaml填充自定义信息,而是用覆盖的“容器”替换了基座的整个标题标签。我需要的预期行为是,它应该使用覆盖yaml而不是替换来以某种方式填写缺失的信息。
基本Yaml:
apiVersion: v1
kind: Pod
metadata:
name: temp
labels:
tier: temp
spec:
containers:
- name: temp
image: temp
imagePullPolicy: Always
command: temp
args:
temp
envFrom:
- configMapRef:
name: temp
volumeMounts:
volumes:
重叠式Yaml:
apiVersion: v1
kind: Pod
metadata:
name: temp
labels:
tier: temp
spec:
containers:
volumeMounts:
- name: temppathname
mountPath: /temppath
volumes:
- name: temppathname
hostPath:
type: temp
path: temppath
kustomize构建后的预期结果:
apiVersion: v1
kind: Pod
metadata:
name: temp
labels:
tier: temp
spec:
containers:
- name: temp
image: temp
imagePullPolicy: Always
command: temp
args:
["sleep 9000"]
envFrom:
- configMapRef:
name: temp
volumeMounts:
- name: temppathname
mountPath: /temppath
volumes:
- name: temppathname
hostPath:
type: temp
path: temppath
我会得到什么:
apiVersion: v1
kind: Pod
metadata:
labels:
tier: temp
name: temp
spec:
containers:
volumeMounts:
- name: temppathname
mountPath: /temppath
volumes:
- name: temppathname
hostPath:
type: temp
path: temppath
答案 0 :(得分:1)
在您的base.yaml
中,键containers
的值是一个序列(节点)。在您的overlay.yaml
中,键containers
的值是一个映射。当然,这两个不能合并。
根本不了解kustomize,因为不能合并,似乎合乎逻辑,覆盖将整个序列节点替换为映射节点。您期望覆盖图的映射与恰好是基础序列中的一个项(在本例中为唯一项)的映射合并,这似乎是完全任意的。如果有多个项目,则需要取哪个项目?首先?最后?第五项之前的最后一个是映射?
如果您的overlay.yaml
如下:
apiVersion: v1
kind: Pod
metadata:
name: temp
labels:
tier: temp
spec:
containers:
- volumeMounts: # < created a sequence item here by inserting an item indicator
- name: temppathname
mountPath: /temppath
volumes:
- name: temppathname
hostPath:
type: temp
path: temppath
那我可以理解您的期望(也许可以应用上述更改使其生效,但我没有办法进行测试)。
答案 1 :(得分:0)
我发现处理此问题的最简单方法是使用JSONPatch。我将删除基础的空白字段,如下所示:
apiVersion: v1
kind: Pod
metadata:
name: temp
labels:
tier: temp
spec:
containers:
- name: temp
image: temp
imagePullPolicy: Always
command: temp
args:
temp
envFrom:
- configMapRef:
name: temp
然后在叠加层中创建一个新补丁,例如名为create_volume.yml
:
- op: add
path: /spec/volumes/-
value:
name: temppathname
hostPath:
type: temp
path: temppath
- op: add
path: /spec/containers/0/volumeMounts/-
value:
name: temppathname
mountPath: /temppath
最后在叠加层kustomization.yml
中添加:
patchesJson6902:
- target:
version: v1
kind: Pod
name: temp
path: create_volume.yml
如果它不起作用,则可能必须使用补丁程序目标中的API组。到目前为止,我只修补了部署,而我的目标是:
- target:
group: apps
version: v1
kind: Deployment
name: temp
path: create_volume.yml