kubelet源码解析(v1.11.6)
2020-04-17 18:20:24 0 举报
kubelet源码解析
作者其他创作
大纲/内容
HandlePodRemoves
NewPodConfig
kl.syncNetworkUtil
readinessManager
kl.volumeManager.Run
NodeStatus
m.runtimeService.StopPodSandbox
config.NewSourceApiserver
newPodStorage
1. kl.imageManager.Start()2. kl.serverCertificateManager.Start()3. kl.oomWatcher.Start(kl.nodeRef)4. kl.resourceAnalyzer.Start()
w.doProbe
GC
kl.syncNodeStatus
updateNodeStatus
handler.HandlePodCleanups()
w.probeManager.prober.probe
time.NewTicker(time.Second)
2.startKubelet
mount/umountattach/detach
getIPTablesMark(kl.iptablesMasqueradeBit)kl.iptClient.EnsureChain&EnsureRule
vm.reconciler.Run(stopCh)
(m *kubeGenericRuntimeManager) KillPodm.killPodWithSyncResult
m.killPodFunc
1. kl.setNodeStatus
<-kl.livenessManager.Updates
config.NewSourceURL
updatechannel
kubelet.Run
c.Nodes().Patch
<-configCh
update := <-m.readinessManager.Updates()
EvictionManager
1.CreateAndInitKubelet
(s *podStorage) merge()
readiness go w.run()
makePodSourceConfig
OperationExectutor
Config
kl.syncLoop
VolumeManager
m.statusManager.SetContainerReadiness
HandlePodReconcile
<-plegCh
kl.initializeModules
m.containerGC.GarbageCollect
kl.containerGC.GarbageCollect()
app.NewKubeletCommand
参数
4. kl.containerLogManager.Start()5. kl.pluginWatcher.Start()
liveness go w.run()
g.eventChannel <- events[i]
Probe-2
1.NewMainKubelet
kl.imageManager.GarbageCollect()
HandlePodAdditions
1. buildSignalToRankFunc:注册驱逐pod时各种资源的排名函数。2. buildSignalToNodeReclaimFuncs:注册与资源相关的回收函数。3. makeSignalObservations:从制定的summary provider中获取观测信号,4. thresholdsUpdatedStats:更新node状态和过滤阈值信号。5. sort.Sort(byEvictionPriority(thresholds)):根据驱逐优先级给阈值排名。6. reclaimNodeLevelResources:回收node级别的资源7. evictPod:驱逐pod
kl.containerManager.UpdateQOSCgroups()
m.updateReadiness
g.runtime.GetPods(true)
Setup KUBE-MARK-DROP rules
3. kl.cleanupOrphanedPodCgroups (清除cgroup相关文件)
tryUpdateNodeStatus
vm.desiredStateOfWorldPopulator.Run
kl.initializeRuntimeDependentModules
time.NewTicker(housekeepingPeriod)
1. kl.cadvisor.Start()2. kl.containerManager.Start()3. kl.evictionManager.Start()
m.podStatusChannel <- podStatusSyncRequest
c.mux.Channel()
kl.killPod
Probe-1
<-syncCh
HandlePodUpdates
livenessManagerchannel
registerWithAPIServer
m.listen()
1. AttachVolume/DetachVolume2.VerifyVolumesAreAttachedPerNode3.VerifyVolumesAreAttached4.MountVolume/UnmountVolume5.VerifyControllerAttachedVolume6.IsOperationPending7.ExpandVolumeFSWithoutUnmounting8.ReconstructVolumeOperation9.CheckVolumeExistenceOperation
周期性检查应该被挂载的volume是否被挂载,若无,触发mount/umount修正。
kl.probeManager.Start()
getIPTablesMark(kl.iptablesDropBit)kl.iptClient.EnsureChain&EnsureRule
Pod-killer
m.killContainersWithSyncResult
tick: m.syncBatch()channel: m.syncPod()
podKiller
kl.pleg.Start()
g.relist
kl.statusManager.Start()
StatusManager
<-housekeepingCh
kl.updateRuntimeUp
m.updateStatusInternal
handler.HandlePodSyncs
2. StartGarbageCollection
kl.containerRuntime.KillPod
PLEG
2. kl.cleanupOrphanedPodDirs (清除/var/lib/kubelet/pods/xxx目录)
2. nodeutil.PatchNodeStatus
kl.syncLoopIteration
killPodNow
1. kl.podKillingCh < pod X(干掉不希望其存活的pods)
config.NewSourceFile
im.freeSpace
初始化
RunKubelet
cgc.runtime.GarbageCollect
Setup KUBE-MARK-MASQ rules
w.probeManager.probe.probe
kl.probeManager.AddPod
config.NewMux()
收藏
收藏
0 条评论
下一页