过滤基于注释的kubectl get

时间:2020-06-08 14:43:43

标签: kubernetes get annotations

我想根据注释的值过滤kubectl get deploy命令。

类似kubectl get deploy --annotation stork.libopenstorage.org/skipresource!="true"

的东西

目前尚不知道如何执行此操作,我们也不想添加额外的标签。上面两个命令的输出应该如下所示:

kubectl get deploy 
NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
elastalert                  1/1     1            1           33d
es-hq                       1/1     1            1           33d
etcdsnapshots               1/1     1            1           33d
fluentd-aggregator          2/2     2            2           33d
kibana                      1/1     1            1           33d

kubectl get deploy --annotation stork.libopenstorage.org/skipresource!="true"
NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
etcdsnapshots               1/1     1            1           33d
fluentd-aggregator          2/2     2            2           33d
kibana                      1/1     1            1           33d

kubectl get deploy --annotation stork.libopenstorage.org/skipresource="true"
NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
elastalert                  1/1     1            1           33d
es-hq                       1/1     1            1           33d

2 个答案:

答案 0 :(得分:1)

我有一个带有注释prometheus.io/scrape="true“

的部署

我可以通过以下方式获得带有该注释的部署

kubectl get deploy -o=jsonpath='{.items[?(@.spec.template.metadata.annotations.prometheus\.io/scrape=="true")].metadata.name}'

以上使用Jsonpath概念,可以在here

找到该文档

在您的情况下,命令可能像

kubectl get deploy -o=jsonpath='{.items[?(@.spec.template.metadata.annotations.stork\.libopenstorage\.org/skipresource=="true")].metadata.name}'

这个概念也可以应用于其他kubernetes资源。另一个可能有助于理解早期命令的命令是

 kubectl get deployment -o=json

答案 1 :(得分:0)

您试图以与使用标签相同的方式使用注释。事实是注释不应该那样使用。可以实现sachin所述的目标,但这是不切实际的。

Here我们可以阅读:

您不能在Kubernetes中查询批注,并且这不会改变 在可预见的将来。

使用标签将是更好的解决方案。 Here我们可以看到许多标签的用法示例,并且很清楚地说明了使用标签的原因。

我认为这不是您想要的确切答案,但是我认为您正在尝试以困难的方式做某事,并且如果您使用针对该问题而创建的解决方案,也不必像那样您正在努力实现。