首先展示一张大致的流程图来说明k8s记录事件的大致流程,否则后面一头扎进代码里面可能会看懵圈。
下面是一段使用示例,可以自己写一下,然后根据示例来一层层分析代码,每一步我都做了简单的注释,清晰明了
broadcaster := record.NewBroadcaster() #创建广播
broadcaster.StartLogging (func(format string, args ...interface{}) { #注册watcher
klog.Info(fmt.Sprintf(format, args))
})
broadcaster.StartRecordingToSink(&corev1.EventSinkImpl{Interface: clientset.CoreV1().Events("")}) #注册watcher
recorder := broadcaster.NewRecorder(scheme.Scheme, v1.EventSource{Component: "cluster-controller"}) #获取EventRecorder
cm, _ := clientset.CoreV1().ConfigMaps(metav1.NamespaceSystem).Get(context.Background(), "coredns", metav1.GetOptions{})
recorder.Event(cm, v1.EventTypeWarning, "custom", "jhgaog test") #记录事件
接下来就是无聊的代码分析了,请各位一定要坚持看完,相信你一定会有收获的
链接:kubernetes 事件(Event)源码分析—三大杀器之EventRecorder
参考:
https://www.kubernetes.org.cn/1031.html
https://github.com/kubernetes/kubernetes