我想根据注解过滤名称空间。我不希望命名空间的注解为components\.gke\.io/layer=="addon"
。
我尝试了kubectl get ns -o=jsonpath='{.items[?(@.metadata.annotations.components\.gke\.io/layer=="addon")].metadata.name}'
命令,至少它给了我结果,但它不是以正常的表格格式来的,当你执行kubectl get ns
的方式来的。
然而,这不是我想要的,我想要的是相反的,这意味着过滤掉这些GKE行。我试了kubectl get ns -o=jsonpath='{.items[?(@.metadata.annotations.components\.gke\.io/layer=="")].metadata.name}'
,但它不工作,它给予空结果。
我尝试格式化,但无法创建所需的命令。任何人之前都尝试过-(1.)过滤出具有特定注解(2.)格式的名称空间,以表格格式输出。
1条答案
按热度按时间3mpgtkmj1#
我认为(!?)你不能在
kubectl
的JSONPath实现中使用否定。一旦将
--output
标志与kubectl
一起使用,就无法使用默认表格格式呈现命令的输出。例如,Bashcolumn
可以提供类似的输出。考虑使用通用的JSON处理工具,如
jq
。使用独立工具的一个优点是,一旦熟悉了该工具,就可以将其与任何发出JSON的命令一起使用(而不仅仅是与
kubectl
一起使用)。关于
FILTER
:1.返回一个JSON数组,通过管道传输到
@tsv
(制表符格式的输出)1.第一个数组条目是一个数组(!)的栏标题
.items
通过select
传输,该select
过滤不包含annotation
的命名空间1.将未筛选的命名空间名称和状态作为JSON数组项发出
然后,
jq
发出的制表符格式(不再是JSON)被输送到column
,column
将结果格式化为表格。