OpenYurt v1.2 亮点速览丨云边流量峰值相比原生 K8s 降低 90%

本文涉及的产品
云原生网关 MSE Higress,422元/月
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
可观测监控 Prometheus 版,每月50GB免费额度
简介: 北京时间 1 月 30 号发布的 OpenYurt v1.2.0 版本,社区呼声最高的几大特性终于落地,OpenYurt 的特点更加鲜明,主要特点包括:Kubernetes 无侵入,云边端全协同,可编程的资源访问控制,以及声明式云原生设备管理。

本文作者:

何淋波: 阿里云技术专家

陈绍强: Intel 资深软件架构师

俞林: Intel 高级软件工程师


北京时间 1 月 30 号发布的 OpenYurt v1.2.0 版本,社区呼声最高的几大特性终于落地,OpenYurt 的特点更加鲜明,主要特点包括:Kubernetes 无侵入,云边端全协同,可编程的资源访问控制,以及声明式云原生设备管理


v1.2 版本聚焦在节点池治理,重点打造 OpenYurt 系统的差异化技术竞争力,主要特性有降低云边通信的流量成本,边缘自治能力增强,更丝滑的跨地域通信能力等。


大幅降低云边通信流量成本


在云边协同场景下,边缘通过公网和云端连接,当集群中部署了大量的业务 Pod 和微服务系统(引入大量 Service 和 Endpointslices),边缘节点和云端之间需要消耗大量带宽,给用户带来极大的公网流量成本压力。


社区对降低云边通信流量一直有比较强的诉求,如何在不侵入修改 Kubernetes 的基础上满足需求,首先大家比较容易考虑到的方案是在节点池内增加一个 sync 组件,实时同步云端的数据,然后再分发给节点池中的各个组件。但是这个方案落地将面临不小的挑战,首先数据访问请求都是边缘主动向云端发起的,sync 如何拦截这些请求并分发数据呢?同时如果 sync 组件故障,边缘的请求将面临中断,而保障 sync 组件的高可用会非常棘手。


OpenYurt 社区首创基于 pool-coordinator+YurtHub 的云边流量复用机制,既与原生 Kubernetes 的云边通信链路无缝融合,又优雅的保障了通信链路的高可用(YurtHub Leader 选举),实现云边通信成本的消减。


在节点池内,节点从云端获取的数据,可以分为两种类型:


  • pool scope data:  组件从云端获取的数据完全一致,如每个节点的 kube-proxy 获取到的 endpointslices
  • node scope data: 组件从云端获取的数据和自身节点相关,如每个节点的 kubelet 获取到的 pods


同时通过测试[1]发现,真正占用云边带宽的数据是 pool scope data。OpenYurt v1.2 中通过在节点池中复用 pool scope data,从而大幅降低云边的数据通信量。如下图:


1.png


  • 节点池中所有 YurtHub 组件通过节点池中的 Pool-Coordinator 进行选举产生 Leader,只有和云端网络连接正常的 YurtHub 才会成为 Leader。当 Leader 节点的云边网络连接异常时,Leader 将被其他 Follower 自动接替。
  • Yurthub Leader 主动从云端实时获取 pool scope data(如 Endpointslices),然后存入节点池的 Pool-Coordinator 组件中
  • 节点上组件(如 Kube-Proxy)通过 Yurthub 来获取 pool scope data 时,Yurthub 将从 Pool-Coordinator 返回实时的数据。


通过 Pool-Coordinator 和 Yurthub 的协同,单一节点池内云边只有一份 pool scope data 通信数据,从而大幅降低云边的通信数据量,相比原生 Kubernetes 云端出口流量峰值降低 90%。


另外带来一个有意思的能力,通过 Endpointslices 的流量复用,即使边缘节点与云端网络断开,仍然可以实时感知集群的服务拓扑状况。


边缘自洽能力增强


在云边协同场景下,边缘自治能力可以保障边缘业务持续提供服务。边缘自治能力既包括在边缘侧提供数据缓存,解决云边网络断连状态下节点重启时业务的恢复问题,同时也包括管控侧(云端控制器)对 Pod 驱逐策略的增强。


在原生 Kubernetes 中,边缘节点心跳一定时间没有上报时,云端控制器将对节点上 Pod 进行驱逐(删除并在正常节点上重建)。


云边协同场景下,边缘业务有不一样的需求。业务期待云边网络断连造成心跳无法上报时(此时节点本身正常),业务 Pod 可以保持(不发生驱逐),仅节点故障时才对 Pod 进行迁移重建。


比云边公网连接的复杂网络情况,同一个节点池内的节点处在一个局域网,网络连接状况良好。业界常用的方案是边缘节点间相互网络探测,构建一个分布式的节点健康状态检测机制。但是该方案中的网络探测会产生不小的东西流量,同时每个节点也需要增加一定的计算,随着节点池规模增大,检测效果会面临一定的挑战。


OpenYurt v1.2 版本首创基于 pool-coordinator+YurtHub 的中心式心跳代理机制,既可以减少节点池内的东西向通信流量,又降低了整体算力需求。同时也提供云边网络断连时 Pod 保持的能力。如下图:


2.png


  • 节点的云边网络正常时,Kubelet 通过 YurtHub 组件同时上报心跳到云端和 Pool-Coordinator 两处。
  • 节点的云边网络断连时,Kubelet 通过 YurtHub 组件上报心跳到云端失败,此时上报到 Pool-Coordinator 的心跳带上特定标签。
  • Leader YurtHub 会实时 list/watch pool-coordinator 中的心跳数据,当获得的心跳数据中带有特定标签时将帮助转发该心跳到云端。


通过 Pool-Coordinator 和 YurtHub 协同实现的心跳代理机制,成功保障了节点在云边网络断连状态下,心跳仍可继续上报到云端,从而保证节点上业务 Pod 不被驱逐。同时心跳被代理上报的节点,也会被实时加上特殊的 taints,用于限制管控调度新 Pod 到该节点。


更丝滑的跨地域通信能力


OpenYurt 社区的 Raven 项目已经演进到 v0.3 版本,主要提供跨地域的 3 层通信能力。相比 Yurt-Tunnel 提供的云边隧道仅支持云到边的 7 层流量转发,Raven 可以提供更通用的跨地域通信能力(云边互通/边边互通),如下图:


3.png


  • 每个节点池内选出一个 Gateway 节点(Solo 节点自动为 Gateway 节点),Gateway 节点通过云端建立 VPN 隧道,通过 Raven 在每个节点上配置流量转发规则。
  • 跨节点请求将被拦截,并转发到 Gateway 节点,再经过 VPN 隧道转发到对应的节点或 Pod。同时节点池内的访问流量不被拦截,通过原生 CNI 容器网络方案通信。


Raven 方案和原生 CNI 容器网络方案无缝兼容,跨地域的流量转发对应用本身是无感知状态,因此在云边/边边的跨地域通信中,OpenYurt 中应用互访可以保持原生 Kubernetes 中的一致使用体验。从 OpenYurt v1.2 开始,我们推荐使用 Raven 来代替 YurtTunnel。


其他重要更新


  • yurtadm 组件优化,底层完全基于 kubeadm 二进制实现,保持与 Kubernetes 社区良好的兼容性 #1049[2]
  • 云边协同场景下边缘 static pod 的优雅升级方案 proposal #1065[3]
  • 增加 inclusterconfig 过滤器,用于保证 kube-proxy 通过 YurtHub 链路访问 kube-apiserver #1158[4]
  • 解决 YurtHub 对转发 Watch 请求时,response 中单个返回数据超过 32KB 会截断的问题 #1066[5]


未来计划


OpenYurt v1.2 版本能够顺利发布,这里再次感谢来自 Intel,美团,阿里云,浙大,同济,索尼,浪潮,京东等数十位同学的大力贡献。


目前 OpenYurt v1.3 版本的开发正在稳步推进,欢迎有兴趣的同学来参与共建,共同探索一个稳定,可靠的无侵入云原生边缘计算平台的事实标准。各 SIG RoadMap 如下:



如果您对于 OpenYurt 有任何疑问,欢迎使用钉钉扫描二维码或者搜索群号(12640034121)加入钉钉交流群。

4.png


相关链接


[1] 测试

https://openyurt.io/zh/docs/test-report/yurthub-performance-test/


[2] 1049

https://www.yuque.com/r/goto?url=https%3A%2F%2Fgithub.com%2Fopenyurtio%2Fopenyurt%2Fpull%2F1049


[3] 1065

https://www.yuque.com/r/goto?url=https%3A%2F%2Fgithub.com%2Fopenyurtio%2Fopenyurt%2Fpull%2F1065


[4] 1158

https://www.yuque.com/r/goto?url=https%3A%2F%2Fgithub.com%2Fopenyurtio%2Fopenyurt%2Fpull%2F1158


[5] 1066

https://github.com/openyurtio/openyurt/pull/1066


点击此处,立即了解 OpenYurt 项目

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4月前
|
存储 边缘计算 Kubernetes
边缘计算问题之YurtControllerManager 接管原生 Kubernetes 的调度如何解决
边缘计算问题之YurtControllerManager 接管原生 Kubernetes 的调度如何解决
37 1
|
4月前
|
边缘计算 Kubernetes Cloud Native
边缘计算问题之OpenYurt 确保 Kubernetes 能力在边缘的一致性如何解决
边缘计算问题之OpenYurt 确保 Kubernetes 能力在边缘的一致性如何解决
41 1
|
2月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--Traffic Shifting 流量接入
k8s学习--Traffic Shifting 流量接入
|
7月前
|
Kubernetes 负载均衡 应用服务中间件
深入理解 Kubernetes Ingress:路由流量、负载均衡和安全性配置
深入理解 Kubernetes Ingress:路由流量、负载均衡和安全性配置
1168 1
|
3月前
|
Kubernetes Cloud Native Java
探索未来编程新纪元:Quarkus带你秒建高性能Kubernetes原生Java应用,云原生时代的技术狂欢!
Quarkus 是专为 Kubernetes 设计的全栈云原生 Java 框架,凭借其轻量级、快速启动及高效执行特性,在 Java 社区脱颖而出。通过编译时优化与原生镜像支持,Quarkus 提升了应用性能,同时保持了 Java 的熟悉度与灵活性。本文将指导你从创建项目、编写 REST 控制器到构建与部署 Kubernetes 原生镜像的全过程,让你快速上手 Quarkus,体验高效开发与部署的乐趣。
44 0
|
4月前
|
Kubernetes 网络协议 数据可视化
kubernetes Tcp流量可视化
kubernetes Tcp流量可视化
53 4
|
4月前
|
Kubernetes 网络协议 Docker
在K8S中,ip-cer-pod与docker原生端口映射有何区别?
在K8S中,ip-cer-pod与docker原生端口映射有何区别?
|
6月前
|
Kubernetes Cloud Native Java
Java一分钟之-Quarkus:Kubernetes原生的Java框架
【6月更文挑战第12天】Quarkus是面向Kubernetes的Java框架,以其超快启动速度和低内存占用著称。核心特性包括AOT编译实现毫秒级启动、优化的运行时模型、与Kubernetes的无缝集成及丰富的扩展库。常见问题涉及Maven依赖管理、热重载机制理解和配置文件的忽视。解决这些问题的关键在于深入学习官方文档、使用Dev UI调试和参与社区交流。通过代码示例展示了如何快速创建REST服务。掌握Quarkus能提升开发效率,适应微服务架构。
82 0
|
7月前
|
Kubernetes 容器
k8s学习-CKS真题-网络策略拒绝流量
k8s学习-CKS真题-网络策略拒绝流量
77 0
|
Kubernetes jenkins 测试技术
【Kubernetes的DevOps自动化,Jenkins上的Pipeline实现自动化构建、测试、部署、发布以及Bookinginfo实例的部署灰度发布故障注入流量】
【Kubernetes的DevOps自动化,Jenkins上的Pipeline实现自动化构建、测试、部署、发布以及Bookinginfo实例的部署灰度发布故障注入流量】
265 1

相关产品

  • 容器服务Kubernetes版