k8s

kubectl jsonpath过滤使用&&报错

问题

我想查找30分钟内重启次数超过3次的pod,然后使用Kubectl -o jsonpath时使用逻辑运算符&&报错:unrecognized character in action: U+0026 '&'

file

使用在线jsonpath格式网站 https://www.lddgo.net/string/jsonpath, 验证,可以正常输出:

file

解决

官方文档上kubectl是支持jsonpath的,参考:https://kubernetes.io/zh-cn/docs/reference/kubectl/jsonpath/ 。但是没有写明支持&&

在其他网站上也有同样的问题:https://stackoverflow.com/questions/73153298/how-to-do-2-filters-if-k8s-jsonpath-is-missing-and-condition

https://kb.novaordis.com/index.php/JSONPath

解决方式是参考:https://access.redhat.com/solutions/7004229

即不使用jsonpath,使用jq命令的and/or来替代&&/||。应该是kubectl命令不支持。

所以命令应该修改为:

kubectl get po -A -o json | jq -r '.items[] | select(.status.containerStatuses != null) | select(.status.containerStatuses[0].restartCount >= 3 and .status.containerStatuses[0].lastState.terminated.startedAt >= "2023-11-13T08:11:35Z") | "\(.metadata.namespace) \(.metadata.name)"'

命令可以正常输出:

file

分类: k8s
0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
最旧
最新 最多投票
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x