【问题标题】:kubectl get events only for a podkubectl 仅获取 pod 的事件
【发布时间】:2019-01-26 14:31:24
【问题描述】:

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

有没有办法使用 kubectl describekubectl get 命令仅输出 pod 的事件?

【问题讨论】:

    标签: kubernetes kubectl


    【解决方案1】:

    您可以使用kubectlevent命令。

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

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

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

    【讨论】:

    • 这对我不起作用。我得到:Error: unknown flag: --field-selector
    • 官方文档从1.12开始就提到了field-selector。自从支持此功能以来,我找不到任何提示(找到 2015 年的一些票证)。所以检查你的 kubectl 版本和帮助输出,看看你的 kubectl 版本有什么可能。
    • 是的。我有一个旧版本。 :(
    • @toddcscar 您仍然可以将更新版本的 kubectl 与较旧的服务器版本一起使用:例如,这将针对 v1.11 API 在 kubectl v1.14 上运行
    • @toddcscar 您使用的是get 还是describe?这发生在我身上,因为我首先尝试使用 describe 并且该命令中没有这样的选项
    【解决方案2】:

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

    【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 虽然这提供了结果,但我更喜欢带有field-selector 开关的那个:)
    • 当然,这无疑是更清洁的解决方案。刚刚了解了--field-selector开关。
    • 你甚至不能 grep podname,因为它不是用kubectl get events 命令打印的
    【解决方案4】:

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

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

    【讨论】:

    • watch 是插件吗?
    • no watch 不是任何类型的插件,即使您可以使用“-w”选项并获得相同的结果
    【解决方案5】:

    如果您只希望事件消息在一个简短而清晰的视图中,@mszalbachanswer is the best one

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

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

    【讨论】:

      【解决方案6】:

      部署特定的所有事件

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

      除普通以外的所有事件

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

      【讨论】:

      • 谢谢!这也适用于像这样的 pod 名称 kubectl get events --field-selector involvedObject.name=$POD_NAME -n $NAMESPACE
      猜你喜欢
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 2022-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-01
      • 2020-07-18
      相关资源
      最近更新 更多