我正在小心翼翼地通过tools/cache
package中的Go代码,这似乎是第100次。
通过仔细阅读代码,当您创建新的SharedIndexInformer
时,会发生以下情况:
SharedIndexInformer
creates a new Indexer
。Indexer
在内部创建了creates a new ThreadSafeStore
,用于持有Kubernetes资源的表示。SharedIndexInformer.Run()
creates a new DeltaFIFO
with the new Indexer
作为其第二个参数。Indexer
supplied to the new DeltaFIFO
therefore functions as its KeyLister
and its KeyGetter
。 (这用于跟踪删除的“先前状态”;即如果其中有一个对象但最近与Kubernetes同步不包含该对象,则我们知道它已从群集中删除。)HandleDeltas
function is the one that the underlying controller
will call。HandleDeltas
函数将在Add
上调用Update
,Delete
和Indexer
方法(并且,在其基础上的ThreadSafeStore
)。假设我使用SharedIndexInformer
编写一个新的控制器。让我们进一步说它正在关注Pod
s。让我们最后说集群中有10个Pod
s。
这是否意味着在调用SharedIndexInformer
的Run
方法并且已经过了一些必要的时间之后,Pod
中将有10个jaz表示ThreadSafeStore
s,而且,在实际删除之前,没有任何一个将从该商店中删除其中一个相应的Pod
s发生在Kubernetes?
正确,除了JSON部分。
Store包含本机Object结构,从protobuf消息反序列化。