KubeEdge详解

一、KubeEdge介绍

KubeEdge 是一个开源的系统,可将本机容器化应用编排和管理扩展到边缘端设备。 它构建在Kubernetes之上,为网络和应用程序提供核心基础架构支持,并在云端和边缘端部署应用,同步元数据。100%兼容K8S API,可以使用K8S API原语管理边缘节点和设备。KubeEdge 还支持 MQTT 协议,允许开发人员编写客户逻辑,并在边缘端启用设备通信的资源约束。

1、优势

kubernetes + 容器的组合大大提高了用户创建部署应用的效率。kubernetes 可以把 n 台主机整合成一个集群,用户在 master 节点上通过编写一个 yaml 或者 json 格式的配置文件,也可以通过命令等请求 Kubernetes API 创建应用,就直接将应用部署到集群上的各个节点上,该配置文件中还包含了用户想要应用程序保持的状态,从而生成用户想要的环境。
Kubernetes 作为容器编排的标准,自然会想把它应用到边缘计算上,即通过 kubernetes 在边缘侧部署应用,但是 kubernetes 在边缘侧部署应用时遇到了一些问题,例如:

  • 边缘侧设备没有足够的资源运行一个完整的 Kubelet
  • 一些边缘侧设备是 ARM 架构的,然而大部分的 Kubernetes 发行版并不支持 ARM 架构
  • 边缘侧网络很不稳定,甚至可能完全不通,而 kubernetes 需要实时通信,无法做到离线自治
  • 很多边缘设备都不支持TCP/IP 协议
  • Kubernetes 客户端(集群中的各个Node节点)是通过 list-watch 去监听 Master 节点的 apiserver 中资源的增删改查,list-watch 中的 watch 是调用资源的 watch API 监听资源变更事件,基于 HTTP 长连接实现,而维护一个 TCP 长连接开销较大。从而造成可扩展性受限。

为了解决包含但不限于以上 Kubernetes 在物联网边缘场景下的问题,从而产生了KubeEdge 。对应以上问题:

  • KubeEdge 保留了 Kubernetes 的管理面,重新开发了节点 agent,大幅度优化让边缘组件资源占用更低很多
  • KubeEdge 可以完美支持 ARM 架构和 x86 架构
  • KubeEdge 有离线自治功能,可以看 MetaManager 组件的介绍
  • KubeEdge 丰富了应用和协议支持,目前已经支持和计划支持的有:MQTT、BlueTooth、OPC UA、Modbus等。
  • KubeEdge 通过底层优化的多路复用消息通道优化了云边的通信的性能,可以看 EdgeHub 组件的介绍

2、介绍

2.1 应用场景、特点等

 

 
上图是 华为云IEF 的应用场景,Kubeedge 就是源于这个产品,它基于 KubeEdge 和 Kubernetes 生态构建,将云原生的技术应用到边缘计算。IEF 通过纳管边缘节点,将云端AI应用、函数计算等能力下发到边缘节点(EdgeNode),将公有云能力延伸到靠近设备的一端,使得边缘节点拥有云端相同能力,能够实时处理终端设备计算需求。

KubeConShanghai2018——KubeEdge开源首秀
KubeEdge 向左,K3S 向右
KubeEdge实现原理

2.2 架构

 

KubeEdge 由以下组件构成:

2.1.1 云边通信

  • CloudHub: CloudHub 是一个 Web Socket 服务端,用于大量的 edge 端基于 websocket 或者 quic 协议连接上来。负责监听云端的变化, 缓存并发送消息到 EdgeHub
  • EdgeHub: 是一个 Web Socket 客户端,负责将接收到的信息转发到各edge端的模块处理;同时将来自个edge端模块的消息通过隧道发送到cloud端。提供可靠和高效的云边信息同步

如何配置通信协议

2.1.2 云上部分

  • EdgeController: 用于控制 Kubernetes API Server 与边缘的节点、应用和配置的状态同步。
  • DeviceController: DeviceController 是一个扩展的 Kubernetes 控制器,管理边缘设备,确保设备信息、设备状态的云边同步。

2.1.3 边缘部分

  • MetaManager: MetaManager 模块后端对应一个本地的数据库(sqlLite),所有其他模块需要与 cloud 端通信的内容都会被保存到本地 DB 种一份,当需要查询数据时,如果本地 DB 中存在该数据,就会从本地获取,这样就避免了与 cloud 端之间频繁的网络交互;同时,在网络中断的情况下,本地的缓存的数据也能够保障其稳定运行(比如你的智能汽车进入到没有无线信号的隧道中),在通信恢复之后,重新同步数据。是边缘节点自治能力的关键
  • Edged: 是运行在边缘节点的代理,用于管理容器化的应用程序。算是个重新开发的轻量化 Kubelet,实现 Pod,Volume,Node 等 Kubernetes 资源对象的生命周期管理
  • EventBus: EventBus 是一个与 MQTT 服务器(mosquitto)交互的 MQTT 客户端,为其他组件提供订阅和发布功能。
  • ServiceBus: ServiceBus是一个运行在边缘的HTTP客户端,接受来自云上服务的请求,与运行在边缘端的HTTP服务器交互,提供了云上服务通过HTTP协议访问边缘端HTTP服务器的能力。
  • DeviceTwin: DeviceTwin 负责存储设备状态并将设备状态同步到云,它还为应用程序提供查询接口。
原文地址:https://www.cnblogs.com/uestc2007/p/15598445.html