Kubectl 只为一个豆荚获得事件

当我运行 kubectl -n abc-namespace describe pod my-pod-zl6m6时,我得到了很多关于 pod 的信息以及最后的 Events。

是否有一种方法可以使用 kubectl describekubectl get命令仅输出 pod 的 Events?

167079 次浏览

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

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

您可以使用 kubectlevent命令。

要筛选特定的 pod,可以使用字段选择器:

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

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

您可以描述 pod,然后在 Events 之后获取代码行数。如果您想要监视它,可以添加一个手表。

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

如果您只希望事件消息处于简短而清晰的视图中,则 @ mszalbach 答案是最好的

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

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

这个答案为 @ 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=[...]`.
    

所有特定于部署的事件

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将会下跌)。

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