我正在使用client-go在Go中为Kubernetes编写自定义 Controller 。
它基于sample-controller并到目前为止运行良好。SharedIndexInformer
可以选择定期重新同步所有对象。 (Parameter resyncPeriod
中的sample-controller设置为30秒。)
有没有办法立即强制重新同步?
似乎处理定期重新同步的代码似乎称为 store.Resync()
。
我尝试调用fooInformer.Informer().GetStore().Resync()
。调用成功,但是未发生重新同步。我错过了什么?
我正在使用client-go
v0.17.2
,而服务器是EKS v1.14.9-eks-c0eccc
。
最佳答案
这是不可能的。
周期性重新同步的cache.Store
在newInformer
的k8s.io/client-go/tools/cache/controller.go
中实例化为cache.DeltaFIFO
队列:
// This will hold incoming changes. Note how we pass clientState in as a
// KeyLister, that way resync operations will result in the correct set
// of update/delete deltas.
fifo := NewDeltaFIFOWithOptions(DeltaFIFOOptions{
KnownObjects: clientState,
EmitDeltaTypeReplaced: true,
})
cache.New()
将其返回为未导出的字段cache.controller{}.config.Queue
,该字段没有导出的访问功能-因此无法手动调用Resync()
。