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

这篇具有很好参考价值的文章主要介绍了「连载」边缘计算(十七)02-20:边缘部分源码(源码分析篇)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

(接上篇)

EdgeCore之edged

下面对EdgeCore组件进行剖析,因为EdgeCore中的功能组件比较多,共包括devicetwin、edged、edgehubeventbusedgemeshmetamanagerservicebus和test共8个功能模块。限于篇幅,本文只对edged的具体逻辑以及edged调用容器运行时进行剖析。

1.edged的具体逻辑剖析

EdgeCore模块注册函数入手,具体如下所示。

KubeEdge/edge/cmd/EdgeCore/app/server.go

// registerModules register all the modules started in EdgeCore

func registerModules() {

...

edged.Register()

...

}

进入registerModules()函数中的edged.Register(),具体如下所示。

KubeEdge/edge/pkg/edged/edged.go

// Register register edged

func Register() {

edged, err := newEdged()

if err != nil {

klog.Errorf("init new edged error, %v", err)

return

}

core.Register(edged)

}

Register()函数中主要做了如下两件事:

1)初始化edged(edged, err := newEdged());

2)注册将已经实例化的edged struct(core.Register(edged))。

下面深入剖析初始化edged过程中具体做了哪些事情。进入newEdged()函数,具体内容如下所示。

KubeEdge/edge/pkg/edged/edged.go

//newEdged creates new edged object and initialises it

func newEdged() (*edged, error) {

conf := getConfig()

backoff := flowcontrol.NewBackOff(backOffPeriod, MaxContainerBackOff)

podManager := podmanager.NewpodManager()

policy := images.ImageGCPolicy{

...

}

// build new object to match interface

recorder := record.NewEventRecorder()

ed := &edged{

...

}

...

ed.livenessManager = proberesults.NewManager()

...

statsProvider := edgeimages.NewStatsProvider()

...

//create and start the docker shim running as a grpc server

if conf.remoteRuntimeEndpoint == dockerShimEndpoint || conf.remoteRuntimeEndpoint == dockerShimEndpointDeprecated {

streamingConfig := &streaming.Config{}

dockerClientConfig := &dockershim.ClientConfig{

dockerEndpoint:            conf.dockerAddress,

ImagePullProgressDeadline: time.Duration(conf.imagePullProgressDeadline) * time.Second,

EnableSleep:               true,

WithTraceDisabled:         true,

}

pluginConfigs := dockershim.NetworkPluginSettings{

...

}

...

ds, err := dockershim.NewdockerService(dockerClientConfig, conf.podSandboxImage, streamingConfig,

&pluginConfigs, cgroupName, cgroupDriver, dockershimRootDir, redirectContainerStream)

if err != nil {

return nil, err

}

klog.Infof("RemoteRuntimeEndpoint: %q, remoteImageEndpoint: %q",

conf.remoteRuntimeEndpoint, conf.remoteRuntimeEndpoint)

klog.Info("Starting the GRPC server for the docker CRI shim.")

server := dockerremote.NewdockerServer(conf.remoteRuntimeEndpoint, ds)

if err := server.Start(); err != nil {

return nil, err

}

}

ed.clusterDNS = convertStrToIP(conf.clusterDNS)

ed.dnsConfigurer = kubedns.NewConfigurer(recorder, nodeRef, ed.nodeIP, ed.clusterDNS, conf.clusterDomain, ResolvConfDefault)

containerRefManager := kubecontainer.NewRefManager()

httpClient := &http.Client{}

runtimeService, imageService, err := getRuntimeAndImageServices(conf.remoteRuntimeEndpoint, conf.remoteRuntimeEndpoint, conf.RuntimeRequestTimeout)

if err != nil {

return nil, err

}

if ed.os == nil {

ed.os = kubecontainer.RealOS{}

}

ed.clcm, err = clcm.NewContainerLifecycleManager(DefaultRootDir)

var machineInfo cadvisorapi.MachineInfo

machineInfo.MemoryCapacity = uint64(conf.memoryCapacity)

containerRuntime, err := kuberuntime.NewKubeGenericRuntimeManager(

...

)

cadvisorInterface, err := cadvisor.New("")

containerManager, err := cm.NewContainerManager(mount.New(""),

cadvisorInterface,

cm.NodeConfig{

...

},

false,

conf.devicePluginEnabled,

recorder)

ed.containerRuntime = containerRuntime

ed.containerRuntimeName = RemoteContainerRuntime

ed.containerManager = containerManager

ed.runtimeService = runtimeService

imageGCManager, err := images.NewImageGCManager(ed.containerRuntime, statsProvider, recorder, nodeRef, policy, conf.podSandboxImage)

...

ed.imageGCManager = imageGCManager

containerGCManager, err := kubecontainer.NewContainerGC(containerRuntime, containerGCPolicy, &containers.KubeSourcesReady{})

...

ed.containerGCManager = containerGCManager

ed.server = server.NewServer(ed.podManager)

ed.volumePluginMgr, err = NewInitializedVolumePluginMgr(ed, ProbeVolumePlugins(""))

...

return ed, nil

}

newEdged()函数的定义中,我们可以知道其做很多事情,具体如下。

1)获取edged相关配置(conf := getConfig());

2)初始化podmanagerpodManager := podmanager.NewpodManager());

3)初始化edged struct(ed := &edged{});

4)初始化 edged的livenessManager

5)初始化edged的镜像存放地;

6)创建并启动dockershimgrpc server;

7) 初始化运行时服务和镜像服务;

8)初始化通用容器运行时服务;

9)初始化镜像垃圾回收管理器;

10)初始化容器垃圾回收器;

11)初始化edged的server;

12)初始化edged的volume plugin管理器。

针对以上动作,笔者重点分析创建并启动dockershimgrpc server。dockershim是edged与容器运行时交互的管道,所以edged对容器操作在dockershim的方法中都会得到体现。dockershim服务的初始化函数定义具体如下所示。

 「未完待续……文章来源地址https://www.toymoban.com/news/detail-837043.html

到了这里,关于「连载」边缘计算(十七)02-20:边缘部分源码(源码分析篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 人工智能基础部分20-生成对抗网络(GAN)的实现应用

    大家好,我是微学AI,今天给大家介绍一下人工智能基础部分20-生成对抗网络(GAN)的原理与简单应用。生成对抗网络是一种由深度学习模型构成的神经网络系统,由一个生成器和一个判别器相互博弈来提升模型的能力。本文将从以下几个方面进行阐述:生成对抗网络的概念、

    2024年02月09日
    浏览(91)
  • 【CCF推荐期刊】1/2/3区SCI,计算机通信、算法、人工智能、边缘计算、存储等领域,3个月左右录用

    1/2区计算机通信类 (CCF-C类) 【期刊简介】IF:5.0-6.0,JCR1/2区,中科院3区 【检索情况】SCIEI 双检,正刊 【参考周期】走期刊部系统,3-5个月左右录用 【截稿时间】 2023/3/31 【征稿领域】 涵盖未来计算机通信网络各个方面,如与边缘雾计算、5G及其他物联网应用的结合研究

    2024年02月10日
    浏览(46)
  • 基于人工智能与边缘计算Aidlux的鸟类检测驱赶系统(可修改为coco 80类目标检测)

    ●项目名称 基于人工智能与边缘计算Aidlux的鸟类检测驱赶系统(可修改为coco 80类目标检测) ●项目简介 本项目在Aidlux上部署鸟类检测驱赶系统,通过视觉技术检测到有鸟类时,会进行提示。并可在源码上修改coco 80类目标检测索引直接检测其他79类目标,可以直接修改、快速

    2024年02月12日
    浏览(43)
  • 12KM02E-V0002 3EGM030300R0002 模块化和加固的边缘计算加速

    12KM02E-V0002 3EGM030300R0002 模块化和加固的边缘计算加速 随着边缘人工智能解决方案的兴起,对实时洞察和自主决策的需求显著增长。这也带来了对变革性技术的高度需求,这些技术可以在坚固的边缘支持和提供最佳性能。为了应对技术革命,Premio推出了模块化EDGEboost节点,以提

    2024年02月07日
    浏览(29)
  • hnu计算机与人工智能概论答案2.20

    补一下第一次作业 第1关:数据输入与输出 第一题 在屏幕上输出字符串:hi, \\\"how are you\\\" ,I\\\'m fine and you 第二题 从键盘输入两个整数,计算两个数相除的商与余数 假设输入12,5 输出为 2 2 第三题 在屏幕上 输入一个三位数输出该数的个位、十位和百位数字 假设输入125 输出为 5 2

    2024年02月08日
    浏览(47)
  • SpringBoot源码解读与原理分析(二十七)嵌入式Tomcat

    当Web应用需要部署运行时,传统的做法是将项目打包成war包,然后部署到外置的Web容器中(如最常用的Tomcat容器)。 SpringBoot的一大重要特性是支持嵌入式Web容器,基于SpringBoot的Web应用仅凭一个单独的jar包即可独立运行。 8.1.1 嵌入式Tomcat与普通Tomcat 嵌入式Tomcat是一种可以嵌

    2024年02月22日
    浏览(39)
  • 边缘计算AI智能分析网关V4算力分析及应用场景

    智能分析网关V4是TSINGSEE青犀视频推出的一款高性能、低功耗的软硬一体AI边缘计算硬件设备,硬件采用BM1684芯片,集成高性能8核ARM A53,主频高达2.3GHz。硬件内置近40种AI算法模型,支持对接入的视频图像进行人、车、物、行为等实时检测分析,上报识别结果,并能进行语音告

    2024年01月20日
    浏览(34)
  • LinkedList部分底层源码分析

    JDK版本为1.8.0_271,以插入和删除元素为例,LinkedList部分源码如下: 插入删除结点的过程如图所示: 只有1个元素的LinkedList 包含4个元素的LinkedList add(E e)方法 add(int index,E e)方法 remove(Object obj)方法 remove(int index)方法

    2024年04月13日
    浏览(25)
  • 基于边缘计算的物联网数据处理与分析

    边缘计算面临着数据安全与隐私保护、网络稳定性等挑战,但同时也带来了更强的实时性和本地处理能力,为企业降低了成本和压力,提高了数据处理效率。因此,边缘计算既带来了挑战也带来了机遇,需要我们不断地研究和创新,以应对日益复杂的应用场景和技术需求  

    2024年01月18日
    浏览(31)
  • 边缘计算AI智能分析网关V4客流统计算法的概述

    客流量统计AI算法是一种基于人工智能技术的数据分析方法,通过机器学习、深度学习等算法,实现对客流量的实时监测和统计。该算法主要基于机器学习和计算机视觉技术,其基本流程包括图像采集、图像预处理、目标检测、目标跟踪和客流量统计等步骤,通过在监控视频

    2024年01月18日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包