Kubernetes 基于ImagePullBackOff状态,如何使用kubectl和filter查看POD?
我想做一个Kubernetes 基于ImagePullBackOff状态,如何使用kubectl和filter查看POD?,kubernetes,kubectl,Kubernetes,Kubectl,我想做一个kubectl get pods并过滤pod处于ImagePullBackOff状态的位置 我尝试了kubectl get pods--field selector=status.phase=waiting和kubectl get pods--field selector=status.phase=ImagePullBackOff,但没有返回任何结果 我已经用-o JSON查看了JSON输出: ... { "image": "zz
kubectl get pods
并过滤pod处于ImagePullBackOff
状态的位置
我尝试了kubectl get pods--field selector=status.phase=waiting
和kubectl get pods--field selector=status.phase=ImagePullBackOff
,但没有返回任何结果
我已经用-o JSON
查看了JSON输出:
...
{
"image": "zzzzzzzzzzzzzzzz",
"imageID": "",
"lastState": {},
"name": "nginx",
"ready": false,
"restartCount": 0,
"state": {
"waiting": {
"message": "Back-off pulling image \"zzzzzzzzzzzzzzzz\"",
"reason": "ImagePullBackOff"
}
}
}
...
如果我尝试以该值为目标:
kubectl get pods --field-selector=state.waiting=ImagePullBackOff
Error from server (BadRequest): Unable to find "/v1, Resource=pods" that match label selector "", field selector "state.waiting=ImagePullBackOff": field label not supported: state.waiting
您可以使用下面的命令:
kubectl get pods --all-namespaces -o custom-columns=NAMESPACE:metadata.namespace,POD:metadata.name,PodIP:status.podIP,STATE:status.containerStatuses[*].state.waiting.reason | grep ImagePullBackOff
顺便说一句:您的命令kubectl get pods--field selector=state.waiting=ImagePullBackOff
失败,因为kubernetes中没有状态。waiting
选择器。这就是为什么您会看到字段标签不受支持:state.waiting
error
根据和:
Pod的状态字段是一个PodStatus对象,它有一个相位字段
以下是阶段的可能值:
- 未决
- 运行
- 成功
- 失败
- 不为人知
因此,请使用输出。正如您在kubernetes的官方文档中所看到的 支持的字段选择器因Kubernetes资源类型而异。所有资源类型都支持metadata.name和metadata.namespace字段。使用不支持的字段选择器会产生错误 参考: 您可以尝试以下方法:
kubectl get pod --all-namespaces | grep "ImagePullBackOff" | awk '{print $2 " -n " $1}' | xargs kubectl get pod -o json
或:
使用
json
输出和管道通过jq
:
kubectl get pod -o=json | jq '.items[]|select(any( .status.containerStatuses[]; .state.waiting.reason=="ImagePullBackOff"))|.metadata.name'
最后一块
|.metadata.name
意味着它将列出pod名称,而不是整个结构 这是一个令人印象深刻的jq用法!非常感谢。
kubectl get pod -o=json | jq '.items[]|select(any( .status.containerStatuses[]; .state.waiting.reason=="ImagePullBackOff"))|.metadata.name'