当我运行
kubectl -n abc-namespace describe pod my-pod-zl6m6
时,我最终获得了有关 pod 的大量信息以及事件。
有没有办法使用
kubectl describe
或 kubectl get
命令仅输出 pod 的事件?
您可以使用
event
的kubectl
命令。
要过滤特定的 Pod,您可以使用字段选择器:
kubectl get event --namespace abc-namespace --field-selector involvedObject.name=my-pod-zl6m6
要查看哪些字段是可能的,您可以在任何事件上使用
kubectl describe
。
这个答案为 @mszalbach's 的答案提供了背景。
您应该首先了解事件对象的数据结构。您可以使用
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"
},
...
那么,你可以这样做
kubectl get events --field-selector involvedObject.name=[...]`.
为什么不显示所有事件并 grep 查找您的 podname:
kubectl get events --all-namespaces | grep -i $podname
您可以描述您的 pod,然后 grep 事件后的行数。如果您想监控,可以添加手表。
watch "kubectl describe pod my-pod-zl6m6 | grep -A20 Events"
特定于部署的所有事件
kubectl get events --field-selector involvedObject.name=$DEPLOYMENT_NAME -n $NAMESPACE
除正常之外的所有事件
get events --field-selector type!=Normal -A
有一个新的 kubectl 命令可以满足您的要求:
kubectl alpha events pod my-pod-zl6m6
(在某些时候,
alpha
将会被删除)。
如果您只想以简短而清晰的方式查看事件消息,@mszalbach 答案是最好的。
但是如果您希望所有事件及其所有元素完全显示,您可以运行:
kubectl describe event [POD_NAME] --namespace [POD's_NAMESPACE]
或者,您可以使用 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 对象。
在使用最佳答案中包含的解决方案时请注意这一点。您也可以将附加的过滤器选择器添加到命令中。
kubectl get event --namespace abc-namespace --field-selector involvedObject.name=my-pod-zl6m6,involvedObject.kind=Pod
对我来说,其他答案看起来不错。但是,了解这一点很有价值 在引擎盖下。
json
数据从etcd
转换为可读的。kubectl get events -o json -n default
您要访问的值是
"involvedObject.name"
JSONPATH 格式
kubectl get events --field-selector=involvedObject.name=demo-deployment-5f4fd5649b-rks6f