例如,我想要查找标签值中包含单词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:~$ 但我想知道这是不是我能做的最好的了?因为如果我只想获得对象的名称,那么就需要做进一步的外壳处理,而不是使用kubectl get工具(比如-o name或jsonpath),即使它像通过管道传输到cut -d' ' -f1一样简单
发布于 2020-09-29 16:43:47
发布为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中做了类似的事情,最后我在客户端https://github.com/verygood-ops/kube-janitor/blob/master/kube_janitor/resources/ns.py#L28上进行了过滤-我需要grep标签键,而不是值。
https://stackoverflow.com/questions/64089468
复制相似问题