Kubelet源码分析:PodAdmit
之前讲过 Kubelet
结构体中的 syncLoopIteration
方法接收多个 channel
数据源的信息,并调用相应的 handler
处理,其中 configCh
是 kubelet
获取 pod
的数据源,比如通过 informer
从 api
中拉取到一个新的 Pod
,对应的 handler
为 HandlePodAdditions
.
Kubelet
View All Tags之前讲过 Kubelet
结构体中的 syncLoopIteration
方法接收多个 channel
数据源的信息,并调用相应的 handler
处理,其中 configCh
是 kubelet
获取 pod
的数据源,比如通过 informer
从 api
中拉取到一个新的 Pod
,对应的 handler
为 HandlePodAdditions
.
device-plugin
是 Kubernetes
用来扩展除 CPU
Memory
之外的硬件设备,比如常见的 Nvidia GPU
.
在 Pod
经常会出现将 Configmap/Secret
挂载到 Pod
中,今天我们来分析 Kubelet
是如何实现这个能力,特别是在 Configmap/Secret
内容发送改变、被删除等操作的时候如何影响 Pod
内挂载好的文件。
VolumeManager
运行一组异步循环,根据该节点上调度的 pod
确定需要 attached/mounted/unmounted/detached
哪些卷,并执行此操作。
在 Kubelet
源码分析工作原理中介绍过, Kubelet
中有两个核心的数据结构字段, podManager
和 podWorkers
, 现在我们来一探究竟。
在代码中是没有 probeCh
这个 chan
的,主要是由 livenessManager
readinessManager
startupManager
这三个探针的 chan
构成的。
PLEG
全称是 Pod Lifecycle Event Generator
,它主要通过读取 container
的 Event
来更新 Pod
的状态,目前提供了 GenericPLEG
和 EventedPLEG
两种模式,不同点 GenericPLEG
是定时去读取事件,EventedPLEG
时通过主动接受事件的推送。
podUpdateCh
主要是负责接收 Pod
的数据,分别从文件、URL、Kube-APIServer 三个地方来,下面将详细分析这个 chan
的读写流程。
从 kubelet
源码来分析它的工作原理.