eventRecorder生成Events
发布事件
官方文档:https://kubebuilder.io/reference/raising-events.html
从控制器协调功能发布事件对对象通常很有用,因为它们允许用户或任何自动化进程查看特定对象发生的情况并对其做出响应
可以通过运行 kubectl describe <resource kind> <resource name>
,此外,还可以通过运行 kubectl get events
来查看事件
注意:不建议为所有操作发出事件。如果引发太多事件,就会给集群上的解决方案使用者带来糟糕的用户体验。并且它们可能会很难从混乱的事件中过滤出可操作的事件。有关更多信息,请查看 Kubernetes API 约定 https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#events
在控制器上使用 EventRecorder
Reconciler 下添加 Recorder record.EventRecorder
如何能够引发事件
事件是使用 EventRecorder(https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#events)从 Controller发布 的 type CorrelatorOptions struct, 可以通过调用 GetRecorder(name string) Manager
为 Controller 创建事件记录器
if err = (&authcontroller.UserReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
Recorder: mgr.GetEventRecorderFor("user-controller"),
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "User")
os.Exit(1)
}
授权项目创建事件
生成 Events
- object:是此事件所涉及的对象。
- eventtype:是此事件类型,并且是 Normal 或 Warning。(https://github.com/kubernetes/api/blob/6c11c9e4685cc62e4ddc8d4aaa824c46150c9148/core/v1/types.go#L6019-L6024)
- reason:是生成此事件的原因,它应该简短且UpperCameCase格式独特。该值可以自动出现在 wsitch 语句中。(https://github.com/kubernetes/api/blob/6c11c9e4685cc62e4ddc8d4aaa824c46150c9148/core/v1/types.go#L6048)
- message: 旨在供作者查看(https://github.com/kubernetes/api/blob/6c11c9e4685cc62e4ddc8d4aaa824c46150c9148/core/v1/types.go#L6053)
示例:
// The following implementation will raise an event
r.Recorder.Event(cr, "Warning", "Deleting",
fmt.Sprintf("Custom Resource %s is being deleted from the namespace %s",
cr.Name,
cr.Namespace))
添加事件