如何替换或找到 kustomize 的正确路径
how to replace or find correct path for kustomize
我有部署,我想替换 liveness probe 部分中的“路径”值。 kustomize 中的正确路径是什么?
- patch: |-
- op: replace
path: ??????????
value:
https://xyz.staging.something.eu/ping
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-http
spec:
containers:
- name: liveness
image: k8s.gcr.io/liveness
args:
- /server
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 3
periodSeconds: 3
是yaml路径。您按照从父节点向下到要指定的 leaf-node 的节点。
由于您想要 livenessProbe
的 httpGet
上的 path
节点,它将以 livenessProbe.httpGet.path
.
结尾
livenessProbe 的父节点有点棘手,注意它是列表的一个元素containers
。您可以通过索引或属性 (EG name
) 指定它。所以 containers[0]
或 containers[name=liveness]
.
现在我们有 containers[0].livenessProbe.httpGet.path
。缺少的根节点是spec
,所以spec.containers[0].livenessProbe.httpGet.path
就可以了。
还有很多其他方式可以表达这一点。
https://github.com/wwkimball/yamlpath#illustration 似乎是一个更好的 in-depth 解释。
我正在尝试语法 containers[name=xx]
,当 containers/0
有效时它失败了。我不确定我是否遗漏了某些内容或不受支持,无法找到有关 Kustomize 语法的更多示例。
详情下方
检查了 kustomize 版本:
- v4.5.4
- v4.5.2
test.yaml:
---
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-container
env:
- name: environment
value: stage
- name: api_port
value: "8080"
image: docker.io/bitname/posgresql:latest
...
...
kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
...
...
patchesJson6902:
- target:
version: v1
kind: Pod
name: test-pod
path: replace.yaml
replace.yaml
- op: replace
path: "/spec/containers[name=test-container]/env/0/value"
value: "dev"
# doesn't work: `Error: replace operation does not apply: doc is missing path" /spec/containers[name=test-container]/env/0/value: missing value
- op: replace
path: "/spec/containers/0/env/0/value"
value: "dev"
# works as expected
谢谢!
我有部署,我想替换 liveness probe 部分中的“路径”值。 kustomize 中的正确路径是什么?
- patch: |-
- op: replace
path: ??????????
value:
https://xyz.staging.something.eu/ping
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-http
spec:
containers:
- name: liveness
image: k8s.gcr.io/liveness
args:
- /server
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 3
periodSeconds: 3
是yaml路径。您按照从父节点向下到要指定的 leaf-node 的节点。
由于您想要 livenessProbe
的 httpGet
上的 path
节点,它将以 livenessProbe.httpGet.path
.
livenessProbe 的父节点有点棘手,注意它是列表的一个元素containers
。您可以通过索引或属性 (EG name
) 指定它。所以 containers[0]
或 containers[name=liveness]
.
现在我们有 containers[0].livenessProbe.httpGet.path
。缺少的根节点是spec
,所以spec.containers[0].livenessProbe.httpGet.path
就可以了。
还有很多其他方式可以表达这一点。 https://github.com/wwkimball/yamlpath#illustration 似乎是一个更好的 in-depth 解释。
我正在尝试语法 containers[name=xx]
,当 containers/0
有效时它失败了。我不确定我是否遗漏了某些内容或不受支持,无法找到有关 Kustomize 语法的更多示例。
详情下方
检查了 kustomize 版本:
- v4.5.4
- v4.5.2
test.yaml:
---
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-container
env:
- name: environment
value: stage
- name: api_port
value: "8080"
image: docker.io/bitname/posgresql:latest
...
...
kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
...
...
patchesJson6902:
- target:
version: v1
kind: Pod
name: test-pod
path: replace.yaml
replace.yaml
- op: replace
path: "/spec/containers[name=test-container]/env/0/value"
value: "dev"
# doesn't work: `Error: replace operation does not apply: doc is missing path" /spec/containers[name=test-container]/env/0/value: missing value
- op: replace
path: "/spec/containers/0/env/0/value"
value: "dev"
# works as expected
谢谢!