KubeEdge

本文介绍 KubeEdge。

背景和相关工作

Hung Cao 和 Monica Wachowicz 开发了一个平台用来部署在运行中的公交车上,来收集实时数据进行分析有意义的规律。

有人研究如何对 DNN 计算任务进行切分,研究计算切分策略来平衡在边缘服务器和云服务器的运行时间,来实现低延迟、低消耗和高吞吐量。

有研究表明,通过在移动设备和数据中心之间进行调度来运行 DNN 计算,可以减少3.1倍延迟,减少59.5%移动端能量消耗,平均改进数据中心的吞吐量为原来的1.5倍

Amazon AWS 和 Microsoft Azure 开发的 IoT 平台使用的是 Pub/Sub broker (MQTT 或 AMQP)来为 IoT 设备和云服务提供通信服务,Pub/Sub 协议适合于边缘设备和云设备之间的异步通信,而现在由于将计算任务分配到了边缘设备,所以边缘设备需要和云设备紧密通信,更多的需要的是基于同步 RPC 的通信方式。

KubeEdge 优势:

  • 提供基于同步 RPC 的通信方式
  • 提供跨设备的统一的运行时环境,包括边缘节点和云节点
  • 提供 Serverless 功能

KubeEdge 架构

KubeEdge Architecture

  • KubeBus: 用来连接边缘结点和云虚拟机的虚拟网络层,有独立的网络寻址空间,支持多租户,部署在边缘节点上的应用可以属于多个用户,这些属于不同用户的应用共享一个云服务器的KubeBus
  • EdgeController: 一个 Kubernetes controller 插件,让 KubeEdge 和 Kubernetes 有能力像管理集群节点一样远程管理边缘节点,允许应用通过 Kubernetes API 从云服务器将应用部署到边缘服务器上
  • MetadataSyncService:用来双向同步边缘节点和云节点的信息,其中包括应用和平台自身的信息
  • EdgeCore:在边缘节点运行的轻量级代理,用来启动和管理容器化的应用和 Serverless functions

KubeBus

用来解决部署在边缘节点的应用与云服务器节点的网络连接问题。

例如:在云服务器运行的视频应用客户端可以通过 KubeBus 发送 http 请求到运行着视频流服务的边缘节点,即使边缘节点在私有网络中。

KubeBus 组件既运行在云节点(KubeBus@Cloud)也运行在边缘节点(KubeBus@Edge),支持多租户。

边缘节点与边缘节点之间的 VPN

KubeBus Edge Node VPN

两个边缘节点可能在不同的私有网络里面,互相无法通信,KubeBus 通过在云服务器网络与私有网络之间建立的 TCP 连接之上实现 L3 延迟网络来解决网络问题。

L2数据链路层建立 KubeBus@Edge 和 KubeBus@Cloud 之间的 TCP 长连接

  • L2 建立双工网络,完成边缘节点和云节点的通信
  • KubeBus@Cloud 也负责边缘节点之间的路由

将边缘节点与云节点网络连接

Connecting Edge VPN to Cloud Network

KubeEdge HTTP 协议栈

KubeBus Http Protocal Stack

  • 传输层 L4 是 KubeBus 中有错误容忍的可靠连接层,类似于 TCP
  • 在 L4 之上有两个 HTTP 反向代理,用来完成云边通信
  • 多租户:每个注册到 KubeBus 上的 web 服务都有一个全局唯一的标识符,由租户 id、端节点名称和服务名称组成。KubeBus 在转发和访问服务的时候,将全局标识符作为 URL 的一部分。
Http(s)://{hostname}/{Trnant Name}/{Edge Node Name}/{Http WebService Name}/...

EdgeController

  • Kubernetes 的 controller 插件
  • EdgeController 在云服务器上代表边缘节点
  • 并不直接运行边缘节点任务,而是通过 KubeBus 将任务信息发送到边缘节点

Metadata Sync Service

同步云边之间的元信息,解决两个问题:

  • 解决边缘节点离线场景的数据保存问题
  • 低带宽问题,同步期间的数据越小越好,使用增量同步

EdgeCore

运行在每个边缘节点的轻量级代理,在 KubeEdge 平台注册,一个进程包含所有 KubeEdge 的功能,包含 KubeBus、MetadataSyncService、AppEngine 和本地 ETCD 存储。

最新架构

KubeEdge Architecture

架构上分为三层:云、边缘和设备层。

KubeEdge 的边缘进程包含:

  • Edged:轻量化的 Kubelet, 实现 Pod、Volume、Node 等 Kubernetes 资源对象的生命周期管理。
  • MetaManager:负责本地元数据的持久化,是边缘节点自治能力的关键。
  • EdgeHub:多路复用的消息通道,提供可靠和高效的云边信息同步。
  • DeviceTwin:用于抽象物理设备并在云服务器上生成一个设备状态的映射。
  • EventBus:订阅来自 MQTT Broker 的设备数据。

KubeEdge 的云服务器进程包含:

  • CloudHub:接受 EdgeHub 同步到云的信息。
  • EdgeController:用于控制Kubernetes API Server 与边缘节点之间对于应用和配置的状态的同步。

Kubernetes master 运行在云服务器上,用户可以直接通过 kubectl 直接在云端管理边缘节点、设备和应用,使用习惯和原生 Kubernetes 保持一致。

与 K3s 的对比

K3s Architecutre

K3s 是 CNCF 官方认证的 Kubernetes 发行版本,专门为在资源有限的环境中运行 Kubernetes 研发和运维人员设计,目的是在 x86、ARM64 和 ARMv7D 架构的边缘节点上运行小型的 Kubernetes 集群。

K3s Model

KubeEdge 是一种完全去中心化的部署模式,管理面部署在云端,边缘节点只需要运行 Kubernetes 的 agent,无需太多资源,从 Kubernetes 的角度看,边缘节点 + 云节点 = 一个完整的 Kubernetes 集群。

KubeEdge Model

K3s 会在边缘运行完整的 Kubernetes 集群,所以 K3s 不是一个去中心化的部署模型,每个边缘都需要额外部署 Kubernetes 管理面,这种部署带来的问题:

  • 资源耗费较大
  • 需要打通集群之间的网络
  • 为管理边缘 Kubernetes 集群,需要在集群之上叠加一层多集群管理组件(未开源)

KubeEdge 优势

  • 云边协同:KubeEdge 通过 Kubernetes API 在云端管理边缘节点、设备和工作负载的增删改查,边缘节点的系统升级和应用程序更新都可以直接从云端下发,提升边缘节点的运维效率。
  • 边缘节点离线自治:离线场景下自主工作,不定期进行状态同步,只有在重连之后才会与云端控制面进行通信
  • 设备管理:KubeEdge 提供可插拔式的设备统一管理框架,允许用户在此框架上根据不同的协议或实际需求开发设备接入驱动,目前已经支持和计划支持的有:MQTT、BlueTooth、OPC UA、Modbus等。
  • 轻量级:在保留完整的 Kubernetes 控制面前提下(K3s 直接将一些功能删减),重新开发了 agent 代理, KubeEdge agent 的内存和 CPU 占用都比 K3s agent 小。
  • KubeEdge 的多路复用消息通道(EdgeHub)相对于 Kubernetes 基于 HTTP 长连接的 list/watch 机制扩展性更好,允许大规模设备的接入。

参考文献