当我运行kubectl -n abc-namespace describe pod my-pod-zl6m6时,我得到了很多关于pod的信息,沿着了最后的事件。有没有一种方法可以使用kubectl describe或kubectl get命令只输出pod的事件?
kubectl -n abc-namespace describe pod my-pod-zl6m6
kubectl describe
kubectl get
rdrgkggo1#
您可以使用kubectl的event命令。要过滤特定的pod,您可以使用字段选择器:
kubectl
event
kubectl get event --namespace abc-namespace --field-selector involvedObject.name=my-pod-zl6m6
要查看哪些字段是可能的,您可以在任何事件上使用kubectl describe。
2eafrhcq2#
这个答案为@mszalbach的答案提供了背景。
1.首先,您应该了解events对象的数据结构。您可以使用kubectl get events --output json来检查数据结构。
kubectl get events --output json
$ kubectl get events --output json { "apiVersion": "v1", "items": [ { "apiVersion": "v1", "count": 259, "eventTime": null, "firstTimestamp": "2020-04-15T12:00:46Z", "involvedObject": { <------ **this** "apiVersion": "v1", "fieldPath": "spec.containers{liveness}", "kind": "Pod", "name": "liveness-exec", <------ **this** "namespace": "default", "resourceVersion": "725991", "uid": "3f497636-e601-48bc-aec8-72b3edec3d95" }, ...
1.然后,你可以这样做
kubectl get events --field-selector involvedObject.name=[...]`.
bvn4nwqk3#
为什么不显示podname的所有事件和grep:
kubectl get events --all-namespaces | grep -i $podname
v09wglhw4#
你可以描述你的pod,然后在你的Events之后grep行数。如果你想监视它,你可以添加一个手表。
watch "kubectl describe pod my-pod-zl6m6 | grep -A20 Events"
dvtswwa35#
针对展开的所有事件
kubectl get events --field-selector involvedObject.name=$DEPLOYMENT_NAME -n $NAMESPACE
除正常外的所有事件
get events --field-selector type!=Normal -A
6rqinv9w6#
有一个新的kubectl命令可以完成你要求的任务:
kubectl alpha events pod my-pod-zl6m6
(At在某个点,alpha将被丢弃)。
alpha
gr8qqesn7#
如果你只想在一个简短而清晰的视图中看到事件消息,@mszalbach answer is the best one。但是如果你想让所有事件及其所有元素都完整地显示出来,你可以运行:
kubectl describe event [POD_NAME] --namespace [POD's_NAMESPACE]
rsaldnfx8#
或者,您可以使用jq工具。使用以下命令:
kubectl get events -n namespace-name -ojson | jq '.items[] | select ((.involvedObject.name=="pod-name") and (.involvedObject.kind=="Pod"))'
请注意,我在select子句.involvedObject.kind=="Pod"中使用了一个附加条件,以过滤掉与我们想要的Pod具有相同名称和命名空间的所有非Pod对象。在使用最佳答案中包含的解决方案时,请注意这一点。您也可以将额外的筛选器选择器添加到命令中。
.involvedObject.kind=="Pod"
kubectl get event --namespace abc-namespace --field-selector involvedObject.name=my-pod-zl6m6,involvedObject.kind=Pod
fcipmucu9#
对我来说,其他答案看起来不错。但是,了解引擎盖下的东西是有价值的。
json
etcd
kubectl get events -o json -n default
然后你会得到很多这样的项目
您要访问的值为"involvedObject.name" JSONPATH格式
"involvedObject.name"
kubectl get events --field-selector=involvedObject.name=demo-deployment-5f4fd5649b-rks6f
输出
9条答案
按热度按时间rdrgkggo1#
您可以使用
kubectl
的event
命令。要过滤特定的pod,您可以使用字段选择器:
要查看哪些字段是可能的,您可以在任何事件上使用
kubectl describe
。2eafrhcq2#
这个答案为@mszalbach的答案提供了背景。
1.首先,您应该了解events对象的数据结构。您可以使用
kubectl get events --output json
来检查数据结构。1.然后,你可以这样做
bvn4nwqk3#
为什么不显示podname的所有事件和grep:
v09wglhw4#
你可以描述你的pod,然后在你的Events之后grep行数。如果你想监视它,你可以添加一个手表。
dvtswwa35#
针对展开的所有事件
除正常外的所有事件
6rqinv9w6#
有一个新的kubectl命令可以完成你要求的任务:
(At在某个点,
alpha
将被丢弃)。gr8qqesn7#
如果你只想在一个简短而清晰的视图中看到事件消息,@mszalbach answer is the best one。
但是如果你想让所有事件及其所有元素都完整地显示出来,你可以运行:
rsaldnfx8#
或者,您可以使用jq工具。使用以下命令:
请注意,我在select子句
.involvedObject.kind=="Pod"
中使用了一个附加条件,以过滤掉与我们想要的Pod具有相同名称和命名空间的所有非Pod对象。在使用最佳答案中包含的解决方案时,请注意这一点。您也可以将额外的筛选器选择器添加到命令中。
fcipmucu9#
对我来说,其他答案看起来不错。但是,了解引擎盖下的东西是有价值的。
Step 1.如何查看原始数据?因为默认情况下,k8s会自动将
json
数据从etcd
转换为可读。然后你会得到很多这样的项目
步骤2.使用--field-selector合并,将上面输出的值与想要访问的值合并,如下所示
您要访问的值为
"involvedObject.name"
JSONPATH格式==>最终命令
输出