我想使用kubectl的LabelSelector输出"kubectl get pod"排除key的结果
I want to output the result of "kubectl get pod" excluding the key using LabelSelector of kubectl
我正在下面的 URL 学习 Kubernetes 标签选择器。
https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
基于集合的要求
Set-based label requirements allow filtering keys according to a set of values. Three kinds of operators are supported: in, notin and exists (only the key identifier). For example:
! partition
The fourth(This) example selects all resources without a label with key partition; no values are checked.
我的假设是,如果我指定“!test”,所有pods都会被输出,
我认为指定“!app”时没有任何输出。
我想按照此处描述的示例排除键和输出,但没有获得预期的结果。
My @ Pc: ~ / Understanding-K8s / chap04 $ kubectl get pod -l! app
My@Pc:~/Understanding-K8s/chap04$ kubectl get pod -l !app
-bash: !app: event not found
My@Pc:~/Understanding-K8s/chap04$ kubectl get pod -l "!app"
-bash: !app: event not found
My@Pc:~/Understanding-K8s/chap04$ kubectl get pod -l "!test"
-bash: !test: event not found
My@Pc:~/Understanding-K8s/chap04$ kubectl get pod -l !test
-bash: !test: event not found
执行--show-labels命令的结果如下
My @ Pc: ~ / Understanding-K8s / chap04 $ kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-pod-a 1/1 Running 0 89m app=photo-view,env=stage
nginx-pod-b 1/1 Running 0 89m app=imagetrain,env=test
nginx-pod-c 1/1 Running 0 89m app=prediction,env=test
nginx-pod-d 1/1 Running 0 89m app=photo-view,env=stage
nginx-pod-e 1/1 Running 0 89m app=imagetrain,env=stage
nginx-pod-f 1/1 Running 0 89m app=photo-view,env=prod
如何排除 app 和 env 等预期密钥?
tyzbit给了我答案,我也试过了。
评论里没办法很好的描述结果,所以我会在这里补充。
My@Pc:~/Understanding-K8s/chap04$ kubectl get pod -l '!app'
No resources found in default namespace.
My@Pc:~/Understanding-K8s/chap04$ kubectl get pod -l '!test'
NAME READY STATUS RESTARTS AGE
nginx-pod-a 1/1 Running 0 162m
nginx-pod-b 1/1 Running 0 162m
nginx-pod-c 1/1 Running 0 162m
nginx-pod-d 1/1 Running 0 162m
nginx-pod-e 1/1 Running 0 162m
nginx-pod-f 1/1 Running 0 162m
Girdhar Singh Rathore 教我 AWK 和 jsonpath。
(可能是我格式写错了...)
AWK
My@Pc:~$ kubectl get pods --show-labels | awk ' !~/app/ {print ;}'
NAME READY STATUS RESTARTS AGE LABELS
My@Pc:~$ kubectl get pods --show-labels | awk ' !~/test/ {print ;}'
NAME READY STATUS RESTARTS AGE LABELS
nginx-pod-a 1/1 Running 0 18m app=photo-view,env=stage
nginx-pod-d 1/1 Running 0 18m app=photo-view,env=stage
nginx-pod-e 1/1 Running 0 18m app=imagetrain,env=stage
nginx-pod-f 1/1 Running 0 18m app=photo-view,env=prod
json路径
My@Pc:~$ kubectl get pods -o jsonpath='{range .items[*]} {.metadata.name} {.metadata.labels} {"\n"} {end}' | awk ' !~/app/ {print }'
My@Pc:~$ kubectl get pods -o jsonpath='{range .items[*]} {.metadata.name} {.metadata.labels} {"\n"} {end}' | awk ' !~/test/ {print }'
nginx-pod-a
nginx-pod-d
nginx-pod-e
nginx-pod-f
!
正在被您的 shell 解释,请使用单引号来防止这种情况。正确的语法是:
kubectl get pods -l '!app'
您可以使用awk
kubectl get pods --show-labels | awk ' !~/app/ {print ;}'
或-o jsonpath
kubectl get pods -o jsonpath='{range .items[*]} {.metadata.name} {.metadata.labels} {"\n"} {end}' | awk ' !~/app/ {print }'
或选择器
kubectl get pods -l '!app'
我正在下面的 URL 学习 Kubernetes 标签选择器。
https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
基于集合的要求
Set-based label requirements allow filtering keys according to a set of values. Three kinds of operators are supported: in, notin and exists (only the key identifier). For example:
! partition
The fourth(This) example selects all resources without a label with key partition; no values are checked.
我的假设是,如果我指定“!test”,所有pods都会被输出, 我认为指定“!app”时没有任何输出。
我想按照此处描述的示例排除键和输出,但没有获得预期的结果。
My @ Pc: ~ / Understanding-K8s / chap04 $ kubectl get pod -l! app
My@Pc:~/Understanding-K8s/chap04$ kubectl get pod -l !app
-bash: !app: event not found
My@Pc:~/Understanding-K8s/chap04$ kubectl get pod -l "!app"
-bash: !app: event not found
My@Pc:~/Understanding-K8s/chap04$ kubectl get pod -l "!test"
-bash: !test: event not found
My@Pc:~/Understanding-K8s/chap04$ kubectl get pod -l !test
-bash: !test: event not found
执行--show-labels命令的结果如下
My @ Pc: ~ / Understanding-K8s / chap04 $ kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-pod-a 1/1 Running 0 89m app=photo-view,env=stage
nginx-pod-b 1/1 Running 0 89m app=imagetrain,env=test
nginx-pod-c 1/1 Running 0 89m app=prediction,env=test
nginx-pod-d 1/1 Running 0 89m app=photo-view,env=stage
nginx-pod-e 1/1 Running 0 89m app=imagetrain,env=stage
nginx-pod-f 1/1 Running 0 89m app=photo-view,env=prod
如何排除 app 和 env 等预期密钥?
tyzbit给了我答案,我也试过了。 评论里没办法很好的描述结果,所以我会在这里补充。
My@Pc:~/Understanding-K8s/chap04$ kubectl get pod -l '!app'
No resources found in default namespace.
My@Pc:~/Understanding-K8s/chap04$ kubectl get pod -l '!test'
NAME READY STATUS RESTARTS AGE
nginx-pod-a 1/1 Running 0 162m
nginx-pod-b 1/1 Running 0 162m
nginx-pod-c 1/1 Running 0 162m
nginx-pod-d 1/1 Running 0 162m
nginx-pod-e 1/1 Running 0 162m
nginx-pod-f 1/1 Running 0 162m
Girdhar Singh Rathore 教我 AWK 和 jsonpath。
(可能是我格式写错了...)
AWKMy@Pc:~$ kubectl get pods --show-labels | awk ' !~/app/ {print ;}'
NAME READY STATUS RESTARTS AGE LABELS
My@Pc:~$ kubectl get pods --show-labels | awk ' !~/test/ {print ;}'
NAME READY STATUS RESTARTS AGE LABELS
nginx-pod-a 1/1 Running 0 18m app=photo-view,env=stage
nginx-pod-d 1/1 Running 0 18m app=photo-view,env=stage
nginx-pod-e 1/1 Running 0 18m app=imagetrain,env=stage
nginx-pod-f 1/1 Running 0 18m app=photo-view,env=prod
json路径
My@Pc:~$ kubectl get pods -o jsonpath='{range .items[*]} {.metadata.name} {.metadata.labels} {"\n"} {end}' | awk ' !~/app/ {print }'
My@Pc:~$ kubectl get pods -o jsonpath='{range .items[*]} {.metadata.name} {.metadata.labels} {"\n"} {end}' | awk ' !~/test/ {print }'
nginx-pod-a
nginx-pod-d
nginx-pod-e
nginx-pod-f
!
正在被您的 shell 解释,请使用单引号来防止这种情况。正确的语法是:
kubectl get pods -l '!app'
您可以使用awk
kubectl get pods --show-labels | awk ' !~/app/ {print ;}'
或-o jsonpath
kubectl get pods -o jsonpath='{range .items[*]} {.metadata.name} {.metadata.labels} {"\n"} {end}' | awk ' !~/app/ {print }'
或选择器
kubectl get pods -l '!app'