这一篇内容主要是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. SwiftUI & Compose View

    SwiftUI & Compose View OK // // ContentView.swift // Landmarks // // Created by 夏凌晨 on 2020/10/2 ...

  2. convert URL Query String to Object All In One

    convert URL Query String to Object All In One URL / query string / paramas query string to object le ...

  3. JWT & JSON Web Tokens

    JSON Web Tokens https://jwt.io json web token example https://jwt.io/introduction/ https://medium.co ...

  4. background & background-image & border-image

    background & background-image & border-image https://developer.mozilla.org/en-US/docs/Web/CS ...

  5. 微信公众号 bug

    微信公众号 bug web bug refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  6. Node.js & ES modules & .mjs

    Node.js & ES modules & .mjs Node.js v13.9.0 https://nodejs.org/api/esm.html https://nodejs.o ...

  7. uniapp 在h5和小程序上使用高德获取用户城市位置

    开发文档 https://lbs.amap.com/api 错误状态 https://lbs.amap.com/api/webservice/guide/tools/info/ 虽然用的高德但是你还需 ...

  8. [转]在ROS下使用zeroconf配置多机通信

    原文地址:http://www.corvin.cn/635.html,转载主要方便随时查阅,如有版权要求,请及时联系. 0x00 为何需要配置ROS多机通信 众所周知ROS是分布式系统,因此可以将机器 ...

  9. 1022 Digital Library——PAT甲级真题

    1022 Digital Library A Digital Library contains millions of books, stored according to their titles, ...

  10. docker mysql初始化多个sql脚本

    一.概述 现有一台服务器,需要部署mysql.其中mysql容器,需要在第一次启动时,执行多个sql文件. 文件名 说明 执行顺序 init.sql 创建数据库以及用户 1 users.sql 用户表 ...