问题描述
我试图查看是否有一种方法,除了使用数组索引之外,还可以将kustomize patchTransformer应用于pod中的特定容器。例如,如果我在一个容器中有3个容器,分别是(0,1,2),并且想修补容器“ 1”,则通常会执行以下操作:
patch: |-
- op: add
path: /spec/containers/1/command
value: ["sh","-c","tail -f /dev/null"]
这在很大程度上取决于保持静态的容器顺序。如果出于任何原因删除了容器“ 1”,则会重新排列阵列,并且容器“ 2”突然变为容器“ 1”,这使我的补丁不再适用。
是否可以通过名称打补丁,定位标签/注释或其他某种机制?
path: /spec/containers/${NAME_OF_CONTAINER}/command
任何见识都会受到赞赏。
解决方法
这更像是https://www.geeksforgeeks.org/storage-for-strings-in-c/补丁程序的限制,以及这样的事实,即容器在K8s吊舱中被定义为一个数组,而不是一个哈希,而哈希在这种情况下会起作用:
path: /spec/containers/${NAME_OF_CONTAINER}/command
您可以尝试使用Json6902。实际上是kubectl apply
的作用。
cat <<EOF > deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
selector:
matchLabels:
run: my-app
replicas: 2
template:
metadata:
labels:
run: my-app
spec:
containers:
- name: my-container
image: myimage
ports:
- containerPort: 80
EOF
cat <<EOF > set_command.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
template:
spec:
containers:
- name: my-app
command: ["sh","-c","tail -f /dev/null"]
EOF
cat <<EOF >./kustomization.yaml
resources:
- deployment.yaml
patchesStrategicMerge:
- set_command.yaml
EOF
✌️