Я осторожно пробираюсь через код Go в пакете tools/cache
в сотый раз.
При чтении кода при создании нового SharedIndexInformer
происходит следующее:
SharedIndexInformer
создает новый Indexer
.
- Созданный таким образом
Indexer
создает новый ThreadSafeStore
для хранения представлений ресурсов Kubernetes.
SharedIndexInformer.Run()
создает новый DeltaFIFO
с новым Indexer
в качестве второго параметра.
-
Indexer
, поставляемый для нового DeltaFIFO
, поэтому функционирует как KeyLister
и его KeyGetter
. (Это используется для отслеживания «предыдущего состояния» для удалений; т. Е. Если в нем есть объект, но последняя синхронизация с Kubernetes не содержит этот объект, то мы знаем, что он был удален из кластера.)
- Функция
HandleDeltas
- это та, которую базовый controller
будет вызывать при добавлении, обновлении или удалении ресурсов Kubernetes.
- Функция
HandleDeltas
вызовет методы Add
, Update
и Delete
для Indexer
(и, расширение, лежащее в его основе ThreadSafeStore
).
Допустим, я пишу новый контроллер, используя SharedIndexInformer
. Далее скажем, что он наблюдает за Pod
с. Давайте, наконец, скажем, что в кластере 10 Pod
с.
Означает ли это, что после вызова SharedIndexInformer
метода Run
и некоторого необходимого промежутка времени пройдет 10 JSON-представлений Pod
s в ThreadSafeStore
, и, далее, , что никто не будет удален из этого хранилища, пока фактическое удаление одного из соответствующих Pod
s не произойдет в Kubernetes ?