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")'