我可以将kubectl get pods
与某种支持基于容器环境变量获取单个 pod 的字段选择器或选择器一起使用吗?
我想得到这个豆荚,而且只有成千上万个豆荚中的这个豆荚,基于ENVIRONMENT_VARIABLE
的价值与kubectl
.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
namespace: default
spec:
containers:
- env:
- name: ENVIRONMENT_VARIABLE
value: abc123
image: my-images
imagePullPolicy: IfNotPresent
name: my-pod
kubectl get pods --field-selector
否,不支持字段
kubectl get pods -l
它不是一个标签
我还能尝试什么,如果有的话?
我有一个带有环境变量的 podmy-pod
,PORT
值8080
如下:
metadata:
...
name: my-pod
...
spec:
containers:
- env:
- name: PORT
value: "8080"
...
我可以使用kubectl
来过滤这个豆荚,例如:
$ kubectl get pods --all-namespaces
-o=jsonpath=
'{range .items[*]}{.metadata.name}{"t"}{.spec.containers[*].env[?(@.name=="PORT")]}{"n"}{end}' |
grep 8080
output is:
my-pod map[name:PORT value:8080]
因此,您可以尝试:
kubectl get pods --all-namespaces
-o=jsonpath=
'{range .items[*]}{.metadata.name}{"t"}{.spec.containers[*].env[?(@.name=="ENVIRONMENT_VARIABLE")]}{"n"}{end}' |
grep abc123
viajq
...
按名称
kubectl get pods --all-namespaces --chunk-size=0 -o json |
jq '.items[] | select(.spec.containers[].env[]?.name == "ENVNAME")
| .metadata.name'
按值
kubectl get pods --all-namespaces --chunk-size=0 -o json |
jq '.items[] | select(.spec.containers[].env[]?.value == "AVALUE")
| .metadata.name'
按名称和值
kubectl get pods --all-namespaces --chunk-size=0 -o json |
jq '.items[] | select(.spec.containers[].env[]? | .name == "ENVNAME" and .value == "AVALUE")
| .metadata.name'
或者有适用于大多数语言的 API 客户端库。如果将--v=9
添加到kubectl
命令,它将输出它正在访问的终结点以收集数据。在这种情况下:https://api-server/api/v1/pods