如何在Kubernetes中将OR选择器与标签一起使用?

vkc1a9a2  于 2023-03-22  发布在  Kubernetes
关注(0)|答案(5)|浏览(111)

OR表达式如何与选择器和标签一起使用?

selector:
    app: myapp
    tier: frontend

上面匹配标签为app==myappANDtier=frontend的pod。
但是OR表达式可以用吗?
app==myapptier=frontend

kkbh8khc

kkbh8khc1#

现在你可以这样做:

kubectl get pods -l 'environment in (production, qa)'

https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#list-and-watch-filtering

lpwwtiir

lpwwtiir2#

在您的案例中不支持OR。
您可以尝试基于集合的标签选择器。https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#resources-that-support-set-based-requirements

vwkv1x7d

vwkv1x7d3#

允许的关键字是=, ==, !=, in, notin, exists(only the key identifier)===是同义词。in可以用于OR运算。

35g0bw71

35g0bw714#

如果可以使用jq,请尝试以下操作:

kubectl get nodes --output=json \
  | jq --raw-output '.items[].metadata | select (.labels."node-role.kubernetes.io/master" == "" or .labels."node-role.kubernetes.io/control-plane" == "") | .name'

或者使用go-template,不使用外部工具:

kubectl get nodes -o go-template='{{range $item := .items}}{{range $taint := $item.spec.taints}}{{if and ( or ( eq $taint.key "node-role.kubernetes.io/master") (eq $taint.key "node-role.kubernetes.io/control-plane") ) (eq $taint.effect "NoSchedule")}}{{printf "%s\n" $item.metadata.name}}{{end}}{{end}}{{end}}'
j8ag8udp

j8ag8udp5#

您可以使用“&&”将结果组合为伪OR

kubectl get pods -l="postgres-operator.crunchydata.com/control-plane" --no-headers -o name **&&** kubectl get pods -l="postgres-operator.crunchydata.com/cluster" --no-headers -o name

下面是一个合并结果并获取所有列的方法。
它从两个结果中获取pod的名称,并使用它们来获得单个结果。

echo $(kubectl get pods -l="postgres-operator.crunchydata.com/control-plane" --no-headers -o name && kubectl get pods -l="postgres-operator.crunchydata.com/cluster" --no-headers -o name) | xargs kubectl get

样品结果

NAME                                     READY   STATUS      RESTARTS   AGE
pgo-66f576957d-lmzls                     1/1     Running     0          10d
pgo-upgrade-84b7c9db8d-wr4jv             1/1     Running     0          10d
postgres-ha-backup-qmxb-zwq9c            0/1     Completed   0          3d23h
postgres-ha-xxx1-5xc4-0                  4/4     Running     0          3d23h
postgres-ha-xxx1-6mpv-0                  4/4     Running     0          3d23h
postgres-ha-xxx1-k9sv-0                  4/4     Running     0          3d23h
postgres-ha-pgbouncer-55cc6bcd98-ftqfj   2/2     Running     0          3d23h
postgres-ha-repo-host-0                  2/2     Running     0          3d23h

相关问题