// 創(chuàng)建一個(gè)配置控制器
BootstrapKubeletConfigController(defaultConfig*kubeletconfiginternal.KubeletConfiguration,dynamicConfigDir string) {
? ? ?c := dynamickubeletconfig.NewController(defaultConfig, dir)
? ? // 讀取默認(rèn)配置瓮恭,并啟動(dòng)一個(gè)goroutine來(lái)更新
? ??kc, err := c.Bootstrap()
? ???return kc, c, nil
}
kubeletconfig/Controller
//?Controller管理同步動(dòng)態(tài)Kubelet配置
Controller struct {
????defaultConfig *kubeletconfig.KubeletConfiguration????// 沒(méi)有提供初始配置時(shí)候的默認(rèn)配置
????pendingConfigSource chan bool?????//?寫入該信道以指示該配置源需要從API服務(wù)器同步
????configOk status.ConfigOkCondition??????//? 管理Node.Status.Conditions 中匯報(bào)的condition
????informer cache.SharedInformer???????//? 觀看節(jié)點(diǎn)對(duì)象的通知者
????checkpointStore store.Store????????//? 將配置源的位置保留在存儲(chǔ)層
}
kubernetes/pkg/util/config/mux
有這個(gè)source的時(shí)候钮蛛,就返回chan锌奴,沒(méi)有的話就創(chuàng)建一個(gè)新的chan,監(jiān)聽在上面并返回。如果有新的內(nèi)容從chan上面過(guò)來(lái),則觸發(fā)調(diào)用 Merge 方法采呐。
kubernetes/pkg/util/config/Broadcaster
broadcaster 維護(hù)了一組listener,在獲得消息的時(shí)候進(jìn)行依次通知