“容器 + Kubernetes”的黄金组合在互联网企业的DevOps中发挥了巨大的作用。随着物联网领域对边缘计算的需求越来越多,近期也出现了K8S运行在边缘侧的需求和解决方案。
如何在边缘使用Kubernetes呢?有调查结果显示,30%的用户希望在边缘部署完整的K8S集群,而70%的用户希望在云端部署K8S的管理平台,在边缘部署K8S的代理程序(agent)。
K8S主要是为集中性的云计算平台来设计的,对于边缘计算来说有点太重了。为了将K8S从云端延伸到边缘场景,业内提出了几种不同的开源K8S边缘解决方案。其中比较有代表性的解决方案包括华为的KubeEdge、Rancher Labs的K3S和阿里云的OpenYurt等。
KubeEdge
KubeEdge是由华为开发,在2019年成为CNCF在智能边缘领域的首个正式项目。云边协同是KubeEdge的一大亮点。KubeEdge通过K8S标准API在云端管理边缘节点、设备和工作负载,边缘节点的系统升级和应用程序更新都可以直接从云端下发,提升边缘运维效率。
KubeEdge架构上分为三层:云端、边缘和设备层。Kubernetes master运行在云端,用户可以直接通过kubectl命令行在云端管理边缘节点、设备和应用,使用习惯与原生Kubernetes完全一致,使用者无需重新适应。
KubeEdge系统架构
KubeEdge的云端进程包含2个组件:
- Cloud Hub部署在云端,接收Edge Hub同步到云端的信息;
- Edge Controller部署在云端,用于控制Kubernetes API Server与边缘的节点、应用和配置的状态同步。
KubeEdge的边缘进程主要包括5个组件:
- Edged是个轻量级的节点代理Kubelet,实现Pod、Volume、Node等K8S资源对象的生命周期管理;
- Meta Manager负责本地元数据的持久化,是边缘节点自治能力的关键;
- Edge Hub是多路复用的消息通道,提供可靠和高效的云边信息同步;
- Device Twin用于抽象物理设备并在云端生成一个设备状态的映射;
- EventBus订阅来自于MQTT Broker的设备数据。
K3S
K3S是CNCF官方认证的Kubernetes发行版,专为在资源受限环境中运行K8S而设计,目的是为了在x86、ARM64和ARMv7D架构的边缘节点上运行小型的K8S集群。由Rancher Labs公司开发,Rancher Labs 是一家提供容器技术基础设施的初创企业,于2014年成立。
K3S的名称含义是指“5 Less Than K8S”,其尺寸、资源需求、复杂度、使用难度等都远低于K8S,最大特点就是轻量和易用,非常适合用于边缘计算场景。
K3S系统架构
K3S分Server和Agent,Server就是K8S管理面组件,Agent即K8S的数据面组件。与KubeEdge不同,K3S的所有组件(包括Server和Agent)都运行在边缘侧。
K3S基于特定版本的K8S做了代码修改,包括:使用containderd替换Docker,显著减少运行时占用空间;引入SQLite代替etcd作为管理面数据存储等。
K3S与KubeEdge比较
KubeEdge的管理面部署在云端,边缘节点无需太多资源就能运行代理节点程序,云边通过消息协同。从K8S的角度看,边缘节点 + 云端构成一个完整的K8S集群。
KubeEdge部署模式:云边结合才是一个K8S集群
K3S可以在边缘运行完整的K8S集群,这意味着K3S在每个边缘网络都需要额外部署Kubernetes管理面。
K3S部署模式:每个边缘网络都是一个K8S集群
K3S的部署方式存在一些问题:部署管理面需要消耗较多资源;不同K3S集群间网络还需要打通;管理多个K3S集群还需要在上面再叠加一层多集群管理组件,遗憾的是Rancher Labs公司尚未开源这个多集群管理组件。
相比K3S,KubeEdge可以支持云边协同,借助华为强大的技术和市场能力,KubeEdge技术的未来市场前景非常值得期待。