我想在我的kustomize库中添加一个initContainer到我的所有pod(带有特定的注解)。新添加的init容器应该是第一个init容器。我的补丁看起来像这样。
patches:
- target:
kind: Pod
annotationSelector: "database_init=True"
patch: |-
- op: add
path: /spec/initContainers/0
value:
name: database-init
...
这适用于所有已经有init容器的pod。不幸的是,我有没有init容器的pod,补丁失败,错误为add operation does not apply: doc is missing path: \"/spec/initContainers/0\"
。我如何编写适用于所有pod的补丁?
完整示例:
.
├── base
│ ├── kustomization.yaml
│ ├── pod-1.yaml
│ └── pod-2.yaml
└── overlay
└── kustomization.yaml
# cat base/pod-1.yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod-1
annotations:
database_init: True
spec:
initContainers:
- name: something
image: alpine:latest
command: ["sleep", "10" ]
containers:
- name: main
image: alpine:latest
command: [ "sleep", "60" ]
# cat base/pod-2.yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod-2
annotations:
database_init: True
spec:
# initContainers:
# - name: something
# image: alpine:latest
# command: ["sleep", "10" ]
containers:
- name: main
image: alpine:latest
command: [ "sleep", "60" ]
# cat base/kustomization.yaml
resources:
- pod-1.yaml
- pod-2.yaml
# cat overlay/kustomization.yaml
resources:
- ../base
patches:
- target:
kind: Pod
annotationSelector: "database_init=True"
patch: |-
- op: add
path: /spec/initContainers/0
value:
name: database-init
image: alpine:latest
command: [ "sleep", 10 ]
结果:
$ kubectl kustomize overlay
error: add operation does not apply: doc is missing path: "/spec/initContainers/0": missing value
取消pod-2的init容器的注解后,一切正常。
编辑:添加了annotationSelector。
编辑:添加了完整的示例代码。
1条答案
按热度按时间nbysray51#
JSONPatch补丁通常根本无法处理“添加到现有列表或创建新列表”的情况。例如,参见this question。
幸运的是,在Kustomize 5.0.1中,似乎可以使用战略合并补丁来实现您的目标。给定您的示例配置,如果我在
overlay/kustomization.yaml
中放置以下内容:然后运行
kustomize build overlay
会产生以下输出: