kubectl 仅获取 pod 的事件

问题描述 投票:0回答:9

当我运行

kubectl -n abc-namespace describe pod my-pod-zl6m6
时,我最终获得了有关 pod 的大量信息以及事件。

有没有办法使用

kubectl describe
kubectl get
命令仅输出 pod 的事件?

kubernetes kubectl
9个回答
316
投票

您可以使用

event
kubectl
命令。

要过滤特定的 Pod,您可以使用字段选择器:

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

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

kubectl describe


66
投票

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

  1. 您应该首先了解事件对象的数据结构。您可以使用

    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"
                },
                ...
    
  2. 那么,你可以这样做

    kubectl get events --field-selector involvedObject.name=[...]`. 
    

30
投票

为什么不显示所有事件并 grep 查找您的 podname:

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

13
投票

您可以描述您的 pod,然后 grep 事件后的行数。如果您想监控,可以添加手表。

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

10
投票

特定于部署的所有事件

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

除正常之外的所有事件

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

7
投票

有一个新的 kubectl 命令可以满足您的要求:

kubectl alpha events pod my-pod-zl6m6

(在某些时候,

alpha
将会被删除)。


4
投票

如果您只想以简短而清晰的方式查看事件消息,@mszalbach 答案是最好的

但是如果您希望所有事件及其所有元素完全显示,您可以运行:

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

2
投票

或者,您可以使用 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

0
投票

对我来说,其他答案看起来不错。但是,了解这一点很有价值 在引擎盖下。

步骤1.如何查看原始数据?因为k8s默认会自动将
json
数据从
etcd
转换为可读的。

  • 所以你应该使用这样的cmd来查看每个项目的结构。
kubectl get events -o json -n default 

然后你会得到很多这样的物品

第 2 步。使用 --field-selector 与您想要从上面的输出访问的值结合起来,如下所示

您要访问的值是

"involvedObject.name"
JSONPATH 格式

==> 最终命令

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

输出

© www.soinside.com 2019 - 2024. All rights reserved.