例如,我想找到所有带有标签的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 name
或jsonpath
(,尽管它就像管道连接到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标签键,而不是值。