watchCache的布局如下所示:
- type watchCache struct {
- sync.RWMutex //同步锁
- cond *sync.Cond //前提变量
- capacity int//汗青滑动窗口容量
- keyFunc func(runtime.Object) (string, error)//从storage中获取键值
- getAttrsFunc func(runtime.Object) (labels.Set, fields.Set, bool, error)//获取一个工具的field和label信息
- cache []watchCacheElement//轮回行列缓存
- startIndex int//轮回行列的起始下标
- endIndex int//轮回行列的竣事下标
- store cache.Store//
- resourceVersion uint64
- onReplace func()
- onEvent func(*watchCacheEvent)//在每次缓存中的数据产生Add/Update/Delete后城市挪用该函数,来获取工具的之前版本的值
- clock clock.Clock
- versioner storage.Versioner
- }
cache内里存放的是全部操纵变乱,而store中存放的是当前最新的变乱。
4 cacheWatcher从watchCache中拿到从某个resourceVersion以来的全部数据,即initEvents,然后将数据放到input这个channel内里去,通过filter然后输出到result这个channel内里,返回数据到某个client。
- type cacheWatcher struct {
- sync.Mutex//同步锁
- input chan *watchCacheEvent//输入管道,Apiserver都变乱产生时城市通过广播的情势向input管道举办发送
- result chan watch.Event//输出管道,输出到update管道中去
- done chan struct{}
- filter filterWithAttrsFunc//过滤器
- stopped bool
- forget func(bool)
- versioner storage.Versioner
- }
从一个pod建设进程看k8s组件通讯
我们再回到上面的Pod建设流程图。从图中我们可以看出以下信息:
1 起首各组件也会在初始化时向Apiserver发送watch哀求,即在图中标0的指令。Apiserver在建设kubeApiserver并注册各API路由信息时,获取Watch哀求的路由信息
2 从Kubectl向Apiserver发送建设pod哀求起,每一步建设、更新操纵,城市存储到etcd中。
3 各组件向Apiserver发送watch哀求,Apiserver从etcd获取最新数据并返回。
留意:当变乱产生时,Apiserver会给这些watcher中的通道推送,每个watcher都有本身的Filter过滤,找到本身想要监听的变乱则通过管道的方法将该数据发送到响应的组件。 【编辑保举】 - 为什么说Kubernetes的崛起预示着云原生期间到来?
- Kubernetes研究:图解Kubernetes收集
- Kubernetes研究:收集道理及方案(收集道理基本经典版)
- 进修Kubernetes,这些负载平衡常识点得知道!
- 十大Kubernetes开源监控器材
【责任编辑:武晓燕 TEL:(010)68476606】
点赞 0 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|