K8S – python client获取events

在上一篇博客《K8S – python client获取POD日志》说过了如何利用python client获取POD的标准输出/标准错误输出。

但是,能够得到log的前提是容器曾经拉起,那么程序输出到终端的内容才可以被获取到。

但是容器被拉起之前还有很多步骤,比如下载镜像失败、分配资源失败、PVC无法找到等等,这些错误则不是log可以解决的,而需要events事件。

POD拉起过程中的会通过产生event来记录发生的事情,我们只需要获取一下做展示即可排查启动故障,不过event不会一直存在,过一阵就会被清理了,所以仅仅当POD启动失败的时候观察错误原因是没有问题的。

实现

要调用的方法是list_namespaced_event,属于corev1,其API地址:https://github.com/kubernetes-client/python/blob/master/kubernetes/docs/CoreV1Api.md#list_namespaced_event

我调用的方式是这样的:

默认是返回的是该namespace最近发生过的所有event,但是我们只关心某个POD的event,所以需要筛选。

这里利用field_selector进行字段筛选,注意它并不是对POD对象的属性做筛选,而是对Event对象做筛选。

Event就是Event,它可能是其他资源部署中创建的,Event就是一种独立的K8S资源类型,那么Event是个啥东西呢?请点击文档:https://github.com/kubernetes-client/python/blob/master/kubernetes/docs/V1Event.md

我们可以先不传field_selector得到namespace下面的所有的event,返回值是一个EventList,其中items字段是一个数组,里面每一个是一个Event对象,而我们的field_selecotr就是作用在Event上面的。

我们观察一下返回值:

从中可知:

  • involved_object:事件的生产者是谁,借助这个字段过滤POD名字即可(如果对deployment感兴趣就过滤deployment的名字,自己试试即可)。
  • message:事件的可读描述信息,我们只需要展示这个即可。

本文完

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~