如何通过 API 获取与 Pod 关联的事件?

How do I get Events associated with a Pod via the API?

当我执行 kubectl describe <pod> 时,底部有一个 "Events" 部分,显示与该 pod 相关的事件。例如,原因为 "failedScheduling"、消息为 "Failed for reason PodFitsResources and possibly others"

的事件

如何查询 API 到 return 的事件列表?

如果我调用 /api/v1/namespaces/<ns>/pods/<pod_name>,它不会 return 任何事件。如果我尝试 /api/v1/events 端点,我可以指定一个 labelSelector 参数,但是 pod 的名称不是事件的标签,尽管它在 object.involvedObject.name 字段中。

我可以请求整个事件流并在客户端过滤掉我感兴趣的几个事件,但这似乎有点过分了。 kubectl 能够做到,所以我想一定有一些方法是我想念的。

谢谢。

我认为事件支持涉及对象种类和名称的字段选择器

您还可以将 kubectl 的详细级别提高到 8,以查看网络跟踪以查看它在做什么

如果您仍然想知道 kubectl 如何通过 describe 命令获取事件,请查看以下内容:

https://github.com/kubernetes/kubernetes/blob/b6a0718858876bbf8cedaeeb47e6de7e650a6c5b/pkg/kubectl/describe/versioned/describe.go#L242

如果您看到发生了什么,他们首先获取所请求资源的详细信息(请参阅 https://github.com/kubernetes/kubernetes/blob/b6a0718858876bbf8cedaeeb47e6de7e650a6c5b/pkg/kubectl/describe/versioned/describe.go#L235 ),然后他们从该名称空间获取所有事件并过滤掉所请求资源的事件。见同link.

中的第242行

所以他们没有使用其他一些未记录的 API 或其他方式,你认为矫枉过正的是他们正在做的事情。