使用kubectl根据Annotation筛选Pod

Kubernetes v1.18 及更高版本的 kubectl

可以使用 kubectl 的 get 命令结合 --selector 参数和 --output 参数实现。
--selector的适用版本为 Kubernetes v1.18 及更高版本的 kubectl。在这些版本中,--selector 参数支持使用 annotation 和 label 进行选择器表达式的筛选。

具体的命令格式如下:

kubectl get pods --selector='annotation/<annotation-key>=<annotation-value>' --output=<output-format>

其中:

  • <annotation-key>:要筛选的 Annotation 的 Key;
  • <annotation-value>:要筛选的 Annotation 的 Value;
  • <output-format>:输出的格式,可以是 json、yaml 或 wide 等格式。

例如,假设要筛选出所有 Annotation 中 app 等于 myapp 的 Pod,并以 wide 格式输出,可以使用以下命令:

kubectl get pods --selector='annotation/app=myapp' --output=wide

如果要筛选多个 Annotation,可以使用 , 连接多个 Annotation,例如:

kubectl get pods --selector='annotation/app=myapp,annotation/owner=me' --output=wide

以上命令将筛选出 Annotation 中 app 等于 myapp 并且 owner 等于 me 的 Pod,并以 wide 格式输出。


Kubernetes v1.17 及更早版本的 kubectl

kubectl 可能不支持在选择器表达式中使用 annotation。可以尝试使用 kubectl 的 --field-selector 参数进行筛选。
例如,要查找 Annotation 中 app 等于 myapp 的 Pod,可以使用以下命令:

kubectl get pods --field-selector='metadata.annotations["app"] == myapp'

在这个命令中,使用了 --field-selector参数,指定了筛选条件,其中 metadata.annotations["app"] 表示选择 Annotation 中 app 字段,myapp 是要匹配的值。注意,这个值应该使用双引号括起来。

需要注意的是,--field-selector 参数支持的语法和 --selector 参数略有不同,具体语法可以参考 Kubernetes 的官方文档。


Kubernetes v1.13.5 版本的 kubectl

在 Kubernetes v1.13.5 中,kubectl 还不支持在上述方式直接筛选 Annotation。可以使用 jq 来解析 kubectl 输出的 JSON 数据,并从中筛选包含特定 Annotation 的 Pod。

jq是一个针对 JSON 格式数据的命令行工具,可以用来解析和转换 JSON 数据。

例如,要查找 Annotation 中 app 等于 myapp 的 Pod,可以使用以下命令:

kubectl get pods -o json | jq '.items[] | select(.metadata.annotations["app"] == "myapp")'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容