「连载」边缘计算(十九)02-22:边缘部分源码(源码分析篇)

本文详细分析了Edged启动过程中涉及的多个后台服务,包括kubeClient初始化、模块初始化(如containerManager、volumeManager等)、与容器运行时的交互机制以及各种服务的启动流程,展示了Edged与容器运行时的调用关系。
摘要由CSDN通过智能技术生成

(接上篇)

从启动函数Start()中可以看到,其以go routine的方式启动很多后台处理服务,具体如下。

1)初始化edged的kubeClient,具体如下所示。

// use self defined client to replace fake kube client

e.kubeClient = fakekube.NewSimpleClientset(e.metaClient)

2) 初始化pod status管理器,具体如下所示。

e.statusManager = status.NewManager(e.kubeClient, e.podManager, utilpod.NewpodDeleteSafety(), e.metaClient)

3)初始化edged节点的模块,具体如下所示。

if err := e.initializeModules(); err != nil {

klog.Errorf("initialize module error: %v", err)

os.Exit(1)

}

其中,e.initializeModules()函数定义如下所示。

func (e *edged) initializeModules() error {

node, _ := e.initialNode()

if err := e.containerManager.Start(node, e.GetActivepods, edgedutil.NewSourcesReady(), e.statusManager, e.runtimeService); err != nil {

klog.Errorf("Failed to start device plugin manager %v", err)

return err

}

return nil

}

可以看出,initializeModules()函数实际上启动了容器管理器。

4)初始化并启动volume管理器,具体如下所示。

e.volumeManager = volumemanager.NewVolumeManager(

...

)

go e.volumeManager.Run(edgedutil.NewSourcesReady(), utilwait.NeverStop)

5)初始化pod生命周期事件生成器,具体如下所示。

e.pleg = edgepleg.NewGenericLifecycleRemote(...)

...

e.pleg.Start()

6)启动pod增加和删除消息队列,具体如下所示。

e.podAddWorkerRun(concurrentConsumers)

e.podRemoveWorkerRun(concurrentConsumers)

7)启动edged的探针管理器,具体如下所示。

e.probeManager.Start()

8)启动监听pod事件的loop,具体如下所示。

go e.syncLoopIteration(e.pleg.Watch(), housekeepingTicker.C, syncWorkQueueCh.C)

9)启动edged的http server,具体如下所示。

go e.server.ListenAndServe()

10)启动镜像和容器的垃圾回收服务,具体如下所示。

e.imageGCManager.Start()

e.StartGarbageCollection()

11)初始化和启动edged的插件服务,具体如下所示。

e.pluginManager = pluginmanager.NewPluginManager(...)

// Adding Registration Callback function for CSI Driver

e.pluginManager.AddHandler(pluginwatcherapi.CSIPlugin, plugincache.PluginHandler(csiplugin.PluginHandler))

// Start the plugin manager

klog.Infof("starting plugin manager")

go e.pluginManager.Run(edgedutil.NewSourcesReady(), utilwait.NeverStop)

12) 启动与metamanager进行事件同步的服务,具体如下所示。

e.syncpod()

到此,edged的具体逻辑剖析就结束了。

edged调用容器运行时剖析

edged与容器运行时的调用关系如图8-3所示。

图 8-3 edged与容器运行时的调用关系

从图8-3可以看出,edged首先启动dockershimgrpc server,然后edged通过调用dockershimgrpc server实现与容器运行时(container runtime)的交互,最后dockershimgrpc server将edged具体操作传递给容器运行时。

未完待续…… 

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值