如何找到所有带有任何标签的k8s对象,其中包含一些单词



例如,我想找到所有带有标签的clusterroles,标签值中包含单词prometheus。

到目前为止,我知道该怎么做:

mark@D-LP0003:~$ kubectl get clusterrole --show-labels | grep prometheus
prometheus                                                             2020-09-15T17:56:31Z   app=prometheus,chart=prometheus-11.7.0,component=server,heritage=Helm,release=prometheus
prometheus-grafana-clusterrole                                         2020-09-15T17:46:55Z   app.kubernetes.io/instance=prometheus,app.kubernetes.io/managed-by=Helm,app.kubernetes.io/name=grafana,app.kubernetes.io/version=7.1.5,helm.sh/chart=grafana-5.6.5
prometheus-kube-prometheus-prometheus                                  2020-09-15T17:46:55Z   app.kubernetes.io/managed-by=Helm,app=kube-prometheus-stack-prometheus,chart=kube-prometheus-stack-9.4.2,heritage=Helm,release=prometheus
prometheus-kube-prometheus-prometheus-psp                              2020-09-15T17:46:55Z   app.kubernetes.io/managed-by=Helm,app=kube-prometheus-stack-prometheus,chart=kube-prometheus-stack-9.4.2,heritage=Helm,release=prometheus
prometheus-kube-state-metrics                                          2020-09-15T17:46:55Z   app.kubernetes.io/instance=prometheus,app.kubernetes.io/managed-by=Helm,app.kubernetes.io/name=kube-state-metrics,helm.sh/chart=kube-state-metrics-2.8.14
psp-prometheus-kube-state-metrics                                      2020-09-15T17:46:55Z   app.kubernetes.io/instance=prometheus,app.kubernetes.io/managed-by=Helm,app.kubernetes.io/name=kube-state-metrics,helm.sh/chart=kube-state-metrics-2.8.14
psp-prometheus-prometheus-node-exporter                                2020-09-15T17:46:55Z   app.kubernetes.io/managed-by=Helm,app=prometheus-node-exporter,chart=prometheu -node-exporter-1.11.2,heritage=Helm,jobLabel=node-exporter,release=prometheus
system:prometheus                                                      2020-09-23T01:24:32Z   app=prometheus
mark@D-LP0003:~$    

但我想知道这是否是我能做的最好的事情?因为如果我只想获得对象的名称,那么我需要进行进一步的shell处理,而不是使用kubectl get工具(如-o namejsonpath(,尽管它就像管道连接到cut -d' ' -f1一样简单

发布为Community Wiki以提高可见性。

根据@Max Lobur的评论,您可以使用-o custom-columns

然而,当您将使用--show-labels-o=custom-columns=时,您将得到错误:

$ kubectl get clusterrole --show-labels -o=custom-columns='DATA:metadata.name' | grep kubernetes.io/cluster-service=
true
error: --show-labels option cannot be used with custom-columns=DATA:metadata.name printer

但当您将使用精确的label name时,就像下面的示例一样,您根本不需要使用grep

$ kubectl get clusterrole -l=kubernetes.io/cluster-service=true
NAME                                     AGE
gce:beta:kubelet-certificate-bootstrap   24h
gce:beta:kubelet-certificate-rotation    24h
kubelet-api-admin                        24h
stackdriver:fluentd-gcp                  24h
stackdriver:metadata-agent               24h
system:metrics-server                    24h

并用-o=custom-columns输出

$ kubectl get clusterrole -l=kubernetes.io/cluster-service=true -o=custom-columns='DATA:metadata.name'
DATA
gce:beta:kubelet-certificate-bootstrap
gce:beta:kubelet-certificate-rotation
kubelet-api-admin
stackdriver:fluentd-gcp
stackdriver:metadata-agent
system:metrics-server

此外,您还可以使用Max Lobur个人解决方案。

我最近在python中做了类似的smth,最后在客户端上进行了过滤https://github.com/verygood-ops/kube-janitor/blob/master/kube_janitor/resources/ns.py#L28-我需要grep标签键,而不是值。

最新更新