根据我的理解(和经验)-kubernetes通知程序将updateFunc称为其缓存的每个“同步”事件-从我的收集来看,这是由于this令人讨厌的代码和平。

通知者定义示例:

informer:= NewInformer(
&cache.ListWatch{
ListFunc: func(options api.ListOptions) (runtime.Object, error) {
  return kubeClient.Batch().Jobs(api.NamespaceAll).List(options)
},
WatchFunc: func(options api.ListOptions) (watch.Interface, error) {
  return kubeClient.Batch().Jobs(api.NamespaceAll).Watch(options)
},....)

...

informer.AddEventHandler(cache.ResourceEventHandlerFuncs{
    AddFunc: func(obj interface{}){},
    // Make this function be called *only* on update.
    UpdateFunc: func(old, current interface{}){},
    DeleteFunc: func(current interface{}){},
})

但是对于我的用例-调用updateFunc仅应在该资源更新时才真正发生(例如,我在每次更新或进入I / O时都要进行大量的计算)。

我在徘徊,有没有办法只在更新时调用updateFunc

最佳答案

我找到了答案in this github issue:

如果resourceVersion在新旧版本之间不同,则观察到实际的更新事件。

关于go - 如何避免在同步时调用`updateFunc`?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53803992/

10-12 21:55