Jer*_*ba6 7 annotations get kubernetes
我想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
Run Code Online (Sandbox Code Playgroud)
sac*_*hin 11
我有一个带有注释 prometheus.io/scrape="true" 的部署
我可以通过以下方式获得具有该注释的部署
kubectl get deploy -o=jsonpath='{.items[?(@.spec.template.metadata.annotations.prometheus\.io/scrape=="true")].metadata.name}'
Run Code Online (Sandbox Code Playgroud)
上面使用了 Jsonpath 概念,文档可以在这里找到
在您的情况下,命令可能类似于
kubectl get deploy -o=jsonpath='{.items[?(@.spec.template.metadata.annotations.stork\.libopenstorage\.org/skipresource=="true")].metadata.name}'
Run Code Online (Sandbox Code Playgroud)
这个概念也可以应用于其他 kubernetes 资源。另一个可能有助于理解早期命令的命令是
kubectl get deployment -o=json
Run Code Online (Sandbox Code Playgroud)
无法在服务器端通过注释进行过滤,但您可以获取所有 Pod 或部署的列表并在本地过滤它,巧妙地使用-o=jsonpath或使用jq我认为更直观的方法。
例如,获取不存在该特定注释的所有部署"true"
kubectl get deployment -o json| jq '.items[].metadata|select(.annotations."stork.libopenstorage.org/skipresource"!="true")|.name'
Run Code Online (Sandbox Code Playgroud)
或者对于具有注释的 pod 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'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4173 次 |
| 最近记录: |