本文介绍 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 架构
- KubeBus: 用来连接边缘结点和云虚拟机的虚拟网络层,有独立的网络寻址空间,支持多租户,部署在边缘节点上的应用可以属于多个用户,这些属于不同用户的应用共享一个云服务器的KubeBus
- EdgeController: 一个 Kubernetes controller 插件,让 KubeEdge 和 Kubernetes 有能力像管理集群节点一样远程管理边缘节点,允许应用通过 Kubernetes API 从云服务器将应用部署到边缘服务器上
- MetadataSyncService:用来双向同步边缘节点和云节点的信息,其中包括应用和平台自身的信息
- EdgeCore:在边缘节点运行的轻量级代理,用来启动和管理容器化的应用和 Serverless functions
KubeBus
用来解决部署在边缘节点的应用与云服务器节点的网络连接问题。
例如:在云服务器运行的视频应用客户端可以通过 KubeBus 发送 http 请求到运行着视频流服务的边缘节点,即使边缘节点在私有网络中。
KubeBus 组件既运行在云节点(KubeBus@Cloud)也运行在边缘节点(KubeBus@Edge),支持多租户。
边缘节点与边缘节点之间的 VPN
两个边缘节点可能在不同的私有网络里面,互相无法通信,KubeBus 通过在云服务器网络与私有网络之间建立的 TCP 连接之上实现 L3 延迟网络来解决网络问题。
L2数据链路层建立 KubeBus@Edge 和 KubeBus@Cloud 之间的 TCP 长连接
- L2 建立双工网络,完成边缘节点和云节点的通信
- KubeBus@Cloud 也负责边缘节点之间的路由
将边缘节点与云节点网络连接
KubeEdge HTTP 协议栈
- 传输层 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 的边缘进程包含:
- 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 是 CNCF 官方认证的 Kubernetes 发行版本,专门为在资源有限的环境中运行 Kubernetes 研发和运维人员设计,目的是在 x86、ARM64 和 ARMv7D 架构的边缘节点上运行小型的 Kubernetes 集群。
KubeEdge 是一种完全去中心化的部署模式,管理面部署在云端,边缘节点只需要运行 Kubernetes 的 agent,无需太多资源,从 Kubernetes 的角度看,边缘节点 + 云节点 = 一个完整的 Kubernetes 集群。
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 机制扩展性更好,允许大规模设备的接入。