kubectl:对地图使用自定义列输出

时间:2019-08-08 18:13:15

标签: kubernetes kubectl jsonpath

我想将注释的特定值添加到kubectl自定义列字段中。我可以在这样的资源上获取所有当前注释:

kubectl get pvc -o custom-columns=NAME:.metadata.name,"ANNOTATIONS":.metadata.annotations -n monitoring

这将返回一个地图:

NAME                                 ANNOTATIONS
prometheus-k8s-db-prometheus-k8s-0   map[pv.kubernetes.io/bind-completed:yes pv.kubernetes.io/bound-by-controller:yes volume.beta.kubernetes.io/storage-provisioner:kubernetes.io/aws-ebs]
prometheus-k8s-db-prometheus-k8s-1   map[pv.kubernetes.io/bind-completed:yes pv.kubernetes.io/bound-by-controller:yes volume.beta.kubernetes.io/storage-provisioner:kubernetes.io/aws-ebs]

并且据我所知,考虑到kubectl -o custom-columns使用JSONpath,我认为我可以做到这一点:

kubectl get pvc -o custom-columns=NAME:.metadata.name,"ANNOTATIONS":".metadata.annotations['pv.kubernetes.io/bind-completed']" -n monitoring

但似乎不是。有办法吗?

1 个答案:

答案 0 :(得分:4)

好的,我知道了。比我想象的要容易。

Annotations是返回时的标准JSON元素。问题是kubectl的JSONPath解析器在元素中存在点问题,因此您只需要转义它们即可。这是一个示例:

kubectl get pvc -o custom-columns=NAME:.metadata.name,"ANNOTATIONS":".metadata.annotations.pv\.kubernetes\.io/bind-completed" -n monitoring

NAME                                 ANNOTATIONS
prometheus-k8s-db-prometheus-k8s-0   yes
prometheus-k8s-db-prometheus-k8s-1   yes