NewMainKubelet
kubelet源码分析(二)之 NewMainKubelet
以下代码分析基于
kubernetes v1.12.0版本。本文主要分析 https://github.com/kubernetes/kubernetes/tree/v1.12.0/pkg/kubelet 部分的代码。
本文主要分析kubelet中的NewMainKubelet部分。
NewMainKubelet主要用来初始化和构造一个kubelet结构体,kubelet结构体定义参考:https://github.com/kubernetes/kubernetes/blob/v1.12.0/pkg/kubelet/kubelet.go#L888
// NewMainKubelet instantiates a new Kubelet object along with all the required internal modules.
// No initialization of Kubelet and its modules should happen here.
func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration,
kubeDeps *Dependencies,
crOptions *config.ContainerRuntimeOptions,
containerRuntime string,
runtimeCgroups string,
hostnameOverride string,
nodeIP string,
providerID string,
cloudProvider string,
certDirectory string,
rootDirectory string,
registerNode bool,
registerWithTaints []api.Taint,
allowedUnsafeSysctls []string,
remoteRuntimeEndpoint string,
remoteImageEndpoint string,
experimentalMounterPath string,
experimentalKernelMemcgNotification bool,
experimentalCheckNodeCapabilitiesBeforeMount bool,
experimentalNodeAllocatableIgnoreEvictionThreshold bool,
minimumGCAge metav1.Duration,
maxPerPodContainerCount int32,
maxContainerCount int32,
masterServiceNamespace string,
registerSchedulable bool,
nonMasqueradeCIDR string,
keepTerminatedPodVolumes bool,
nodeLabels map[string]string,
seccompProfileRoot string,
bootstrapCheckpointPath string,
nodeStatusMaxImages int32) (*Kubelet, error) {
...
} 1.1. PodConfig
通过makePodSourceConfig生成Pod config。
1.1.1. makePodSourceConfig
1.1.2. NewPodConfig
1.1.3. NewSourceApiserver
1.2. Lister
serviceLister和nodeLister分别通过List-Watch机制监听service和node的列表变化。
1.2.1. serviceLister
1.2.2. nodeLister
1.3. 各种Manager
1.3.1. containerRefManager
1.3.2. oomWatcher
1.3.3. dnsConfigurer
1.3.4. secretManager & configMapManager
1.3.5. livenessManager
1.3.6. podManager
1.3.7. resourceAnalyzer
1.3.8. containerGC
1.3.9. imageManager
1.3.10. statusManager
1.3.11. probeManager
1.3.12. tokenManager
1.3.13. volumePluginMgr
1.3.14. volumeManager
1.3.15. evictionManager
1.4. containerRuntime
目前pod所使用的runtime只有docker和remote两种,rkt已经废弃。
当runtime是docker的时候,会执行docker相关操作。
1.4.1. NewDockerService
1.4.2. NewDockerServer
1.4.3. DockerServer.Start
1.5. podWorker
构造podWorkers和workQueue。
1.5.1. PodWorkers接口
podWorker主要用来对pod相应事件进行处理和同步,包含以下三个方法:UpdatePod、ForgetNonExistingPodWorkers、ForgetWorker。
2. 总结
NewMainKubelet主要用来构造kubelet结构体,其中kubelet除了包含必要的配置和client(例如:kubeClient、csiClient等)外,最主要的包含各种manager来管理不同的任务。核心的manager有以下几种:
oomWatcher:监控pod内存是否发生OOM。podManager:管理pod的生命周期,包括对pod的增删改查操作等。containerGC:对死亡容器进行垃圾回收。imageManager:对容器镜像进行垃圾回收。statusManager:与apiserver同步pod状态,同时也作状态缓存。volumeManager:对pod的volume进行attached/detached/mounted/unmounted操作。evictionManager:保证节点稳定,必要时对pod进行驱逐(例如资源不足的情况下)。
NewMainKubelet还包含了serviceLister和nodeLister来监听service和node的列表变化。kubelet使用到的
containerRuntime目前主要是docker,其中rkt已废弃。NewMainKubelet启动了dockershim grpc server来执行docker相关操作。构建了
podWorker来对pod相关的更新逻辑进行处理。
参考文章:
https://github.com/kubernetes/kubernetes/tree/v1.12.0
https://github.com/kubernetes/kubernetes/tree/v1.12.0/pkg/kubelet
最后更新于
这有帮助吗?