PodWorkers是最终“同步”pod状态的一块逻辑,
“同步”在这里的含义是:确保kubelet所在节点的Pod状态和etcd中的状态一致,该增加的增加,该删除的删除,该更新的更新。
“同步”动作的触发有几个方式:
(1)通过文件、apiserver、http方式监听到的变化
(2)定时器触发,例如每隔10s
PodWorkers的入口是UpdatePod
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 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 }
|
简单的示意图
