写点什么

KubeEdge 1.21.0 版本发布!节点任务框架全面升级!

  • 2025-06-24
    中国香港
  • 本文字数:4677 字

    阅读完需:约 15 分钟

KubeEdge 1.21.0版本发布!节点任务框架全面升级!

北京时间 2025 年 6 月 18 日,KubeEdge 发布 1.21.0 版本。新版本对节点任务框架(节点升级、镜像预下载)做了全面更新,并新增云端更新边缘配置的能力,同时 Dashboard 新增对 keink 的集成,支持一键部署,在易用性、管理运维能力上做了全面增强。



KubeEdge v1.21.0 新增特性:


  • 全新节点任务 API 以及实现

  • 节点组流量闭环优化

  • 支持在云端更新边缘配置

  • 集成 kubeedge/keink,支持一键部署 Dashboard


新特性概览

▍全新节点任务 API 以及实现


当前 KubeEdge 中的节点任务资源(节点升级、镜像预下载)的状态设计较为复杂,可读性较差。此外,在执行节点任务的过程中,一些错误不会被记录到状态中导致无法定位任务失败的原因。因此我们对节点状态和运行流程进行了重新设计,设计目标如下:


  • 定义一个新的节点任务的状态结构,使其更易于用户和开发者理解

  • 跟踪整个流程的错误信息,将其写入状态中展示

  • 开发一个更合理的节点任务流程框架


在新的设计中,节点任务的状态由总阶段(phase)和各节点执行任务的状态(nodeStatus)组成。节点任务的阶段(phase)有四个枚举值分别为:Init、InProgress、Completed Failure,该值通过每个节点的执行状态计算所得。


节点执行任务的状态由阶段(phase)、节点执行的动作流(actionFlow)、节点名称(nodeName)、执行动作流以外的错误原因(reason)以及业务相关的一些字段(如镜像预下载任务的每个镜像下载状态)组成。节点执行任务的阶段(phase)有五个枚举值分别为:Pending、InProgress、Successful、Failure Unknown。动作流是一个数组结构,记录了每个动作(action)的执行结果,状态(Status)复用了 Kubernetes 的 ConditionStatus,用 True 和 False 表示动作的成功或失败,并且记录了动作的失败原因(reason)和执行时间(time)。


👇🏻 节点升级任务的状态 YAML 样例如下:


status:  nodeStatus:    - actionFlow:        - action: Check          status: 'True'          time: '2025-05-28T08:12:01Z'        - action: WaitingConfirmation          status: 'True'          time: '2025-05-28T08:12:01Z'        - action: Backup          status: 'True'          time: '2025-05-28T08:12:01Z'        - action: Upgrade          status: 'True'          time: '2025-05-28T08:13:02Z'      currentVersion: v1.21.0      historicVersion: v1.20.0      nodeName: ubuntu      phase: Successful  phase: Completed
复制代码


我们对节点任务的云边协作流程也进行了重新设计。为了避免 CloudCore 多实例导致的节点任务更新产生并发冲突,我们将节点任务的初始化和节点任务的状态计算放在 ControllerManager 中处理,因为 ControllerManager 总是单实例运行的。


👇🏻 具体流程如下:


  1. 当节点任务 CR 被创建后,ControllerManager 会初始化匹配的节点的状态;

  2. CloudCore 只会处理 ControllerManager 处理过的节点任务资源,通过执行器(Executor)和下行控制器(DownstreamController)将节点任务下发给节点;

  3. EdgeCore 接收到节点任务后,通过运行器(Runner)执行动作,并将每个动作的执行结果上报给 CloudCore;

  4. CloudCore 通过上行控制器(UpstreamController)接收动作运行的结果并将结果更新到节点任务的状态中;

  5. ControllerManager 监听节点任务资源的变化计算整个节点任务的状态进行更新。


在整个处理流程中,我们将流程中可能产生的错误都记录并更新到了节点任务资源状态的原因字段中。


更多信息可参考:


https://github.com/kubeedge/kubeedge/blob/master/docs/proposals/edge-node-tasks-status-enhancement.md


https://github.com/kubeedge/kubeedge/issues/5999


https://github.com/kubeedge/kubeedge/issues/6211


https://github.com/kubeedge/kubeedge/issues/6273


▍节点组流量闭环优化


在 KubeEdge 1.21.0 中,我们对节点组的流量闭环功能进行了全面优化,使其功能更完善、使用更灵活。这一功能的核心能力是:通过一个 Service 实现“节点组内应用只能访问同组内应用服务,无法访问其他节点组的服务。借助该机制,用户可以轻松实现边缘多区域间的网络隔离,确保不同区域的应用服务之间互不干扰。


➤ 应用场景举例:


以连锁门店为例,企业可将全国各地的门店按区域划分为多个节点组(如华东、华北、西南等),每个区域的门店部署相同类型的应用(如库存管理、收银系统),但业务数据互相隔离。通过流量闭环功能,系统可自动限制服务访问范围,仅在节点组内互通,避免跨区域访问,无需额外配置网络策略。


流量闭环功能为可选项。如果用户不希望开启节点组间的流量隔离,只需在 EdgeApplication 中不配置 Service 模板,系统则不会启用该能力,应用依然可以按原有方式进行通信。


👇🏻 使用样例:

apiVersion: apps.kubeedge.io/v1alpha1kind: NodeGroupmetadata:  name: beijingspec:  nodes:    - node-1    - node-2---apiVersion: apps.kubeedge.io/v1alpha1kind: NodeGroupmetadata:  name: shanghaispec:  nodes:    - node-3    - node-4---apiVersion: apps.kubeedge.io/v1alpha1kind: EdgeApplicationmetadata:  name: test-service  namespace: defaultspec:  workloadScope:    targetNodeGroups:      - name: beijing        overriders:          resourcesOverriders:            - containerName: container-1              value: {}      - name: shanghai        overriders:          resourcesOverriders:            - containerName: container-1              value: {}  workloadTemplate:    manifests:      - apiVersion: v1        kind: Service        metadata:          name: test-service          namespace: default        spec:          ipFamilies:            - IPv4          ports:            - name: tcp              port: 80              protocol: TCP              targetPort: 80          selector:            app: test-service          sessionAffinity: None          type: ClusterIP      - apiVersion: apps/v1        kind: Deployment        metadata:          labels:            kant.io/app: ''          name: test-service          namespace: default        spec:          replicas: 1          selector:            matchLabels:              app: test-service          template:            metadata:              labels:                app: test-service            spec:              containers:                - name: container-1                  ...              terminationGracePeriodSeconds: 30              tolerations:                - effect: NoSchedule                  key: node-role.kubernetes.io/edge                  operator: Exists
复制代码

使用样例更多信息可参考:


https://github.com/kubeedge/kubeedge/pull/6097


https://github.com/kubeedge/kubeedge/pull/6077


▍支持在云端更新边缘配置


相较于登录每个边缘节点手动更新 EdgeCore 的配置文件 edgecore.yaml,能够直接从云端更新 edgecorer.yaml 要更便利。尤其是对于批量节点操作,同时更新多个边缘节点的配置文件,能够提高管理效率,节约很多运维成本。


在 v1.21.0 中,我们引入了 ConfigUpdateJob CRD,允许用户在云端更新边缘节点的配置文件。CRD 中的 updateFields 用于指定需要更新的配置项。


👇🏻 CRD 示例:

apiVersion: operations.kubeedge.io/v1alpha2kind: ConfigUpdateJobmetadata:  name: configupdate-testspec:  failureTolerate: "0.3"  concurrency: 1  timeoutSeconds: 180  updateFields:    modules.edgeStream.enable: "true"  labelSelector:    matchLabels:      "node-role.kubernetes.io/edge": ""      node-role.kubernetes.io/agent: ""
复制代码

💭 注意:


  • 该特性在 1.21 中默认关闭,如需使用,请启动云端的 controllermamager 和 taskmanager 以及边缘端的 taskmanager 模块


  • 更新边缘配置会涉及 EdgeCore 重启


更多信息可参考:


https://github.com/kubeedge/kubeedge/pull/6024


https://github.com/kubeedge/kubeedge/pull/6338


▍集成 kubeedge/keink,支持一键部署 Dashboard


新版本对 Dashboard 进行了增强,为 KubeEdge 控制面板设计了一个 BFF(Backend for Frontend)层,以连接前端用户界面层和 KubeEdge 后端 API。它作为数据传输和处理中心,提供专用的后端服务,简化了前端的数据检索逻辑,提高了性能和安全性。此外,为了让开发人员快速体验和部署 kubeedge,我们与 kubeedge/keink 项目深度集成。只需一条命令,在 dashboard 上就能快速启动 kubeedge 环境,对其功能进行完整的演示和验证。



更多信息可参考:https://github.com/kubeedge/dashboard/pull/50


版本升级注意事项

▍节点任务


新版本默认开启 v1alpha2 版本的节点任务,CRD 定义会向下兼容,如果想继续使用 v1alpha1 版本的 NodeUpgradeJob 和 ImagePrePullJob,可以通过设置 ControllerManager 和 CloudCore 的特性门切换。


ControllerManager 添加启动参数

--feature-gates=disableNodeTaskV1alpha2
复制代码


CloudCore 修改配置文件


kubectl edit configmap -n kubeedge 
复制代码

cloudcore 修改配置内容:


apiVersion: cloudcore.config.kubeedge.io/v1alpha2  kind: CloudCore+ featureGates:+   disableNodeTaskV1alpha2: true  ...
复制代码


💭 注意:


v1alpha2 版本节点任务的 CRD 能兼容 v1alpha1,但是它们不能相互切换,v1alpha1 的代码逻辑会破坏 v1alpha2 节点任务 CR 的数据。


v1alpha1 的节点任务基本不会再进行维护,v1.23 版本后将删除 v1alpha1 版本节点任务的相关代码。另外,节点任务在边端已成为一个默认关闭的 Beehive 模块,如果要正常使用节点任务功能的话,需要修改边端 edgecore.yaml 配置文件开启:


 modules:    ...+   taskManager:+     enbale: true
复制代码

▍边缘节点升级


我们对 Keadm 边缘节点升级的相关命令(备份、升级、回滚)做了调整:


  1. 升级命令不会自动执行备份命令,备份命令需要手动触发;

  2. 升级命令隐藏了业务相关的参数,v1.23 版本后会清理废弃的代码;

  3. 升级的相关命令都使用三级命令:

 keadm edge upgrade keadm edge backup keadm edge rollback
复制代码


▍致谢


感谢 KubeEdge 社区技术指导委员会 (TSC)、各 SIG 成员对 v1.21 版本开发的支持与贡献,未来 KubeEdge 将持续在新场景探索与支持、稳定性、安全性、可扩展性等方面持续发展与演进!


▍相关链接


Release Notes:https://github.com/kubeedge/kubeedge/blob/master/CHANGELOG/CHANGELOG-1.21.md




KubeEdge 社区介绍:KubeEdge 是业界首个云原生边缘计算框架、云原生计算基金会(CNCF)唯一毕业级边缘计算开源项目,社区已完成业界最大规模云原生边云协同高速公路项目(统一管理 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/

用户头像

还未添加个人签名 2020-02-11 加入

还未添加个人简介

评论

发布
暂无评论
KubeEdge 1.21.0版本发布!节点任务框架全面升级!_云计算_华为云原生团队_InfoQ写作社区