摘要:2022年9月29日,KubeEdge发布1.12版本。新版本新增多个增强功能,在扩展性、稳定性、安全性上均有大幅提升。
本文分享自华为云社区《KubeEdge 1.12版本发布,稳定性、安全性、可扩展性均带来大幅提升》,作者:云容器大未来。
北京时间2022年9月29日,KubeEdge发布1.12版本。新版本新增多个增强功能,在扩展性、稳定性、安全性上均有大幅提升。
KubeEdge v1.12 新增特性:
▪ 全新的边缘设备管理接口DMI
▪ 全新的Edged实现
▪ EdgeMesh支持高可用(HA)模式
▪ 支持批量远程升级边缘节点
▪ 边缘原生接口支持认证鉴权
▪ CloudHub可靠性增强
▪ 新增摄像头接口标准GigE的 Mapper实现
新特性概览
全新的云原生边缘设备管理接口DMI
1.12版本中,对全新的云原生边缘设备管理标准Device Management Interface(DMI),提供了Alpha版本支持。DMI让设备管理者可以用云原生的方式对边缘设备进行管理,它的设计覆盖了设备生命周期管理、设备数据管理,且解耦了管理面与数据面数据,使KubeEdge的边缘设备管理更稳定、易插拔、更具扩展性。目前本版本支持了边缘设备生命周期管理能力,边缘设备数据管理能力正在实现中。
设备生命周期管理(管理面)
北向依旧通过CRD使用Kubernetes扩展API来管理边缘设备生命周期;南向提供了统一的边缘设备生命周期管理相关的gRPC接口,包括设备注册、设备更新、设备删除、设备状态更新等。边缘设备开发者可以以更统一、更灵活、更标准化的方式来开发Device Mapper。
设备数据管理(数据面)
解耦了设备管理面与数据面,数据面信息可以通过配置灵活地选择在边端被处理或通过数据面通道在云端处理,管理面的云边通道仅传输少量的管控信息,大幅降低了云边通道拥塞的风险,提高了KubeEdge系统的稳定性。
DMI支持用户通过多种形式对边缘设备数据进行访问,包括:
1、Device as a Service(DaaS),通过Service的方式访问、拉取边缘设备数据;
2、通过配置规则的方式,将采集到的设备数据推送到指定接收者
数据消费者包括:云端设备数据消费者应用、边缘端设备数据消费者应用、第三方数据消费者应用、数据流转平台broker、云端或边缘端数据持久化数据库等。
通过DMI接口,开发者只需按照DMI接口标准实现对应协议的Mapper,并在云上执行相应的API操作,就能够将设备接入到KubeEdge中来,享受KubeEdge边缘计算平台带来的云原生设备管理体验。
更多信息可参考:https://github.com/kubeedge/kubeedge/pull/4013
全新的Edged实现
Edged模块是边缘侧的轻量化容器应用引擎,用于实现边缘Pod应用的生命周期管理,以及Node状态收集与上报等能力。新版的Edged为了保证边缘的轻量化,在原生Kubelet中做了优化与裁剪,并保留了裁剪历史记录(Commit History),最终直接调用Kubelet入口的Run函数启动以集成在EdgeCore中。
新版的Edged,由于保留了对Kubelet的裁剪历史记录(Commit History),用户和开发者可以根据历史记录了解裁剪点。直接调用Kubelet入口的Run函数启动,减少了对Kubelet的侵入修改,将大大简化后续K8s版本依赖升级,也可将上游K8s漏洞修复及时全量同步到KubeEdge版本。
新版Edged的配置参数也与Kubelet保持一致。为了保持KubeEdge可靠的云边消息传输和边缘自治能力,在新版Edged中,我们仍然通过通过云边可靠通道传输应用、节点相关元消息,并将元数据存入边缘数据库。
对Kubelet的优化与裁剪,在KubeEdge组织下的Kubernetes仓库维护了裁剪后的版本,开发者可以通过commit提交记录查看裁剪记录,后续也可以根据需求自主调整裁剪内容。v1.12版本主要裁剪了Kubelet中在边缘不会使用到的特性、第三方内置存储、Cloud Provider等,更多裁剪详情可以参考:https://github.com/kubeedge/kubernetes/commits/v1.22.6-kubeedge1。
EdgeMesh支持高可用(HA)模式
EdgeMesh作为KubeEdge集群的数据面组件,为应用程序提供了服务发现与流量代理功能,稳定与高效的流量转发是用户对EdgeMesh的核心诉求。1.12版本的EdgeMesh新增了HA模式的部署方式,以支持EdgeMesh中继节点的高可用性。
HA部署模式下的EdgeMesh可以避免中继节点的单点故障问题,同时将中继转发与协助网络穿透的能力从edgemesh-server移入到edgemesh-agent中,使得具备中继能力的edgemesh-agent能够自动承担起中继节点的角色。因此用户可以在合适的位置设置具备中继能力的edgemesh-agent以分担云端中继节点的负载,同时也能解决过远的中继节点带来的长时延问题。在多中继节点下,EdgeMesh系统运行时能够自动选择一个最优的中继节点运行转发流量或协助网络穿透的功能。
用户在升级到v1.12.0版本的EdgeMesh时,默认无需再部署edgemesh-server,升级时需要配置中继节点表relayNodes中的nodeName和advertiseAddress参数以指定中继节点和其公网IP地址,通过Helm安装命令示例如下:
helm install edgemesh --namespace kubeedge \
--set agent.psk=<your psk string> \
--set agent.relayNodes[0].nodeName=k8s-master,agent.relayNodes[0].advertiseAddress="{1.1.1.1}" \
--set agent.relayNodes[1].nodeName=ke-edge1,agent.relayNodes[1].advertiseAddress="{2.2.2.2,3.3.3.3}" \
https://raw.githubusercontent.com/kubeedge/edgemesh/main/build/helm/edgemesh.tgz
中继节点表relayNodes支持指定多个中继节点,每个中继节点支持配置多个公网IP地址。如果后续有新的中继节点加入,可以通过执行kubectl -n kubeedge edit configmap edgemesh-agent-cfg编辑中继节点表relayNodes添加新的中继节点,EdgeMesh能够自动热加载此配置。
更多信息可参考proposal: https://github.com/kubeedge/edgemesh/pull/372
支持批量远程升级边缘节点
KubeEdge集群常常管理数以万计分散的远程边缘节点,如何对这些节点实现方便快捷的升级更新是一个不小的挑战。1.12版本中新增了NodeUpgradeJob API及其Controller来实现云上批量远程升级边缘节点。
用户可以通过在云上创建NodeUpgradeJob来创建升级任务,用户可以指定升级的节点范围以及升级版本号等内容。例如以下配置表示升级edge-node1及edge-node2两个边缘节点到版本v1.12.0,升级结果将会显示在status字段中,用户可以通过执行kubectl get nodeupgradejob upgrade-example -oyaml命令来查看升级结果。
apiVersion: operations.kubeedge.io/v1alpha1
kind: NodeUpgradeJob
metadata:
name: upgrade-example
labels:
description: upgrade-label
spec:
version: "v1.12.1"
timeoutSeconds: 60
nodeNames:
- edge-node1
- edge-node2
该特性处于alpha版本,用户需要手动启用该功能。如下所示在cloudcore.yaml配置文件中将nodeUpgradeJobController模块置为true以启用该功能。
nodeUpgradeJobController:
enable: true
buffer:
nodeUpgradeJobEvent: 1
updateNodeUpgradeJobStatus: 1024
load:
nodeUpgradeJobWorkers: 1
更多信息可参考proposal: https://github.com/kubeedge/kubeedge/pull/3822
边缘原生接口支持认证鉴权
在边缘侧,EdgeCore组件通过MetaServer模块对外提供边缘原生接口能力。为了巩固和加强边缘侧的安全,在用户使用边缘原生接口访问原生K8s API时,需要对用户请求进行认证和鉴权。
新版本MetaServer可通过HTTPS方式启动并提供服务,用户的请求需要经过Token方式鉴权,未经过认证或鉴权的请求将无法访问。出于安全性考虑,Token鉴权方式在当前版本中要求边缘节点保持在线状态,离线场景下的鉴权请求将默认被拒绝。
新增的认证鉴权特性当前处于Alpha阶段,通过特性开关(featuregate)requireAuthorization来控制,默认是关闭状态,即用户默认仍然可通过监听在localhost的HTTP接口进行无鉴权访问。用户可以在CloudCore、EdgeCore的配置文件中配置开启该特性。
apiVersion: edgecore.config.kubeedge.io/v1alpha1
kind: EdgeCore
featureGates:
requireAuthorization: true
----------------
apiVersion: cloudcore.config.kubeedge.io/v1alpha1
kind: CloudCore
featureGates:
requireAuthorization: true
细节可参考 https://github.com/kubeedge/kubeedge/issues/4108
CloubHub可靠性增强
在大量KubeEdge使用场景中,边缘设备物理位置高度分散,并处于不稳定的物理环境中,因此云边通信网络质量较差,面临着高时延、网络中断、闪断闪连等问题。在KubeEdge中,CloudHub是云边之间通信的桥梁,负责边缘设备的连接管理和分发上下行的云边消息。在1.12版本中,我们重构了CloudHub模块,增强了在上述极端场景下CloudHub的稳定性和鲁棒性。
更多信息可参考:https://github.com/kubeedge/kubeedge/pull/4087
新增摄像头接口标准GigE的 Mapper实现
KubeEdge支持多种协议的边缘设备接入。GigE Vision是一种摄像头接口标准,在工业机器视觉产品中有广泛的应用。在这个版本中,我们提供了基于GigE协议开发的Mapper,GigE Mapper可以支持GigE视觉协议摄像机、工业相机设备接入KubeEdge。它使用第三方开源摄像机SDK库rc_genam_api,通过GeniCam协议访问不同厂商的摄像机。
每个GigE Mapper可以支持多个摄像头同时连接,通过设备SN来区分不同的摄像头设备,还可以通过KubeEdge北向接口,以CRD的形式来对摄像头参数进行配置。通过GigE Mapper管理摄像头,还支持摄像头捕获功能,支持导出PNG和PNM图像格式。目前测试了两种型号的摄像机,Basler acA640和HIKROBOT MV-CA050-12GC。
GigE Mapper是基于KubeEdge社区提供的Mapper开发框架Mapper-SDK-GO来开发实现的。使用Mapper-SDK-GO框架可以一键生成Mapper程序的主体内容,开发者只需要完成几个关键接口的对应协议的实现,即可开发出对应协议接入的Mapper,非常方便。
版本升级注意事项
- EdgeCore的配置参数已经升级到v1alpha2版本,如果需要升级节点到v1.12,为了适配新版Edged,您需要手动修改EdgeCore中Edged模块的配置参数。
- 如果使MetaServer提供的边缘原生接口进行认证鉴权,您需要在CloudCore和EdgeCore的配置文件中将RequireAuthorization 特性开关打开,一旦开启,MetaServer只能以HTTPS访问。
- 如果要将EdgeMesh升级到v1.12,不需要部署现有的EdgeMesh-Server,且需要配置relayNodes。
- 如果要在 KubeEdge v1.12 上运行 EdgeMesh v1.12,并使用 https 请求与 KubeEdge 通信,则必须对EdgeMesh设置 kubeAPIConfig.metaServer.security.enable=true。
致谢
感谢KubeEdge社区技术指导委员会(TSC)、各SIG成员对v1.12版本开发的支持与贡献,未来KubeEdge将持续在新场景探索与支持、稳定性、安全性、可扩展性等方面持续发展与演进!
相关链接
Release Notes:https://github.com/kubeedge/kubeedge/blob/master/CHANGELOG/CHANGELOG-1.12.md
GigE Mapper: https://github.com/kubeedge/mappers-go/tree/main/mappers/gige
Mapper-SDK-GO:https://github.com/kubeedge/mappers-go/tree/main/mapper-sdk-go
关于 KubeEdge
KubeEdge是业界首个云原生边缘计算框架、云原生计算基金会内部唯一孵化级边缘计算开源项目,社区已完成业界最大规模云原生边云协同高速公路项目(统一管理10万边缘节点/50万边缘应用)、业界首个云原生星地协同卫星、业界首个云原生车云协同汽车、业界首个云原生油田项目,开源业界首个分布式协同AI框架Sedna及业界首个边云协同终身学习范式,并在持续开拓创新中。
KubeEdge网站 : 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/