EventBroadcaster

Kubernetes的事件(Event)是一种资源对象,用于展示集群内发生的情况,Kubernetes系统中的各个组件会将运行时发生的各种事件上报给Kubernetes API Server。例如,调度器做了什么决定,某些Pod为什么从节点中驱逐。可以通过kubectl get event kubectldescribe pod命令显示事件,查看Kubernetes集群中发生了哪些事件。执行命令后,默认情况下只会显示最近(1小时内)发生的事件。

此处的Event是Kubernetes所管理的Event资源对象,而非ETCD集群监控机制产生的回调事件,需要注意区分。

由于Kubernetes的事件是一种资源对象,因此它们存储在Kubernetes API Server的ETCD集群中。为了避免磁盘空间被填满,强制执行保留策略:在最后一次事件发生后,删除1小时之前发生的事件。Kubernetes系统以Pod资源为核心,Deployment、StatefulSet、ReplicaSet、DaemonSet、CronJob等,最终都会创建出Pod。Kubernetes事件也是围绕Pod进行的,在Pod生命周期内的关键步骤中都会产生事件消息。Event资源的数据结构体定义在core资源组下。源码路径为k8s.io/api/core/v1/types.go。

Event结构体的定义如下。

type Event struct {
    metav1.TypeMeta
    metav1.ObjectMeta
    InvolvedObject ObjectReference
    Reason string
    Message string
    Source EventSource
    FirstTimestamp metav1.Time
    LastTimestamp metav1.Time
    Count int32
    Type string
    EventTime metav1.MicroTime
    Series *EventSeries
    Action string
    Related *ObjectReference
    ReportingController string
    ReportingInstance string
}

Kubernetes中资源对象的事件非常重要,例如,管理员可以通过获取Pod生命周期的事件,来掌握一个Pod在调度、拉取镜像、启动、重启等各阶段的耗时,或者诊断一个Pod出现启动失败或重启等异常的原因。Pod的事件,也是在实际生产中使用最频繁的事件。

在自定义编写Controller的过程中,也可以把一些重要的信息通过EventBroadcaster存入ETCD,以便观察控制的对象的状态。

posted @ 2023-02-26 14:29  muzinan110  阅读(19)  评论(0编辑  收藏  举报