这一篇内容主要是KubeEdge中边缘节点组件EdgeCore的原理介绍。

KubeEdge架构—EdgeCore

上图中深蓝色的都是kubeedg自己实现的组件,亮蓝色是k8s社区原生组件。这篇主要内容是黄色框框的这三个组件。有一个值得注意的是,这些蓝色框的组件其实都是一个模块,都是在一个进程edgecore里的。

Module间通信

这里Process相当于EdgeCore,是一个进程,这个进程里面分为多个Module模块(EdgeHub、MetaManager、EdgeD)。

它们之间是通过一个BeehiveContext进行通信的,首先模块起来之后会在BeehiveContext中进行注册,每个模块会有一个对应的channel,这个channel是根据Modeule name放到一个map里面。加入模块B要给模块A发送消息,它就会根据模块A的名字将要发送的消息塞到对应的channel队列里,模块A一直在监听,有数据时就会去读出来。这就是一个进程里面Module间通信的原理。

ModeuleContext是模块注册相关接口

MessageContext是发送数据相关接口,比如send(module stirng,message model.Message)函数,第一个参数表示要发送给哪个模块,第二个message的类型和之前云边通信的message是同一种,也就是说kubeedge里面所有的通信包括云边协同的通信、进程间各个模块之间的通信,消息的结构都是统一的。

EdgeHub

edgehub是边缘节点用来收发数据的模块,与之相对应的是云端的cloudhub。

上行——通过EdgeHub刷新状态

上行的数据包括:edged管理的node、pod的状态信息,它先报到MetaManager这边,MetaManager在传到EdgeHub,经过edgehub把数据同步到云上。这样就实现了node、pod状态的上报。关于设备的信息这篇内容不纤细展开。

下行——通过EdgeHub下发元数据

这里的MessageDispatcher的作用和云上的有点区别:这个是分发到不同的模块,云上是分发到不同的边缘节点。如果是pod的元数据,就推给metamanager->Edged去拉起相应容器;如果是设备信息,就推给DeviceTwin->EventBus。

MetaManager

MetaManager的作用是在EdgeHub和Edged之间做持久化,它会把原数据先持久化,注意:这里如果持久化失败的话,它会重新存或者发送失败的消息给云端,直到持久化成功后才会把数据传到Edged等相应模块。

EdgeD

EdgeD是裁剪的轻量化kubelet,保留了应用生命周期管理的相关模块,去掉了一些不必要的东西,比如第三方存储这些在边缘暂时不需要的。这里也集成了CNI/CSI/CRI,现在CNI里的东西都放在CRI里面去调用了,所以从代码里面看不到CNI的东西。

MetaClient是EdgeD新加的东西,MetaClient是直接跟MetaManager通信的,原生的kubelet里面KubeClient是跟api-server通信的。这里改了以后呢EdgeD挂掉重启之后拿到的数据是通过MetaClient到MetaManager那边去数据库里去拿,原生的KubeClient会去从ApiServer里面去拿。

边缘自治原理

云边连接断开

第一种情况是 云边连接断开后,边缘业务可稳定运行。原生k8s中断连后,节点上的资源信息会被调度到其他节点。

还有一种情况是云边连接断开后,边缘节点重启。原生k8s中,kubelet拿到的数据是保存在内存中的,如果连接断开,节点重启后,内存缓存的东西就会丢失,服务不可恢复。在KubeEdge中,边缘节点重启后会从本地数据库中拿到相应数据进行服务恢复。

管理边缘的完整集群

目前边缘自治的特性只适合单节点,边缘集群的自治可能会在后续版本中支持,也是目前我想要做的方向。如果边缘资源充足的话可以跑K8s集群,如果不充足的话用KubeEdge支持的EdgeSite。

KubeEdge边缘自治设计原理的更多相关文章

  1. Atitit ati licenseService    设计原理

    Atitit ati licenseService    设计原理 C:\0workspace\AtiPlatf\src_atibrow\com\attilax\license\LicenseX.ja ...

  2. kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)

    问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行"随机读写"的原因是什么? 3.kafka集群consumer和producer状 ...

  3. html5设计原理(转)

    转自:   http://www.cn-cuckoo.com/2010/10/21/the-design-of-html5-2151.html 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一 ...

  4. 学习HTML5必读之《HTML5设计原理》

    引子:很久前看过的一遍受益匪浅的文章,今天再次转过来,希望对学习HTML5的朋友有所帮助. 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一方面,当然了,就是HTML5.我可以站在这儿只讲HT ...

  5. 分布式文件系统FastDFS设计原理

    原文地址: http://blog.chinaunix.net/uid-20196318-id-4058561.html FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker ...

  6. ApplicationContext容器的设计原理

    1.在ApplicationContext容器中,我们以常用的FileSystemXmlApplicationContext的实现为例来说明ApplicationContext容器的设计原理. 2.在 ...

  7. BeanFactory容器的设计原理

    XmlBeanFactory设计的类继承关系 1.BeanFactory接口提供了使用IoC容器的规范.在这个基础上,Spring还提供了符合这个IoC容器接口的一系列容器的实现供开发人员使用. 2. ...

  8. Spring技术内幕——深入解析Spring架构与设计原理(一)IOC实现原理

    IOC的基础 下面我们从IOC/AOP开始,它们是Spring平台实现的核心部分:虽然,我们一开始大多只是在这个层面上,做一些配置和外部特性的使用工作,但对这两个核心模块工作原理和运作机制的理解,对深 ...

  9. BigPipe设计原理

    高性能页面加载技术--BigPipe设计原理及Java简单实现 1.技术背景 动态web网站的历史可以追溯到万维网初期,相比于静态网站,动态网站提供了强大的可交互功能.经过几十年的发展,动态网站在互动 ...

随机推荐

  1. React.memo All In One

    React.memo All In One https://reactjs.org/docs/react-api.html#components React.memo const MyComponen ...

  2. ES6 进制字面量 All In One

    ES6 进制字面量 All In One 二进制 & 八进制 & 字面量 https://developer.mozilla.org/en-US/docs/Web/JavaScript ...

  3. Paint Tool SAI

    Paint Tool SAI PC 绘画工具 https://en.wikipedia.org/wiki/Paint_Tool_SAI refs https://www.systemax.jp/en/ ...

  4. 发布npm包时,发布源码,而不是dist后的打包文件

    基于webpack-scaffold 此脚手架配置 删除.gitignore文件中对dist文件夹的无视配置 修改package.json文件 { "private": true, ...

  5. 10月上线的NGK global有怎样的发展前景?

    随着NGK global 10月份的上线时间将近,社区中也开始纷纷讨论.预测起NGK global上线后的表现,对此小编也有一些自己的理解,就此分享给大家. 在基于实体生态的赋能下,NGK globa ...

  6. IDEA中引用不到HttpServlet的解决方案

    原文链接:https://blog.csdn.net/xiaozaizi666/article/details/87805564

  7. Java内存模型(JMM)是什么?JMM 通过控制主内存与每个线程的本地内存之间的交互,来提供内存可见性保证

    Java内存模型就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范. Java内存模型是根据英文Java Memo ...

  8. SpringCloud Stream整合RabbitMQ3.5.0

    前言 点击进入Spring官网文档 本文章为单体项目,将消费者和生产者写在同一个项目中,介意者不用向下看了. 本文介绍三种应用方式: 1:普通整合RabbitMQ 2:消息分区 3:按条件消费(多个消 ...

  9. 读懂框架设计的灵魂—Java反射机制

    尽人事,听天命.博主东南大学硕士在读,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 CS-Wiki(Gitee 官 ...

  10. 保姆级别学生党安装Clion IDE(面向华师同学)

    保姆级别学生党安装Clion IDE(面向华师同学) 界面UI 废话不多说,直接上图 具备功能 UI美观 (下面会介绍) 基础的代码编写能力 大容量的IDE插件 (下面会介绍) 代码补全,以及搭配Ki ...