1
- # 5.8 event
1
+ # 5.8 event 源码解析
2
2
3
3
## 概述
4
4
5
- k8s的Event事件是一种资源对象 ,用于展示集群内发生的情况,k8s系统中的各个组件会将运行时发生的各种事件上报给apiserver 。可以通过kubectl get event 或 kubectl describe pod podName 命令显示事件,查看k8s集群中发生了哪些事件。
5
+ k8s的 Event 事件是一种资源对象 ,用于展示集群内发生的情况,k8s 系统中的各个组件会将运行时发生的各种事件上报给 apiserver 。可以通过kubectl get event 或 kubectl describe pod podName 命令显示事件,查看k8s集群中发生了哪些事件。
6
6
7
- apiserver 会将Event事件存在etcd集群中,为避免磁盘空间被填满,故强制执行保留策略:在最后一次的事件发生后,删除1小时之前发生的事件。
8
-
9
- 如:
7
+ apiserver 会将 Event 事件存在 etcd 集群中,为避免磁盘空间被填满,故强制执行保留策略:在最后一次的事件发生后,删除1小时之前发生的事件。
10
8
11
9
```
12
10
Events:
@@ -18,17 +16,17 @@ Events:
18
16
Normal Started 13s kubelet, 192.168.13.130 Started container hpatest
19
17
```
20
18
21
- 当集群中的 node 或 pod 异常时,大部分用户会使用 kubectl 查看对应的 events。
22
19
23
- Event事件管理机制主要有三部分组成:
20
+
21
+ Event 事件管理机制主要有三部分组成:
24
22
25
23
* EventRecorder:是事件生成者,k8s组件通过调用它的方法来生成事件;
26
24
* EventBroadcaster:事件广播器,负责消费EventRecorder产生的事件,然后分发给broadcasterWatcher;
27
25
* broadcasterWatcher:用于定义事件的处理方式,如上报apiserver;
28
26
29
27
## 源码分析
30
28
31
- ### 1.Event资源数据结构
29
+ ### 1. Event 数据结构
32
30
33
31
``` go
34
32
// pkg/apis/core/types.go
@@ -118,7 +116,7 @@ type Event struct {
118
116
119
117
```
120
118
121
- ###   ; 2.EventBroadcaster源码分析
119
+ ###   ; 2. EventBroadcaster源码分析
122
120
123
121
#### 2.1 EventRecorder记录事件(事件生产者)
124
122
@@ -809,7 +807,7 @@ func (e *eventLogger) eventObserve(newEvent *v1.Event, key string) (*v1.Event, [
809
807
810
808
eventObserve方法里面会去查找缓存中的记录,然后对count进行自增后更新到缓存中。
811
809
812
- ### 2. 使用示例
810
+ ### 3. 使用示例
813
811
814
812
``` go
815
813
const (
@@ -833,7 +831,7 @@ c.recorder.Event(user, corev1.EventTypeNormal, successSynced, messageResourceSyn
833
831
834
832
StartRecordingToSink会调用StartEventWatcher,StartEventWatcher方法里面会异步的调用 watcher.ResultChan()方法获取到broadcasterWatcher的result管道,result管道里面的数据就是Broadcaster的distribute方法进行分发的。
835
833
836
- ### 4.总结
834
+ ### 4. 总结
837
835
838
836
  ; 了解完 events 的整个处理流程后,再梳理一下整个流程:
839
837
0 commit comments