【问题标题】:Extract k8s events specific column提取 k8s 事件特定列
【发布时间】:2020-04-24 06:29:42
【问题描述】:

我正在排查活性探测故障。我可以使用这种方法从 k8s 事件中提取特定条目

k get events --sort-by=.metadata.creationTimestamp | grep Liveness

我只想获取导致问题的 pod。
我正在考虑使用管道进行切割,但我不确定应该使用哪个分隔符来获取特定列。

在哪里可以找到与用于打印 kubectl 输出的特定 k8s 资源(事件)相关的分隔符?

欢迎提出其他建议

更新 到目前为止,这些是满足我特定需求的最佳选择(不使用额外工具):

k get events -o jsonpath='{range .items[*]}{.involvedObject.name}/{.involvedObject.namespace}: {.message}{"\n"}{end}' | grep Liveness

k get events -o custom-columns=POD:.involvedObject.name,NS:.involvedObject.namespace,MGG:.message | grep Liveness

【问题讨论】:

    标签: kubernetes kubectl


    【解决方案1】:

    kubernetes 中有一个特性叫做jsonpath

    使用此在线工具验证您的 jsonpath 是否正确:https://jsonpath.com/

    使用此在线工具轻松浏览 json 密钥,因此您无需再手动输入密钥名称):http://jsonpathfinder.com/

    所以你的命令将是:

    k get events --sort-by=.metadata.creationTimestamp --jsonpath '{ .xxxxxx }' 
    

    【讨论】:

    • 感谢@BMW 推荐这个工具,听起来很有用,我会去看看。是的,我知道 jsonpath,但我也可以将它用于过滤目的,例如我正在使用“grep Liveness”吗?我理解 jsonpath 更多地用于提取/查询字段,而字段选择器应该是过滤数据的方式(但它不适用于任何资源字段 - 我在哪里可以找到支持的字段 x 每个 k8s 资源?)
    • 能否提供一些示例代码供我参考?我在本地运行events 命令,但没有看到这个键Liveness。帮不上忙。
    • 您必须创建一个带有失败 livenessProbe 的 pod,这样您才能在 k8s 事件中获取字符串,如上面@rebello 帖子所述
    【解决方案2】:

    Jsonpath 有点受限于与过滤器和条件一起使用,也许jq 会更适合您的情况。

    我使用jq 进行了测试以过滤我的探针的输出: 我已经使用 link 中的 yaml 进行了测试

    来自这个 pod 的探测失败消息是:

    Liveness probe failed: cat: can't open '/tmp/healthy': No such file or directory

    这个消息在json中的路径是.items[*].message

    使用jq,我只能过滤包含“Liveness probe failed”的message:并显示 pod 名称:

    k get events --sort-by=.metadata.creationTimestamp -o json | jq -c '.items[] | select(.message|test("Liveness probe failed")) | .metadata.name'
    
    

    输出是:

    "liveness-exec.15e791c17b80a3c1"
    

    您可以使用 jq 格式化消息,以获得更有用的输出,以及 pod 详细信息。

    尝试查看此参考链接:

    ./jq

    filter array based on values

    希望对你有帮助!

    【讨论】:

    • 这很好,但我想知道它是否可以使用标准的 k8s 工具和标准的 linux 工具(例如 grep、cut..)来完成
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 2021-07-27
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多