kubernetes kubectl get events only for a pod

bgibtngc  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(9)|浏览(158)

当我运行kubectl -n abc-namespace describe pod my-pod-zl6m6时,我得到了很多关于pod的信息,沿着了最后的事件。
有没有一种方法可以使用kubectl describekubectl get命令只输出pod的事件?

rdrgkggo

rdrgkggo1#

您可以使用kubectlevent命令。
要过滤特定的pod,您可以使用字段选择器:

kubectl get event --namespace abc-namespace --field-selector involvedObject.name=my-pod-zl6m6

要查看哪些字段是可能的,您可以在任何事件上使用kubectl describe

2eafrhcq

2eafrhcq2#

这个答案为@mszalbach的答案提供了背景。

1.首先,您应该了解events对象的数据结构。您可以使用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=[...]`.
bvn4nwqk

bvn4nwqk3#

为什么不显示podname的所有事件和grep:

kubectl get events --all-namespaces  | grep -i $podname
v09wglhw

v09wglhw4#

你可以描述你的pod,然后在你的Events之后grep行数。如果你想监视它,你可以添加一个手表。

watch "kubectl describe pod my-pod-zl6m6 | grep -A20 Events"
dvtswwa3

dvtswwa35#

针对展开的所有事件

kubectl get events --field-selector involvedObject.name=$DEPLOYMENT_NAME -n $NAMESPACE

除正常外的所有事件

get events --field-selector type!=Normal -A
6rqinv9w

6rqinv9w6#

有一个新的kubectl命令可以完成你要求的任务:

kubectl alpha events pod my-pod-zl6m6

(At在某个点,alpha将被丢弃)。

gr8qqesn

gr8qqesn7#

如果你只想在一个简短而清晰的视图中看到事件消息,@mszalbach answer is the best one
但是如果你想让所有事件及其所有元素都完整地显示出来,你可以运行:

kubectl describe event [POD_NAME] --namespace [POD's_NAMESPACE]
rsaldnfx

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对象。
在使用最佳答案中包含的解决方案时,请注意这一点。您也可以将额外的筛选器选择器添加到命令中。

kubectl get event --namespace abc-namespace --field-selector involvedObject.name=my-pod-zl6m6,involvedObject.kind=Pod
fcipmucu

fcipmucu9#

对我来说,其他答案看起来不错。但是,了解引擎盖下的东西是有价值的。

Step 1.如何查看原始数据?因为默认情况下,k8s会自动将json数据从etcd转换为可读。

  • 因此,您应该使用这样的命令来查看每个项目的内容和结构。
kubectl get events -o json -n default

然后你会得到很多这样的项目

步骤2.使用--field-selector合并,将上面输出的值与想要访问的值合并,如下所示

您要访问的值为"involvedObject.name" JSONPATH格式

==>最终命令

kubectl get events --field-selector=involvedObject.name=demo-deployment-5f4fd5649b-rks6f

输出

相关问题