1.kubelet架构
最外层是API层
中间是Manager层:probeManager为节点上的Pod做探活处理的。cAdvisor基于cgroup的技术,去获取节点上运行的应用的资源状况(它被kubelet内嵌了)
PodWorker会调用CRI(Container Runtime interface)去获取当前节点这个容器所对应的进程是否处于启动状态,如果没有启动,就启动这些容器进程。
2.kubelet管理pod的核心流程
syncLoop负责监听Pod的状态变化(这些变化其实就是一个个的Pod add事件和update事件),然后把这些事件存在UpdatePodOptions里面去,然后每个worker就会从UpdatePodOptions这个队列里面获取事件清单,然后针对每一个Pod,去进行一个syncPod的操作,syncPod操作里面最终要的一项任务就是computePodActions,如果是新的就作create操作,如果是delete事件就作删除操作,如果是hash值变了,就重新构建,真正算完了之后就会去调用CRI的接口去完成做相应的事情。
PLEG是pod lifecycle event的一个汇聚器,PLEG会往container runtime发送一个relist命令去获取当前节点上的Pod清单,然后把状态放到pod cache里面去。然后通过pod lifecycle event发回上报给API Server。
3.kubelet的总体职责
3.1 节点管理功能
3.2 Pod管理
3.2.1 Pod启动流程
kubelet启动Pod的时候,启动的不是一个容器进程,而是多个容器进程。除了启动应用的进程之外,还额外启动了一个pause的容器镜像实例(SandBoxContainer)