根据注解过滤kubectl get
Filter kubectl get based on anotation
我想根据注释的值过滤我的 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
我有一个带有注释 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 资源,因为 well.One 可能有助于理解早期命令的其他命令是
kubectl get deployment -o=json
您正在尝试以与使用标签相同的方式使用注释。问题是注释不应该那样使用。正如 所述,可以实现您想要的,但这不切实际。
Here我们可以读到:
You cannot query annotations in Kubernetes, and this will not change
in the foreseeable future.
使用标签会是更好的解决方案。 Here 我们可以看到许多标签的使用示例,并且很清楚为什么使用它是有意义的。
我认为这不是您正在寻找的确切答案,但在我看来,您正在尝试以困难的方式做某事,如果您使用创建的解决方案,则不需要像那样为了你想要实现的目标。
无法在服务器端通过注释进行过滤,但您可以获取所有 pods 或部署的列表并在本地过滤,巧妙地使用 -o=jsonpath
或使用 jq
我觉得更直观。
例如获取特定注释不是 "true"
的所有部署
kubectl get deployment -o json| jq '.items[].metadata|select(.annotations."stork.libopenstorage.org/skipresource"!="true")|.name'
或具有注释 aws.amazon.com/cloudwatch-agent-ignore
:
的 pods
kubectl get pods -n mynamespace -o json| jq '.items[].metadata|select(.annotations."aws.amazon.com/cloudwatch-agent-ignore"!="true")|.name'
我想根据注释的值过滤我的 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
我有一个带有注释 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 资源,因为 well.One 可能有助于理解早期命令的其他命令是
kubectl get deployment -o=json
您正在尝试以与使用标签相同的方式使用注释。问题是注释不应该那样使用。正如
Here我们可以读到:
You cannot query annotations in Kubernetes, and this will not change in the foreseeable future.
使用标签会是更好的解决方案。 Here 我们可以看到许多标签的使用示例,并且很清楚为什么使用它是有意义的。
我认为这不是您正在寻找的确切答案,但在我看来,您正在尝试以困难的方式做某事,如果您使用创建的解决方案,则不需要像那样为了你想要实现的目标。
无法在服务器端通过注释进行过滤,但您可以获取所有 pods 或部署的列表并在本地过滤,巧妙地使用 -o=jsonpath
或使用 jq
我觉得更直观。
例如获取特定注释不是 "true"
kubectl get deployment -o json| jq '.items[].metadata|select(.annotations."stork.libopenstorage.org/skipresource"!="true")|.name'
或具有注释 aws.amazon.com/cloudwatch-agent-ignore
:
kubectl get pods -n mynamespace -o json| jq '.items[].metadata|select(.annotations."aws.amazon.com/cloudwatch-agent-ignore"!="true")|.name'