k8s cache
在k8s
中为减轻apiserver
的压力,会使用缓存来存储k8s
中的资源,这样每次访问就可以直接从缓存了获取数据(k8s
通过watch
,resync
机制来保证本地缓存和数据的同步)。
当我们在使用informer
机制时,必须等待资源同步到本地缓存中。
所以如何等待和判断数据已经同步到了本地缓存呢?
源码分析
1 | factory := informers.NewSharedInformerFactory(clientset, time.Minute) |
1 | // staging/src/k8s.io/client-go/tools/cache/shared_informer.go |
1 | type DeltaFIFO struct { |
小结
综上f.populated && f.initialPopulationCount == 0
表示至少进行过一次全量List
REF:
1.staging/src/k8s.io/client-go/tools/cache/shared_informer.go
2.staging/src/k8s.io/client-go/tools/cache/controller.go
3.staging/src/k8s.io/client-go/tools/cache/delta_fifo.go
4.staging/src/k8s.io/apimachinery/pkg/util/wait/poll.go