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

(接上篇)

从启动函数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具体操作传递给容器运行时。

未完待续…… 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2810121.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

基于AI将普通RGB图像转换为苹果Vision Pro支持的空间照片

将 RGB 图像转换为空间图片 一、引言 随着AR和VR技术的普及,空间照片格式(.HEIC)逐渐受到关注。这种格式允许用户在AR/VR设备上体验到更为真实的立体空间效果。为了让更多的普通图片也能享受这种技术,我们开发了这款可以将普通RGB图像转换为苹果Vision Pro支持的.HEIC格式的…

leetcode:47.全排列2

1.与上一题不同的是,本题目的数组中有重复的数字,所以最终结果需要去重! 2.树形结构:先将原来的数组进行排序,方便之后的去重!同一数层上不能取重复的元素! 3.代码实现: 1.当path…

k8s部署 多master节点负载均衡以及集群高可用

一、k8s 添加多master节点实验 1、master02节点初始化操作 2、在master01节点基础上,完成master02节点部署 ①从master01节点复制所需要的文件 需要从master01节点复制etcd数据库所需要的ssl证书、kubernetes安装目录(二进制文件、组件与apiserver通信…

CleanMyMac4苹果Mac电脑全面、高效的系统清理工具

CleanMyMac 4 for Mac是一款专为Mac用户设计的系统清理和优化工具。它具备多种功能,旨在帮助用户轻松管理和释放Mac上的磁盘空间,同时提升系统性能。 系统垃圾清理:CleanMyMac 4能够深入扫描Mac的每一个角落,智能识别并清除不需要…

Java中for循环效率比较

先说结论: 对于遍历一个1千万条数据的arrayList,fori循环最快,iterator其次,foreach再其次,forStream最慢。 测试代码 public class ForSpeedTest {// private static final long FOR_COUNT 10000_0000;private s…

wpf 简单实验 数据更新 列表更新

1.概要 1.1 需求 一个列表提供添加修改删除的功能,添加和修改的内容都来自一个输入框 1.2 要点 DisplayMemberPath"Zhi"列表.ItemsSource datalist;(列表.SelectedItem ! null)(列表.SelectedItem as A).Zhi 内容.Text;datalist.Remove((列表.Selec…

Java编程与数据库技术:疫情居家办公的坚实后盾

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

canvas坐标系统 webgl坐标系统 uv纹理坐标系统 原点

一、canvas原点在左上角,x轴正方向向右,y轴正方向向下,一个点对应一个像素 二、webgl原点在正中间,x轴正方向向右,y轴正方向向上,数据范围在[-1,1]之间 三、uv原点在左下角,x轴正方向向右&#…

华为OD机试真题-求最多可以派出多少支团队-2023年OD统一考试(C卷)---Python3--开源

题目: 考察内容: if while;break; sort();for 代码: """ analyze: 团队:1-2 1个人只能参加一个团队input: 总人数 int 每个人能力,list 最低能力值 …

离散数学复习笔记

一、数理逻辑 命题逻辑的基本概念 命题:能够判断真假的陈述句(命题真值唯一) 真值唯一的解释: 原子命题 > 复合命题

matlab simulink变压器温度仿真

1、内容简介 略 48-可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 matlab simulink变压器温度仿真_哔哩哔哩_bilibili 4、参考论文 略 大型油浸风冷变压器绕组温度场分析_高原 基于顶层油温的变压器绕组热点温度计算改进模型_陈伟根 基于热电类比理论的油浸式电…

《Docker 简易速速上手小册》第9章 Docker 与持续集成(2024 最新版)

文章目录 9.1 持续集成的基本概念9.1.1 重点基础知识9.1.2 重点案例:Python Web 应用的 CI 流程9.1.3 拓展案例 1:Python 数据分析项目的 CI9.1.4 拓展案例 2:Python 微服务的 CI/CD 9.2 Docker 在 CI/CD 中的应用9.2.1 重点基础知识9.2.2 重…

第三节:Vben Admin登录对接后端login接口

系列文章目录 第一节:Vben Admin介绍和初次运行 第二节:Vben Admin 登录逻辑梳理和对接后端准备 文章目录 系列文章目录前言一、Flask项目介绍二、使用步骤1.User模型创建2.迁移模型3. Token创建4. 编写蓝图5. 注册蓝图 三. 测试登录总结 前言 上一节&…

UE5 C++ Widget练习 Button 和 ProgressBar创建血条

一. 1.C创建一个继承Widget类的子类, 命名为MyUserWidget 2.加上Button 和 UserWidget的头文件 #include "CoreMinimal.h" #include "Components/Button.h" #include "Blueprint/UserWidget.h" #include "MyUserWidget.genera…

kotlin与java的相互转换

Kotlin转java 将kotlin代码反编译成java Tools -> Kotlin -> Show Kotlin Bytecode 然后点击 【Decompile】 生成java代码 java转kotlin Code -> Convert Java File To Kotlin File

pytorch 用F.normalization的逆归一化如何操作

逆归一化的时候再把这个数乘回去就行了 magnitude a.norm(p2, dim1, keepdimTrue) # NEW atorch.nn.functional.normalize(a, p2, dim1) a_or a* magnitude # NEW print(a_or) Outputs: tensor([]1,2,3)

100天精通Python(实用脚本篇)——第117天:基于selenium实现反反爬策略之代码输入账号信息登录网站

文章目录 专栏导读1. 前言2. 实现步骤3. 基础补充4. 代码实战4.1 创建连接4.2 添加请求头伪装浏览器4.3 隐藏浏览器指纹4.4 最大化窗口4.5 启动网页4.6 点击密码登录4.7 输入账号密码4.8 点击登录按钮4.9 完整代码4.10 GIF动图展示 五、总结 专栏导读 🔥&#x1f5…

出现猫毛过敏后怎么养猫?性价比高的宠物空气净化器推荐

作为一名猫奴,我深知每天撸猫的快乐,但也深知鼻子受不了的痛苦。对于养宠家庭来说,猫咪的毛发无处不在,沙发、地板、衣服都是重灾区,不仅难以清理,而且可能会让呼吸道敏感的朋友过敏。为了解决除猫毛的问题…

迅推客媒体发布平台,让你的新闻轻松登上各大媒体

媒体发布稿件是个人或企业推广自己和产品的重要手段。良好的媒体发布过程可以给企业带来更多的曝光度和知名度,促进销售。然而,如何选择合适的新闻发布平台,如何在各大新闻媒体网站上发布新闻稿,是许多企业面临的问题。今天&#…

卷积神经网络 CNN

目录 卷积网络与传统网络的区别 参数共享 卷积神经网络整体架构 卷积操作的作用 卷积核的定义 卷积特征值计算方法 卷积层涉及的参数 边缘填充 ​编辑 卷积结果计算 池化层 整体网格架构 VGG网络架构 残差网络Resnet 卷积网络与传统网络的区别 卷积神经网络&#x…