昨天我们介绍了k8s中资源插件机制的核心关键组件,今天我们继续来看下各个组件是如何进行通信的,以及k8s中针对事件处理背后的关键设计
1.PluginManager
PluginManager是一个上层组件,其内部包含了上篇文章中的关键组件,并且协调其内部数据流,而且还提供针对不同插件的具体的控制器
1.1 核心数据结构
核心结构里面其实就是按照数据流来进行设计的,首先需要一个感知插件desiredStateOfWorldPopulator用于感知后端服务的创建或者删除,然后将感知到的事件加入到desiredStateOfWorld期望状态缓存,由reconciler负责期进行底层的注册和下线,并且将结果存储到actualStateOfWorld实际状态缓存
type pluginManager struct {
// 插件感知
desiredStateOfWorldPopulator *pluginwatcher.Watcher
// 协调器插件
reconciler reconciler.Reconciler
// 实际状态缓存
actualStateOfWorld cache.ActualStateOfWorld
// 期望状态缓存
desiredStateOfWorld cache.DesiredStateOfWorld
}
1.2 初始化
初始化中会将dsw和asw都交给reconciler用于进行事件的感知和更新对应的缓存
func NewPluginManager(
sockDir string,
recorde