KubeEdge 1.12版本发布,稳定性、安全性、可扩展性均带来大幅提升
摘要: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/
KubeEdge 1.12版本发布,稳定性、安全性、可扩展性均带来大幅提升的更多相关文章
- 支持边云协同终身学习特性,KubeEdge子项目Sedna 0.3.0版本发布!
摘要:随着边缘设备数量指数级增长以及设备性能的提升,边云协同机器学习应运而生,以期打通机器学习的最后一公里. 本文分享自华为云社区<支持边云协同终身学习特性,KubeEdge子项目Sedna 0 ...
- 团队作业——团队项目Alpha版本发布
该作业所属课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 作业要求链接 https://edu.cnblogs. ...
- 云原生生态周报 Vol.9| K8s v1.15 版本发布
本周作者 | 衷源.心贵 业界要闻 1.Kubernetes Release v1.15 版本发布,新版本的两个主题是持续性改进和可扩展性.(https://github.com/kubernetes ...
- Python 3.9 beta2 版本发布了,看看这 7 个新的 PEP 都是什么?
原作:Jake Edge 译者:豌豆花下猫@Python猫 英文:https://lwn.net/Articles/819853/ 随着 Python 3.9.0b1 的发布,即开发周期中计划的四个 ...
- Python 3.9 beta2 版本发布了,看看新特性?
随着 Python 3.9.0b1 的发布,即开发周期中计划的四个 beta 版本的首个,Python 3.9 的功能已经是完善了.在 10 月发布最终版本之前,还会有许多测试和稳定性方面的工作要做. ...
- glibc 各版本发布时间以及内核默认glibc版本
最近有些软件要求glibc 2.14+,centos 6.x自带的版本是2.12的,特查了下glibc 各版本发布时间以及与对应的内核,如下: Complete glibc release histo ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布
(新年巨献) RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布 历时数月,RDIFramework.NET V2.8版本发布了,感谢大家的支持. RDIFram ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.7 版本发布
历时数月,RDIFramework.NET V2.7 版本发布了,感谢大家的支持. RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,为企业或个人在.NET环境下快速开发系 ...
- JDK 7u60 版本发布下载安装
JDK 7u60 版本发布了,主要改进包括: JavaFX 更新到 2.2.60 Java Mission Control(JMC)更新到 5.3 如果你在一个早期版本的Java中禁用了过期检查功能, ...
随机推荐
- mac 无任何来源选项
终端执行命令 sudo spctl --master-disable
- JPA作持久层操作
JPA(Hibernate是jpa的实现) jpa是对实体类操作,从而通过封装好的接口直接设置数据库的表结构.虽然jpa可以直接通过编写java代码来操作数据库表结构,避免了sql的编写,但别忘了需要 ...
- Python-基础学习-第二轮
目录 数据类型 文件 自调用其他程序 os.system函数 os.startfile 函数 subprocess 模块 线程和进程 创建新线程 共享数据的访问控制 deamon线程 多线程 JSON ...
- P1980 计数问题 - 记录
P1980 计数问题 题目描述 试计算在区间 1 到 n的所有整数中,数字x(0 ≤ x ≤ 9)共出现了多少次?例如,在 1到11中,即在 1,2,3,4,5,6,7,8,9,10,11中,数字1出 ...
- Java学习--方法
Java学习 方法 方法 定义 Java方法是语句的集合,一起执行一个功能. 方法是解决一类问题的步骤的有序组合. 方法包含在类或对象中. 方法在程序中被创建,在其他地方被引用. 设计方法的时候,最好 ...
- CSS 笔记目录
布局 CSS 布局(一):Flex 布局 选择器 CSS 选择器(一):属性选择器 CSS 选择器(二):子代选择器(>)
- 为什么各大厂自研的内存泄漏检测框架都要参考 LeakCanary?因为它是真强啊!
请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · AndroidFamily 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] ...
- [CF1537E] Erase and Extend (字符串)
题面 给一个长度为 n \tt n n 的字符串,你可以进行无限次以下两种操作之一: 删去末尾的字符(此时要保证删去后字符串非空). 把当前整个字符串复制一份,接到自己的后面. 输出最终通过操作能达到 ...
- 对表白墙wxss的解释
一.index.wxss 1 /* 信息 */ 2 .Xinxi{ 3 display: flex; 4 flex-wrap: wrap; 5 margin: 0rpx 1%; 6 } 7 8 9 / ...
- 【SQLServer】并行的保留线程和已使用线程
我们都知道SQL Server的并行执行.为了快速处理一个请求,SQL Server会使用多个线程来处理一个请求.并行执行涉及两个重要的参数设置:·maxdop:最大并行度·并行度的成本阈值:如果任何 ...