// 创建一个配置控制器
BootstrapKubeletConfigController(defaultConfig*kubeletconfiginternal.KubeletConfiguration,dynamicConfigDir string) {
c := dynamickubeletconfig.NewController(defaultConfig, dir)
// 读取默认配置,并启动一个goroutine来更新
kc, err := c.Bootstrap()
return kc, c, nil
}
kubeletconfig/Controller
// Controller管理同步动态Kubelet配置
Controller struct {
defaultConfig *kubeletconfig.KubeletConfiguration // 没有提供初始配置时候的默认配置
pendingConfigSource chan bool // 写入该信道以指示该配置源需要从API服务器同步
configOk status.ConfigOkCondition // 管理Node.Status.Conditions 中汇报的condition
informer cache.SharedInformer // 观看节点对象的通知者
checkpointStore store.Store // 将配置源的位置保留在存储层
}
kubernetes/pkg/util/config/mux
有这个source的时候,就返回chan,没有的话就创建一个新的chan,监听在上面并返回。如果有新的内容从chan上面过来,则触发调用 Merge 方法。
kubernetes/pkg/util/config/Broadcaster
broadcaster 维护了一组listener,在获得消息的时候进行依次通知