我在 Controller 中使用 kubebuilder 框架,并且我想完全忽略给定系统 namespace 列表中的事件。我认为谓词一定是最好的选择,因此我有以下代码
...
WithEventFilter(predicate.Funcs{
GenericFunc: func(e event.GenericEvent) bool {
namespace := e.Object.GetNamespace()
if _, ok := systemNs[namespace]; ok {
// ignore events from system namespaces
return false
}
return true
},
}).
但是,我仍然收到来自所有命名空间的事件,而不仅仅是我允许的事件。 这是谓词的正确且有效的用例吗?
最佳答案
Generic is called in response to an event of an unknown type or a synthetic event triggered as a cron or external trigger request - e.g. reconcile Autoscaling, or a Webhook.
大多数时候,协调会在创建
、更新
或删除
时触发,因此您需要过滤这些事件。
WithEventFilter(predicate.Funcs{
CreateFunc: func(e event.CreateEvent) bool {
namespace := e.Object.GetNamespace()
if _, ok := systemNs[namespace]; ok {
// ignore events from system namespaces
return false
}
return true
},
UpdateFunc: func(e event.UpdateEvent) bool {
namespace := e.ObjectNew.GetNamespace()
if _, ok := systemNs[namespace]; ok {
// ignore events from system namespaces
return false
}
return true
},
DeleteFunc: func(e event.DeleteEvent) bool {
namespace := e.Object.GetNamespace()
if _, ok := systemNs[namespace]; ok {
// ignore events from system namespaces
return false
}
return true
},
}).
关于kubernetes - Kubebuilder 谓词跳过某些命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69857103/