当前位置: 首页 > news >正文

边缘计算架构_KubeEdge架构解读:云原生的边缘计算平台

KubeEdge即Kube+Edge,顾名思义就是依托K8s的容器编排能力和调度能力,实现云边协同、计算下沉、海量设备的平滑接入。本篇文章将从KubeEdge架构设计理念、KubeEdge代码目录概览、KubeEdge集群部署三方面带大家认识KubeEdge。

KubeEdge架构设计理念

1

Kubernetes的架构

9153dcb6bde90c29e7fcce259a18c6ad.png

这里是一个经典的K8s架构,K8s相信大家已经了解比较多了,它主要是分为控制面和数据面,而现在K8s的生态已经非常火爆了,关于应用管理和容器管理已经形成了一套标准,这里列举了它的一些优势:

  • 只有API server可以访问etcd

  • 组件通过 API Server 访问集群状态

  • API采用声明式设计

  • API对象彼此互补、可组合

  • 优先使用事件监听而不是轮询

2

基于Kubernetes构建边缘计算的优势与痛点

核心优势主要有4方面:

7ca620731d9453c430e18a832c9d3a18.png

容器化应用封装现在已经成为应用交付的一个趋势,我可以把我的应用打包到容器里,我只打包一次,可以跑在各种地方,这种如果应用到我们IOT领域,我们传统有很多IOT嵌入式设备,它其实很多硬件和软件强相关的,如果换一个硬件,可能软件就要更改,如果说我这个容器化封装以后,设备可支持容器runtime,我可以将容器跑在任何IOT设备上。

37ce434fc2b971feb37ab958a666e872.png

通用应用抽象定义:K8s的API,包括development、pod现在其实在业内已经形成一套标准,大家都比较了解和认可,其实我们基于这些应用做这个平台,大家也更能容易接受。

d414f4d36745bcf43fd1491de0243f23.png

松耦合架构:它的可扩展性比较好,比如我们基于K8s之上可以通过CRD来定义一些API,像我们通过设备管理CRD来定义一些IOT里device的一些API,到时候我们可以直接通过K8s的一些方式来管理这些设备;还有一些可扩展,比如它的CIA可以对接各种runtime,我们有些边缘节点它的资源非常有限,我们就可以对接一些轻量化的runtime。

1f49eaa96f9e3daea405704701ab8ee3.png

其关键痛点有:

1)资源有限

  • 网关设备,128MB内存

  • K8s集群需要至少1G内存

2)网络不畅

  • 边缘位于私有网络,无公网IP

  • 云边跨越公网,带宽有限,延迟高

  • K8s的List-watch需要数据中心网络

3)边缘如何离线自治

  • 网络不稳,随时可能离线

  • 边缘业务离线可工作

  • 边缘离线可故障恢复

4)设备接入和管理

  • 缺少边缘设备抽象

  • 缺少边缘设备接入协议支持

3

KubeEdge 架构与核心理念

我们这个架构主要是分了云、边、端三部分,云上边就是我们的控制面,边就是我们的边缘节点,端就是跑了我们的一些端侧设备,云上左边是一个K8s的master,是没有做过改动的原生的K8s控制面,后边我们加了我们的一个组件叫CloudCore,它云上的组件主要是会拿一些K8s控制面上的东西,通过EdgeController和DeviceController做一些处理,然后通过下边的Cloud Hub,Cloud Hub主要是跟边端通信的,边端有个EdgeHub和Cloud Hub通信,然后把数据拿下来。

3449f746b4cb5baa0255a3b5323ce6b7.png

边端是主要做了一个应用管理和设备管理的能力,应用管理左边会有一个Edged,右边有DeviceTwin、EventBus,分别是应用管理和设备管理,左边有个DataStore,就是我们说的本地自治的能力,比如说我们这应用或者设备的元素从云上分发下来,我们是先把它存到一个数据库里,然后再到它的Edged或者设备里边,这样就能保证云边网络断开或者边缘节点重启了以后我应用的Edged它可以从数据库里把应用源数据拿出来,这样就能保证在故障的情况下业务可以正常恢复。

核心理念:

1)云边可靠协同

  • 双向多路复用消息通道,支持边缘节点位于私有网络

  • Websocket + 消息封装,大幅减少通信压力,高时延下仍可正常工作

  • 云边消息校验,网络不稳定时不丢数据

2)边缘离线自治

  • 节点元数据持久化,实现节点级离线自治

  • 节点故障恢复无需List-watch,降低网络压力,快速ready

3)边缘极致轻量

  • 重组Kubelet功能模块,极致轻量化(~70mb内存占用)

  • 支持CRI集成Containerd、CRI-O,优化runtime资源消耗

4)边缘设备管理

  • 云端通过Kubernetes API管理边缘Device

4

KubeEdge 社区生态

2d4fb2d1da42c5eeb8a6e4045bfbf5a2.png

KubeEdge致力于将Kubernetes的能力拓展到边缘

  • 业界首个边缘容器平台项目

  • Apache 2.0协议

  • 2019年3月捐给CNCF基金会

  • 2020年9月晋级为孵化级托管项目

  • K8s IoT Edge WG参考架构

  • 基于Kubernetes构建,100%兼容K8s API

  • 9个特性版本,最新版本为v1.4.0

  • 3100+ Star,810+ Fork,500+贡献者

  • 目前成立Device/IoT与MEC两个SIG

  • 参与社区贡献的企业包括:中国联通,ARM,中国移动,谐云,中国电信,时速云,JD.com,浙大SEL实验室,EMQ,InfoBlox,Inovex,Midokura等

KubeEdge代码目录概览

ADOPTERS就是我们社区的一些采纳者,比如说你用了KubeEdge,并且想成为参与者,建议者,你可以提一个PR,把你们写到这个ADOPTER里面去,下面的这些就是代码目录,主要就是cloud(云端)、edge(边缘端)、mappers(接入设备的mapper端),还有OWNERS是我们项目的一些matiner,主要负责核代码,比如你对我们社区贡献比较多,我们可以把你加到OWNERS,帮我们核代码和检视代码。

bf6fb7c119304424e74b6d1a1fd9939f.png

KubeEdge集群部署

1

KubeEdge 集群部署工具—— keadm

这个是借鉴了K8s的Kubeadm,可以一键部署KubeEdge集群,在部署KubeEdge集群时,要先装一个K8s的master,这个master用任何符合K8s的标准都可以,这个 keadm是基于K8s之上部署KubeEdge系统。

a648d10a901397829d16d27ffa61abee.png

子命令参数:

  • init:部署云端组件

  • join:部署边缘端组件

  • gettoken:从云端获取边缘端启动凭据

  • reset:重置KubeEdge集群的云端和边缘端

2

KubeEdge 部署 —— 云端

在已经装好的master上装我们的云端,用 init即可:

af09654b11e38deb1534e31b41cb5e95.png

重要参数:

  • --kube-config:连接K8s Master的凭据

  • --advertise-address:签发到边缘证书里的IP地址

3

KubeEdge 部署 —— 边缘端

边缘端主要用我们的join命令:

b869c6a9aeb2129b08dae65691e40b64.png

重要参数:

  • --token:边缘端启动时访问云端的凭据

  • --cloudcore-ipport:边缘端访问的云端IP地址

5f5ba3e97184d60fc7518eec174165d3.gif

End

附:社区贡献和技术交流地址

5f5ba3e97184d60fc7518eec174165d3.gif

End

网站: https://kubeedge.io

Github地址: https://github.com/kubeedge/kubeedge

Slack地址: https://kubeedge.slack.com

邮件列表: https://groups.google.com/forum/#!forum/kubeedge

每周社区例会: https://zoom.us/j/4167237304

Twitter: https://twitter.com/KubeEdge

文档地址: https://docs.kubeedge.io/en/latest/

相关文章:

  • 网络摄像头监控软件_一个交换机能带动多少个网络监控摄像头?
  • unity3d显示c4d材质_学习笔记分享 如何学好C4D
  • 数据窗口中的ole控件 pb_工作表数据与UserForm窗口的交互过程中如何实现数据的精确查找...
  • 商业方向的大数据专业_数学专业大数据方向的本科生,考研时该选择大数据还是管理...
  • 高德地图自动生成轨迹_揭秘高德高精度地图,无人驾驶就靠它了
  • python反序列化总结_Python 反序列化安全问题(二)
  • python可以用于工业机器人编程与操作_如何实现工业机器人编程抓取
  • 前后落差大用什么词语_被双子座追到手,你能忍受恋爱前后的反差吗?
  • sheet中没有getcolumns()方法吗_Excel中Enter键使用技巧,这5种方法你都知道吗
  • 淮北市第四届机器人比赛_科技引领 | 沧浪中学承办2020年第四届苏州市青少年人工智能挑战赛...
  • 汽车人机工程学_7万块的国产宝骏530还想跟我谈人机工程学?
  • python干什么工作轻松点_学完Python能做什么工作?
  • 四参数坐标转换c++_写给测绘新手,四参数与七参数坐标转换含义及区别
  • nacos 配置不会动态刷新_真香系列:聊聊SpringCloud Nacos服务配置中心
  • eclipse配置python解析器_python编辑器:Eclipse PyDev安装的步骤解析
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • CODING 缺陷管理功能正式开始公测
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Intervention/image 图片处理扩展包的安装和使用
  • mysql_config not found
  • Mysql优化
  • Sublime text 3 3103 注册码
  • webpack+react项目初体验——记录我的webpack环境配置
  • 我建了一个叫Hello World的项目
  • 小程序开发中的那些坑
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • C# - 为值类型重定义相等性
  • 组复制官方翻译九、Group Replication Technical Details
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (4)logging(日志模块)
  • (arch)linux 转换文件编码格式
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (vue)页面文件上传获取:action地址
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (论文阅读30/100)Convolutional Pose Machines
  • (三十五)大数据实战——Superset可视化平台搭建
  • (十)T检验-第一部分
  • (转)http-server应用
  • (转)关于pipe()的详细解析
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .gitignore
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • ::before和::after 常见的用法
  • @ModelAttribute 注解
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [android学习笔记]学习jni编程
  • [ARM]ldr 和 adr 伪指令的区别
  • [BZOJ4010]菜肴制作
  • [C#]扩展方法
  • [Codeforces] combinatorics (R1600) Part.2