首页 > 其他分享 >Kmesh v0.1.0 版本发布

Kmesh v0.1.0 版本发布

时间:2024-01-22 14:11:34浏览次数:36  
标签:map v0.1 网格 流量 Kmesh 治理 版本 kmesh

本文分享自华为云社区《Kmesh v0.1.0 版本发布!打造极致性能的流量治理体验》,作者:云容器大未来。

Kmesh是业内首个内核级云原生流量治理引擎,通过基础软件创新帮助用户构筑云原生场景下高性能的通信基础设施。Kmesh第一个版本v0.1.0 [1]现已正式发布,用户可以在服务网格环境中使用yaml一键部署,无缝对接Istiod,通过流量治理下沉OS,实现相比 Istio Sidecar 方案转发时延降低50%+,为应用提供极致的转发性能体验。

Kmesh 介绍

Kmesh 基于 eBPF + 可编程内核技术,将流量治理下沉 OS,数据路径上无需经过代理层,实现了一个内核级 sidecarless 网格数据面。

cke_132.png

Kmesh 关键能力:

  • 高性能:内核中原生支持 L4~L7 流量治理功能,治理过程无需经过实体代理组件,网格内服务通信路径从代理架构下的三跳变为一跳,大幅提升网格数据面的转发性能;
  • 低开销:Pod 中无需部署 Sidecar 程序,大幅降低网格基础设施的资源开销;
  • 安全隔离:基于 eBPF 的运行时安全,并支持 cgroup 级治理隔离;
  • 平滑兼容:支持与 Istiod 等支持 XDS 协议的服务网格管控面对接,同时可以与现有 Sidecar 网格协同工作;

cke_133.png

Kmesh 的主要部件包括:

  • kmesh-controller:负责生命周期管理、XDS 协议对接、观测运维等功能;
  • kmesh-api:接口层,主要包括XDS 转换后的编排 API、观测运维通道等;
  • kmesh-runtime:kernel 中实现的支持 L4~L7 流量编排的运行时;其中7层编排运行时能力依赖对内核的增强;
  • kmesh-orchestration:基于 eBPF 实现 L4~L7 流量编排,如路由、灰度、负载均衡等;
  • kmesh-probe:观测运维探针,提供端到端观测能力;

Kmesh v0.1.0关键特性

  • 一键部署Kmesh

社区发布了 Kmesh 的部署镜像[2],并支持通过 yaml 一键部署 Kmesh[3];

  • 基于namespace使能Kmesh

类似Istio,Kmesh支持按namespace使能流量接管范围,如:kubectl label namespace default label istio.io/dataplane-mode=Kmesh

  • 无缝连通Istio Sidecar

支持在已有sidecar形态的网格环境启用Kmesh,启用后namespace 下新创建的 Pod 流量会自动被 Kmesh 接管,而不再经过 sidecar 代理;

  • 自动对接服务网格控制面

Kmesh支持与Istiod自动对接,且理论上遵循XDS协议的网格控制面都可以与Kmesh对接,可通过修改yaml中的 MESH_CONTROLLER 环境量指定;

  • TCP/HTTP1.1基础流量治理

支持TCP流量转发,支持HTTP1.1头域匹配、路由、灰度等,支持随机、轮询负载均衡算法;

  • 兼容运行模式

支持根据运行环境的OS内核能力,自适应使能Kmesh特性,在无增强补丁的内核版本上,也能够以兼容模式运行Kmesh;详情参考Release Notes[1]。

性能测试

我们使用 fortio 测试了 Istio(Envoy)、Kmesh 在同等流量治理场景下的表现,同时测试了 K8s 下基于 kubeProxy 的服务通信时延作为基线参考;

不同链接数下的时延对比:

cke_134.png

相同QPS下的CPU开销对比:

cke_135.jpeg

从测试结果可以看到:

  • Kmesh 的转发时延基本接近K8s原生转发时延,相比 Istio sidecar 模式的转发时延有明显降低;
  • 相同 qps 下,Kmesh 的 CPU 开销基本与 k8s 原生 CPU 开销一致,相比 Istio sidecar 模式有明显降低;

想要了解详细的 demo 测试细节,可以观看我们的演示视频:

https://v.youku.com/v_show/id_XNjMyMjI1MDEzNg==.html?playMode=pugv&spm=a2hje.13141534.card_3.d_1_0&scm=20140719.manual.239312.video_XNjMyMjI1MDEzNg==

Kmesh关键技术剖析

内核级流量编排运行时

微服务通信一般先建立链接,再发送业务报文,如果想要无感的对业务报文做编排处理,通常需要对流量进行劫持,编排完成后再基于调整后的报文继续转发,这也是现在 Proxy 代理的实现;Kmesh 考虑随流完成治理工作,将链路建立时机推迟到业务报文发送阶段,以实现更高的编排处理性能。

  • 伪建链

pre_connect 流程挂载 bpf prog,若当前访问的目标地址在 xds 的 listener 范围,则调用 bpf_setsockopt 通过 TCP_ULP 将当前 socket 的 tcp proto hook重载到 kmesh_defer 的内核模块实现;

  • 延迟建链

kmesh_defer 内核模块重写了 connect/send hook(在原生 hook 上做了增强):

  • 服务第一次走到 connect hook 时,会设置 bpf_defer_connect 标记,并不真正触发握手流程;
  • send hook 中,若 sock 上设置了 bpf_defer_connect 标记,则触发connect,此时,会基于扩展的BPF_SOCK_OPS_TCP_DEFER_CONNECT_CB 调用 bpf prog,并在 bpf prog 中完成流量治理,然后基于调整后的通信五元组、报文进行建链和发送;

整个治理过程大致如下图所示:

cke_136.png

XDS规则管理

xds 模型是一颗层次化的树型规则表达,且不同版本模型定义可能会有调整,Kmesh 需要将模型信息转换成 eBPF map 存储,同时保持模型规则之间的层次关系;

  • 将 xds 模型转换成 eBPF map 数据

cke_137.jpeg

具体过程:

  1. Kmesh 订阅 Istiod 的 xds 模型,并基于 protobuf-c 将 pb 模型转换成 c 数据结构风格;
  2. 对于顶层模型( listener 等),Kmesh 定义了知名 map 表与之对应,且value 的数据结构复用 protobuf-c 导出的 c struct;
  3. map 更新从顶层的知名 map 表开始,对于记录中的指针成员,xds-adapter 中会创建 inner-map 表来存储指针指向的真实数据区域,并将 inner-map的map fd添加进 map-in-map表中,最后将其在map-in-map表的key(index)作为该指针成员的 value;
  • map-in-map 解决 xds 模型层次化

cke_138.jpeg

对于 map 记录的 value 成员,如果是指针变量(涉及引用其他数据结构),通过 inner-map 存储指向的数据区域:

  • 如果 vaule 成员是基础数据类型(int 等),则直接访问;
  • 如果 value 成员是指针类型,则指针存储的 value 是存放真实数据的 inner-map 在 map-in-map 表中的 index(注意:index 是在 kmesh-daemon 的xds-adapter 模块中更新 bpf map 时配合写入);访问时,先基于 index 找到 inner-map的map fd,再去 inner-map 表中查找真正数据,对于多级指针成员,则重复该过程,直到指针信息全部被剥离。

流量治理编排实现

xds 的治理规则复杂,层层匹配,超过了单个 eBPF 程序的复杂度限制;Kmesh 基于 eBPF Tail Calls 特性,将治理过程拆分成多个独立的 eBPF progs,具备较好的扩展性;

cke_139.jpeg

展望

Kmesh 是一种基于eBPF+可编程内核实现的高性能流量治理引擎,与业界方案相比,具有更高的转发性能和更低的资源开销;在无增强补丁的内核版本上,可以以兼容模式运行Kmesh,如果想要使用Kmesh完整的治理能力,当前 openEuler 23.03[4]版本已经原生支持,除此之外的其他操作系统需要基于增强的 patch 构建[5]。

Kmesh 正在逐步完善,成为一个更受欢迎的流量治理引擎还有很多工作要做,欢迎大家试用 Kmesh v0.1.0 版本,并持续关注 Kmesh 社区,也期待您的共同参与。

参考链接

[1] Kmesh v0.1.0:https://github.com/kmesh-net/kmesh/releases

[2] Kmesh的部署镜像:https://github.com/orgs/kmesh-net/packages

[3] 一键部署Kmesh:https://github.com/kmesh-net/kmesh?tab=readme-ov-file#quick-start

[4] openEuler 23.03版本:https://repo.openeuler.org/openEuler-23.03/

[5] 基于增强的patch构建:https://github.com/kmesh-net/kmesh/blob/main/docs/kmesh_kernel_compile.md

[6] Kmesh社区地址:https://github.com/kmesh-net/kmesh

 

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

 

标签:map,v0.1,网格,流量,Kmesh,治理,版本,kmesh
From: https://www.cnblogs.com/huaweiyun/p/17979926

相关文章

  • 巴拉巴拉 HANA CLOUD 版本的ODATE 接口案例
    今天分享一个S4HC的ODATA接口这是一个维护PM中设备的的扣子 REPORT  YTEST029.DATA: LO_HTTP_CLIENT TYPE REF TO IF_HTTP_CLIENT.DATA: LO_HTTP_CLIENT2 TYPE REF TO IF_HTTP_CLIENT.DATA: RESPONSE TYPE STRING.DATA:IV_URL TYPE STRING.根据SM59中配置......
  • 开放签电子签章工具版升级至 1.1 版本,解决跨平台、跨语言集成使用
    本周开放签开源工具版增加了SDK与API能力,更新至1.1版本,使开放签电子签章工具能力进一步提升。SDK将便于java用户直接使用CA证书颁发和签名能力。API接口采用HTTP(S)通讯,JSON报文格式,具有跨平台、跨语言特性,专为各类开发语言用户提供服务,便于其他语言的开发者快速集成和应用电子签......
  • 电报设置中文的方法,适合电脑和手机版本
    电报telegram软件界面如何设置成的中文语言,原理讲解操作简单链接地址:https://t.me/setlanguage/classic-zh-cn点击即可设置......
  • NCC Mocha v0.10 发布,.NET 开发的基于 OpenTelemetry 的 APM 系统
    目录项目简介项目进度v0.10发布内容项目背景平台功能技术架构v0.10快速体验启动项目Trace数据的发送配置Jaeger数据源Trace数据的查询项目简介Mocha是一个基于.NET开发的APM系统,同时提供可伸缩的可观测性数据分析和存储平台。项目地址:https://github.com/dotnetcore......
  • MySQL-8.3.0 innovation 创新版本YUM安装配置
     MySQL-8.3.0innovation版本已发布了,想抢先体验一下最新的功能,可以用以下的方式快速在虚拟机上安装一下哈 服务器环境:[root@node213~]#cat/etc/redhat-releaseCentOSLinuxrelease7.9.2009(Core)[root@node213~]#uname-aLinuxnode2133.10.0-1160.el7.x86_64#1......
  • Linux 安装最新版本的 CMake
    一、卸载系统老版本的CMake$sudoaptautoremovecmake二、下载最新版本CMake官网:Download|CMake三、安装$sudobash./cmake-3.28.1-linux-x86_64.sh--prefix=/usr/--skip-license......
  • [转帖]MySQL多版本并发控制机制(MVCC)-源码浅析
    https://zhuanlan.zhihu.com/p/144682180 MySQL多版本并发控制机制(MVCC)-源码浅析前言作为一个数据库爱好者,自己动手写过简单的SQL解析器以及存储引擎,但感觉还是不够过瘾。<<事务处理-概念与技术>>诚然讲的非常透彻,但只能提纲挈领,不能让你玩转某个真正的数据库。感谢c......
  • Ubuntu一键安装/卸载docker和docker compose,可指定版本或安装最新版本。
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档@目录前言一、docker是什么?二、dockercompose是什么?三、安装步骤1.Ubuntu安装脚本2.生成脚本3.启动和验证四、卸载步骤1.Ubuntu卸载脚本2.保存文件后设置执行权限3.运行文件4.验证是否删除成功CentOS安装脚本卸载......
  • Seata 2.x 首个版本正式发布,支持 Raft 集群模式
    作者:Seata社区用户登记欢迎已使用用户在此链接登记,便于我们更好的针对业务场景优化:https://github.com/seata/seata/issues/12462.x Roadmap发布概览2.0.0中对大家期待已久的Raft集群模式做了支持,Raft集群模式消除了对第三方注册中心和Seata-Server后端存储的依赖,......
  • 解决方案 | AutoCAD 版本+版本号+受支持的 .NET SDK版本+.NET Framework版本
    关于Managed.NET兼容性Managed.NET应用程序通常与扩展基于AutoCAD的产品的行为和功能的公司和第三方应用程序关联。在移植到最新版本后,并非所有.NET应用程序都可以正常工作。.NET应用程序的兼容性在各版本之间可能随时更改,以利用最新的.NETFramework和Auto......