PodWorkers是最終“同步”pod狀態的一塊邏輯,
“同步”在這裏的含義是:確保kubelet所在節點的Pod狀態和etcd中的狀態一致,該增加的增加,該刪除的刪除,該更新的更新。
“同步”動作的觸發有幾個方式:
(1)通過文件、apiserver、http方式監聽到的變化
(2)定時器觸發,例如每隔10s
PodWorkers的入口是UpdatePod
type podWorkers struct {
// key是pod的ID,value是一個chan,會有一個gorouting監聽該chann
// 死循環一般的處理該Pod上的所有變動
podUpdates map[types.UID]chan UpdatePodOptions
// 記錄每個pod對應的gorouting當前的工作狀態
isWorking map[types.UID]bool
// 每個Pod對應的gorouting處理完相關邏輯之後,會把Pod的ID塞入
// workQueue。定時器會觸發kubelet,kubelet會從workQueue裏
// 獲取需要同步的Pod,然後調用PodWorkers的UpdatePod方法,
// 觸發新一輪的同步
workQueue queue.WorkQueue
}
簡單的示意圖