摘要: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 上运行 EdgeMes​​h 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/

点击关注,第一时间了解华为云新鲜技术~

KubeEdge 1.12版本发布,稳定性、安全性、可扩展性均带来大幅提升的更多相关文章

  1. 支持边云协同终身学习特性,KubeEdge子项目Sedna 0.3.0版本发布!

    摘要:随着边缘设备数量指数级增长以及设备性能的提升,边云协同机器学习应运而生,以期打通机器学习的最后一公里. 本文分享自华为云社区<支持边云协同终身学习特性,KubeEdge子项目Sedna 0 ...

  2. 团队作业——团队项目Alpha版本发布

    该作业所属课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 作业要求链接    https://edu.cnblogs. ...

  3. 云原生生态周报 Vol.9| K8s v1.15 版本发布

    本周作者 | 衷源.心贵 业界要闻 1.Kubernetes Release v1.15 版本发布,新版本的两个主题是持续性改进和可扩展性.(https://github.com/kubernetes ...

  4. Python 3.9 beta2 版本发布了,看看这 7 个新的 PEP 都是什么?

    原作:Jake Edge 译者:豌豆花下猫@Python猫 英文:https://lwn.net/Articles/819853/ 随着 Python 3.9.0b1 的发布,即开发周期中计划的四个 ...

  5. Python 3.9 beta2 版本发布了,看看新特性?

    随着 Python 3.9.0b1 的发布,即开发周期中计划的四个 beta 版本的首个,Python 3.9 的功能已经是完善了.在 10 月发布最终版本之前,还会有许多测试和稳定性方面的工作要做. ...

  6. glibc 各版本发布时间以及内核默认glibc版本

    最近有些软件要求glibc 2.14+,centos 6.x自带的版本是2.12的,特查了下glibc 各版本发布时间以及与对应的内核,如下: Complete glibc release histo ...

  7. RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布

    (新年巨献) RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布 历时数月,RDIFramework.NET V2.8版本发布了,感谢大家的支持. RDIFram ...

  8. RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.7 版本发布

    历时数月,RDIFramework.NET V2.7 版本发布了,感谢大家的支持. RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,为企业或个人在.NET环境下快速开发系 ...

  9. JDK 7u60 版本发布下载安装

    JDK 7u60 版本发布了,主要改进包括: JavaFX 更新到 2.2.60 Java Mission Control(JMC)更新到 5.3 如果你在一个早期版本的Java中禁用了过期检查功能, ...

随机推荐

  1. php static 和self区别

    static(关键字) 类似于 self(关键字) , 但它指向的是被调用的类(Document) 而不是包含类(DomainObject) , static 和 self 的区别: <?php ...

  2. 使用JDK的同步容器时,应该避免那些坑?

    摘要:在使用JDK中的同步容器时,应该尽量避免哪些坑 本文分享自华为云社区<[高并发]亿级流量高并发秒杀系统商品"超卖"了,只因使用的JDK同步容器中存在这两个巨大的坑!!( ...

  3. 使用Python3.7配合协同过滤算法(base on user,基于人)构建一套简单的精准推荐系统(个性化推荐)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_136 时至2020年,个性化推荐可谓风生水起,Youtube,Netflix,甚至于Pornhub,这些在互联网上叱咤风云的流媒体 ...

  4. Map集合的遍历方式以及TreeMap集合保存自定义对象实现比较的Comparable和Comparator两种方式

    Map集合的特点 1.Map集合中保存的都是键值对,键和值是一一对应的 2.一个映射不能包含重复的值 3.每个键最多只能映射到一个值上 Map接口和Collection接口的不同 Map是双列集合的根 ...

  5. 《笨办法学Python3 》入坑必备,并不是真笨学!!!

    <笨办法学Python3 >免费下载地址 内容简介 · · · · · · 本书是一本Python入门书籍,适合对计算机了解不多,没有学过编程,但对编程感兴趣的读者学习使用.这本书以习题的 ...

  6. 【AGC】集成华为AGC崩溃服务实用教程

    ​简介 AppGallery Connect(简称AGC)崩溃服务提供了轻量级崩溃分析服务,集成Crash SDK,可以实现零代码快速集成,您的应用能够在崩溃时自动收集崩溃报告,帮助您了解应用版本质量 ...

  7. DataGridVIew控件绑定数据之后的,增、插、删操作

    最开始没有绑定数据,很快就实现了增.插.删操作,可是绑定数据之后,进行这些操作就会报错. 网上对这方面的资料比较少,自己摸索着找到了解决方法,也就是直接对绑定的数据进行操作,这里以DataTable为 ...

  8. Android平台RTMP/RTSP播放器开发系列--解码和绘制

    本文主要抛砖引玉,粗略介绍下Android平台RTMP/RTSP播放器中解码和绘制相关的部分(Github). 解码 提到解码,大家都知道软硬解,甚至一些公司觉得硬解码已经足够通用,慢慢抛弃软解了,如 ...

  9. Java 将Excel转为UOS

    以.uos为后缀的文件,表示Uniform Office Spreadsheet文件,是一种国产的办公文件格式,该格式以统一办公格式(UOF)创建,使用XML和压缩保存电子表格.既有的Excel表格文 ...

  10. 利用C库函数time()打印当前系统动态时间

    引入日期和时间头文件 #include<time.h> 用time_t定义一个存储时间的变量获取时间(以秒为单位) time_t t; time (&t); //获取1970年以来 ...