问题
我想查找30分钟内重启次数超过3次的pod,然后使用Kubectl -o jsonpath
时使用逻辑运算符&&
报错:unrecognized character in action: U+0026 '&'
使用在线jsonpath格式网站 https://www.lddgo.net/string/jsonpath, 验证,可以正常输出:
解决
官方文档上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)"'
命令可以正常输出: