2 回答
TA贡献1804条经验 获得超8个赞
您将无法做到这一点,因为此系统被设计为基于级别的,它不是由单个事件更改触发的,而是由从apiserver获取的实际集群状态触发的。
看着你,你会发现在第84行有这样的评论:reconcile.go
协调是基于级别的,这意味着操作不是由单个事件中的更改驱动的,而是由从 apiserver 或本地缓存读取的实际群集状态驱动的。例如,如果响应 Pod 删除事件,则请求不会包含 Pod 已被删除,相反,协调函数会在读取集群状态并看到 Pod 缺失时观察到这一点。
在第44行:
请求包含协调 Kubernetes 对象所需的信息。这包括唯一标识对象的信息 - 其名称和命名空间。它不包含有关任何特定事件或对象内容本身的信息。
TA贡献1829条经验 获得超6个赞
您可以尝试 。WithEventFilter(predicate.Funcs{})
由于在实际删除项后调用协调循环时未执行任何操作,因此删除事件的谓词可以简单地返回 false!还有一个方便的 Funcs 类型,它实现了谓词接口,并允许您传入要用作谓词的函数。将它们放在一起以过滤掉删除事件,我们有:
func (r *CronJobReconciler) SetupWithManager(mgr ctrl.Manager) error {
return ctrl.NewControllerManagedBy(mgr).
For(&batch.CronJob{}).
WithEventFilter(predicate.Funcs{
DeleteFunc: func(e event.DeleteEvent) bool {
// The reconciler adds a finalizer so we perform clean-up
// when the delete timestamp is added
// Suppress Delete events to avoid filtering them out in the Reconcile function
return false
},
}).
Complete(r) }
https://stuartleeks.com/posts/kubebuilder-event-filters-part-1-delete/
- 2 回答
- 0 关注
- 165 浏览
添加回答
举报