kubernetes 如何使用Kubebuilder-v3 / operator-sdk发送事件

jtw3ybtb  于 2022-12-17  发布在  Kubernetes
关注(0)|答案(3)|浏览(181)

X1 E0 F1 X解释说,它谈到了“如何将多个事件批处理到单个协调调用中”。但是,我在此文档中找不到任何有关事件管理的信息。
您能否提供有关如何使用Kubebuilder-v3/operator-sdk发送事件的信息/代码示例?

dy1byipe

dy1byipe1#

官方文档中的This part应该可以回答您的问题:

**Controller的这个业务逻辑是在Reconcile函数中实现的,这个函数取一个ContainerSet的Namespace和Name,允许将多个事件一起批处理到单个Reconcile调用中。**此处显示的函数使用ContainerSet. Spec中指定的副本和映像创建或更新部署。请注意,它为部署设置OwnerReference,以便在删除ContainerSet后在部署上启用垃圾收集。

1.使用命名空间名称读取容器集
1.如果有错误或已删除,则返回
1.从ContainerSetSpec创建新的所需部署规范
1.读取部署并将Deployment.Spec与ContainerSet.Spec进行比较
1.如果观察到的Deployment.Spec与所需规范不匹配-未找到Deployment:创建新部署-已找到部署,需要进行更改:更新部署
您还可以在那里找到代码示例。

blmhpbnm

blmhpbnm2#

既然你问的是关于 * 发送事件 *,你应该使用EventRecorder
book-v1中记录的获取事件记录器的方法用于

mgr.GetRecorder("containerset-controller")

但是,在更新的v3文档中似乎不再存在等效的文档,新的替代方案是:

mgr.GetEventRecorderFor("containerset-controller")

例如:

func newReconciler(mgr manager.Manager) reconcile.Reconciler {
  return &ReconcileContainerSet{
    Client:   mgr.GetClient(),
    scheme:   mgr.GetScheme(),
    recorder: mgr.GetEventRecorderFor("containerset-controller"),
  }
}

得到的record.EventRecorder可以像以前一样在您的协调器中使用:

recorder.Event(&obj, apiv1.EventTypeNormal, "Created", "something was created")

然而,引用的摘录
如何将多个事件批处理到单个协调调用中。
指的是完全不同的东西;即:
协调。对相同名称/命名空间的请求在入队时进行批处理和重复数据消除。这允许控制器正常处理单个对象的大量事件。将多个事件源多路复用到单个对象类型将跨不同对象类型的事件批处理请求。

rxztt3cl

rxztt3cl3#

本页似乎有助于了解如何发送事件:https://book-v1.book.kubebuilder.io/beyond_basics/creating_events.html,使用标准客户端-go事件记录器
但是,对于Kubebuilder v3来说,它不是最新的。
感谢@coderanger在k8s堆栈频道上对这个主题的帮助!

相关问题