我想使用 kubectl 的 LabelSelector 输出“kubectl get pod”的结果,不包括密钥

gen*_*mai 2 kubernetes kubectl

我正在以下 URL 学习 Kubernetes Label Selector。

\n

https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/

\n

基于集合的需求

\n
\n

基于集合的标签要求允许根据一组值过滤键。支持三种运算符:in、notin 和exists(仅限键标识符)。例如:

\n
\n
! partition\n
Run Code Online (Sandbox Code Playgroud)\n
\n

第四个(这个)示例选择所有没有带有键分区标签的资源;未检查值 \xe2\x80\x8b\xe2\x80\x8bar。

\n
\n

我的假设是,如果我指定“!test”,则所有 pod 都会输出,\n我认为指定“!app”时不会输出任何内容。

\n

我想排除此处描述的示例中的密钥和输出,但未获得预期结果。

\n
My @ Pc: ~ / Understanding-K8s / chap04 $ kubectl get pod -l! app\nMy@Pc:~/Understanding-K8s/chap04$ kubectl get pod -l !app\n-bash: !app: event not found\nMy@Pc:~/Understanding-K8s/chap04$ kubectl get pod -l "!app"\n-bash: !app: event not found\nMy@Pc:~/Understanding-K8s/chap04$ kubectl get pod -l "!test"\n-bash: !test: event not found\nMy@Pc:~/Understanding-K8s/chap04$ kubectl get pod -l !test\n-bash: !test: event not found\n\n
Run Code Online (Sandbox Code Playgroud)\n

执行--show-labels命令的结果如下。

\n
My @ Pc: ~ / Understanding-K8s / chap04 $ kubectl get pod --show-labels\nNAME          READY   STATUS    RESTARTS   AGE   LABELS\nnginx-pod-a   1/1     Running   0          89m   app=photo-view,env=stage\nnginx-pod-b   1/1     Running   0          89m   app=imagetrain,env=test\nnginx-pod-c   1/1     Running   0          89m   app=prediction,env=test\nnginx-pod-d   1/1     Running   0          89m   app=photo-view,env=stage\nnginx-pod-e   1/1     Running   0          89m   app=imagetrain,env=stage\nnginx-pod-f   1/1     Running   0          89m   app=photo-view,env=prod\n
Run Code Online (Sandbox Code Playgroud)\n

如何排除预期的键,例如 app 和 env?

\n
\n

tyzbit已经给了我答案,我也尝试过。\n我无法在评论中很好地描述结果,所以我会在这里添加它。

\n
My@Pc:~/Understanding-K8s/chap04$ kubectl get pod -l \'!app\'\nNo resources found in default namespace.\nMy@Pc:~/Understanding-K8s/chap04$ kubectl get pod -l \'!test\'\nNAME          READY   STATUS    RESTARTS   AGE\nnginx-pod-a   1/1     Running   0          162m\nnginx-pod-b   1/1     Running   0          162m\nnginx-pod-c   1/1     Running   0          162m\nnginx-pod-d   1/1     Running   0          162m\nnginx-pod-e   1/1     Running   0          162m\nnginx-pod-f   1/1     Running   0          162m\n
Run Code Online (Sandbox Code Playgroud)\n
\n

Girdhar Singh Rathore 教我 AWK 和 jsonpath。

\n

(也许我写错了格式...)

\nAWK\n
My@Pc:~$ kubectl get pods --show-labels | awk  \'$6 !~/app/ {print ;}\'\nNAME          READY   STATUS    RESTARTS   AGE   LABELS\n\nMy@Pc:~$ kubectl get pods --show-labels | awk  \'$6 !~/test/ {print ;}\'\nNAME          READY   STATUS    RESTARTS   AGE   LABELS\nnginx-pod-a   1/1     Running   0          18m   app=photo-view,env=stage\nnginx-pod-d   1/1     Running   0          18m   app=photo-view,env=stage\nnginx-pod-e   1/1     Running   0          18m   app=imagetrain,env=stage\nnginx-pod-f   1/1     Running   0          18m   app=photo-view,env=prod\n
Run Code Online (Sandbox Code Playgroud)\njson路径\n
My@Pc:~$ kubectl get pods -o jsonpath=\'{range .items[*]} {.metadata.name} {.metadata.labels} {"\\n"} {end}\' | awk \'$2 !~/app/ {print $1}\'\n\nMy@Pc:~$ kubectl get pods -o jsonpath=\'{range .items[*]} {.metadata.name} {.metadata.labels} {"\\n"} {end}\' | awk \'$2 !~/test/ {print $1}\'\nnginx-pod-a\nnginx-pod-d\nnginx-pod-e\nnginx-pod-f\n
Run Code Online (Sandbox Code Playgroud)\n

小智 5

正在!由您的 shell 进行解释,请使用单引号来防止这种情况。正确的语法是:

kubectl get pods -l '!app'