[转帖]QPS 最高提升 91% | 腾讯云 TKE 基于 Cilium eBPF 提升 k8s Service 性能
https://my.oschina.net/cncf/blog/5121393
朱瑜坚,腾讯云后台工程师,主要负责腾讯云 TKE 容器网络的构建和相关网络组件的设计、开发和维护工作。
张浩,腾讯云高级工程师,主要负责容器网络多个组件的开发和维护,也关注调度、服务网格等领域。
前言
Kubernetes 已经成为容器管理领域的事实标准,而网络系统是 Kubernetes 核心部分,随着越来越多的业务部署在 Kubernetes,对容器网络也提出了一些新的需求
怎么提升网络的可观测性,serverless 类产品该需求尤为突出
怎么尽可能减少容器引入的网络性能损耗
上述需求冲击了 iptables,IPVS 等传统防火墙,负载均衡器技术。也促使我们思考容器网络访问链路能否不依赖于节点,进而缩短容器访问链路,提升网络性能
eBPF 是一项革命性技术,它可以以一种安全的方式在内核中许多 hook 点执行程序,该项技术可编程能力强,并且也无需维护内核模块,可维护性好,该项技术为满足上述需求提供了可能。Cilium[1] 则是基于 eBPF 技术的容器网络开源项目,提供了网络互通,服务负载均衡,安全和可观测性等解决方案
由此,腾讯云容器服务 TKE 基于 Cilium 和 eBPF 实现了独立网卡模式下的高性能 ClusterIP Service 方案。TKE 致力于提供更高性能、更安全和更易用的容器网络,也因此会不断关注 Cilium 等前沿的容器网络技术方案,后续会推出更多更完善的 Cilium 产品化能力。
独立网卡 Service 方案
TKE 于去年推出了新一代容器网络方案,该方案实现了一个 Pod 独占一张弹性网卡,不再经过节点网络协议栈(default namespace)。而当前的 kube-proxy 实现 ClusterIP 的方案都依赖于在节点侧的网络协议栈里设置相应的 iptables 规则,也因此该方案对于独立网卡方案不再适用。
其中一个解决方案便是 Cilium,Cilium 提供了基于 eBPF 的地址转换能力,从而可支持 ClusterIP Service。但其原生方案仅支持 veth pair 和 ipvlan l3 的数据面,并不支持 Pod 完全不经过节点网络协议栈的数据面,因此不能原生解决独立网卡 ClusterIP 的访问问题。
TKE 由此对 Cilium 加以改造,使其支持了除原生支持的 veth 和 ipvlan l3 的第三种数据面方案,如图(假设 pod 访问 Service IP 为 172.16.0.2),数据面上,将原本挂载到节点侧的 veth 上的 bpf 程序,挂载到 pod 内的独立网卡(同时也是弹性网卡)上,使得 Pod 的网络报文在发出的时候做 DNAT(目的地址转换),而回报文在网卡接收的时候做反向 DNAT,从而支持 ClusterIP 的访问。该数据面方案可作为一个通用方案适配 Ipvlan l2、SRIOV 等数据面场景。

而控制面上,将 Cilium 与 TKE 的 VPC-CNI 模式(含共享网卡模式和独立网卡模式)深度集成,用户无需对业务代码逻辑做任何修改,即可使用 Cilium 的功能特性。
性能对比
本文使用 wrk 工具对 Cilium 的产品化解决方案进行了性能压测,测试保证 Client Pod 和 Server Pod 分布在不同节点。
测试环境:TKE 集群,4 个 CVM 节点,配置为 Server S5.2XLARGE8,Client S5.SMALL2。
测试数据表明,基于 Cilium 的独立网卡 ClusterIP 访问方案性能最好。在短连接场景下,其 QPS 相比共享网卡的 iptables 和 ipvs 方案提升 48% 和 74%,相比全局路由的 iptables 和 ipvs 方案提升了 62% 和 91%。在长连接场景下,其 QPS 相比共享网卡的 iptables 和 ipvs 方案提升了 33% 和 57%,而相比全局路由的 iptables 和 ipvs 方案提升了 49% 和 66%。iptables 的性能较 ipvs 性能较好是因为测试环境中 Service 数量还不够多,ipvs 的优势在于大量 Service 的场景。


产品化过程中的相关问题
TKE 团队在实现 Cilium 产品化解决方案过程中,也发现了 Cilium 项目中一些问题,相应的解决方案和 Cilium 支持新数据面方案将于近日以 pr 的形式整理提交给 Cilium 社区。
独立网卡方案下的 ClusterIP 自访问不通
以上方案其实不能完全解决 ClusterIP 访问问题,存在一类特殊的场景会访问不通。这类场景就是 Pod 访问的 ClusterIP,其后端包括其自身。这类场景下,独立网卡的 Pod 发出的网络报文会直接到达 IaaS 层,不符合预期。
由于独立网卡 Pod 内,其实只有两个网络设备:回环设备(lo)和弹性网卡,因此一个简单的思路就是在出报文之前,对自访问流量,通过 bpf_redirect 调用将报文直接转发(redirect)到回环(lo)设备。基于此,TKE 团队修改了 cilium 的相关 bpf 代码,提供了一个解决方案。经过测试,该方案可以解决独立网卡方案下的 ClusterIP 自访问问题。
Cilium 加载 bpf 程序的名字缺失
Cilium 项目的可调试性存在一个问题,其 bpf 程序开发得比较早,底层用了很多老的工具集,例如 tc,来加载 bpf 代码。
老的 tc 基于老的内核版本 (<4.15) 设计的,它在加载 bpf 程序时,将 bpf 程序的名字忽略了,导致 Cilium 加载的 bpf 程序都是无名字的。这影响了对代码的理解,追踪和调试。
对此 TKE 团队结合较新的内核对 tc 工具进行了修正,使得它加载 bpf 程序时,会正确的传入名字。通过这名字,可以搞清楚实际运行的 bpf 函数具体是哪一个,从而提高 Cilium 的可调试性。
用法
申请 Cilium 支持 ClusterIP 产品化内测开通后,创建 TKE 集群时高级设置中打开 ClusterIP 增强 即可:
总结与展望
本文介绍了 TKE 团队实现的基于 Cilium 和 eBPF 的独立网卡模式下高性能 ClusterIP service 方案,该方案相比当前基于 iptables 和 ipvs 的传统网络方案大量的提升了性能(33%-91%)。
显然,Cilium 提供的能力还不止于此,其基于 eBPF 这项革命性的技术,还提供了安全、可观测性、QoS 等方面的能力,而提供更高性能、更安全和更易用的容器网络正是 TKE 的服务目标,因此,后续 TKE 将会积极参与 Cilium 社区,与社区一道共同推出更强大、更完善的容器网络能力。
[转帖]QPS 最高提升 91% | 腾讯云 TKE 基于 Cilium eBPF 提升 k8s Service 性能的更多相关文章
- 腾讯云TKE-基于 Cilium 统一混合云容器网络(下)
前言 在 腾讯云TKE - 基于 Cilium 统一混合云容器网络(上) 中,我们介绍 TKE 混合云的跨平面网络互通方案和 TKE 混合云 Overlay 网络方案.公有云 TKE 集群添加第三方 ...
- 腾讯云 TKE Everywhere 特性发布,用户可在自有基础设施中托管 K8s 服务
作者 孔令飞,腾讯云资深工程师,拥有大规模 Kubernetes 集群.微服务的研发和架构经验,目前专注于云原生混合云领域的基础架构开发. 朱翔,腾讯云容器服务高级产品经理,目前负责云原生混合云产品方 ...
- Kubernetes最佳实践之腾讯云TKE 集群组建
作者陈鹏,腾讯工程师,负责腾讯云 TKE 的售中.售后的技术支持,根据客户需求输出合理技术方案与最佳实践,为客户业务保驾护航.使用 TKE 来组建 Kubernetes 集群时,会面对各种配置选项,本 ...
- 腾讯云:基于 Ubuntu 搭建 VNC 远程桌面服务
基于 Ubuntu 搭建 VNC 远程桌面服务 前言 任务时间:5min ~ 10min 必要知识 本教程假设您已学习以下 Ubuntu 基本操作: 连接 SSH 执行命令 编辑文件 如果还没有掌握 ...
- 性能提升40%: 腾讯 TKE 用 eBPF 绕过 conntrack 优化 K8s Service
Kubernetes Service 用于实现集群中业务之间的互相调用和负载均衡,目前社区的实现主要有userspace,iptables和IPVS三种模式.IPVS模式的性能最好,但依然有优化的空间 ...
- 腾讯 TKE 厉害了!用 eBPF绕过 conntrack 优化K8s Service,性能提升40%
Kubernetes Service[1] 用于实现集群中业务之间的互相调用和负载均衡,目前社区的实现主要有userspace,iptables和IPVS三种模式.IPVS模式的性能最好,但依然有优化 ...
- 腾讯云总监手把手教你,如何成为AI工程师?
作者:朱建平 腾讯云技术总监,腾讯TEG架构平台部专家工程师 1.关于人工智能的若干个错误认知 人工智能是AI工程师的事情,跟我没有什么关系 大数据和机器学习(AI) 是解决问题的一种途径和手段,具有 ...
- MySQL之父造访腾讯云 为腾讯云数据库开源点赞
近日,技术大牛 MariaDB 公司创始人兼CTO Michael Widenius(又名Monty).MariaDB 基金会主席 Kaj 来到中国,针对MariaDB与腾讯云的技术合作进行回访.去年 ...
- qGPU on TKE - 腾讯云发布下一代 GPU 容器共享技术
背景 qGPU 是腾讯云推出的 GPU 共享技术,支持在多个容器间共享 GPU卡,并提供容器间显存.算力强隔离的能力,从而在更小粒度的使用 GPU 卡的基础上,保证业务安全,达到提高 GPU 使用率. ...
- 腾讯云与 Grafana Labs 达成深度合作, 推出全新 Grafana 托管服务
9 月 23 日,腾讯云宣布与业界领先的开源数据可视化公司 Grafana Labs 达成深度合作协议,共同开发和验证全新的 Grafana 托管服务,通过 Grafana Labs 开源软件与腾讯云 ...
随机推荐
- 《语义增强可编程知识图谱SPG》白皮书
语义増强可编程图谱框架:新一代知识图谱语义框架/引擎.SPG+LLM双驱架构及应用相关进展和应用.<语义增强可编程知识图谱SPG>白皮书 v1.0.pdf: https://url39.c ...
- 华为云FusionInsight助力宇宙行打造金融数据湖新标杆
摘要:工行采用了华为云FusionInsight MRS大数据存算分离方案,实现了大数据平台与OBS对象存储服务的对接,将原有的HDFS数据无缝迁移到OBS上.在保证性能的前提下,实现了计算与存储独立 ...
- 云小课|MRS基础原理之Hudi介绍
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:Hudi是数据湖的 ...
- 在Linux(CentOS7)服务器上安装Java的JDK
一.介绍 最近,我在做有关CI/CD的测试,真是一步一个坑啊,碰得我头破血流,这么难得的经验,必须记录下来,以防以后想找却找不到.说道CI/CD最好的工具,大家肯定是一致推荐Jenkins,对了,我现 ...
- 火山引擎 DataTester:一次 A/B 测试,帮助产品分享率提升超 20%
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 对 C 端产品而言,增长的核心要素之一是用户活跃度.通过各类激发互动的方式,使信息得以在关系链中流转.传播,达成有效的信息 ...
- 【主流技术】MongoTemplate 与 Spring Boot 项目集成分享(附CURD技巧)
目录 前言 一.表结构特点 1.1Json格式 1.2实体映射 二.条件构造 2.1Criteria与Query的区别 2.2简单条件 2.3复杂条件 三.如何选用接口 3.1MongoReposit ...
- 巧用别名和 sh 脚本,adb 快速截图和录屏,提高你的效率
前言 在平时开发过程中,我们经常需要截图和录制视频,尤其是客户端开发和测试. 可能有一些人的姿势是这样的.在电脑上开个模拟器,使用第三方工具后进行截图和录屏.还有一种最原始的方式,在手机上截图和录制视 ...
- 用 WebRTC 打造一个音乐教育 App,要解决哪些音质难题?
在去年疫情期间,在线教育行业获得了井喷式的发展,这背后的技术功臣非 RTC 莫属.本文将分享 RTC 技术在音乐教育场景下的实践经验. 作者| 逸城 审校| 泰一 音乐教育场景 - 在线陪练 2020 ...
- 【Cpp】RTTI 机制原理解析
References Baidu Wiki C++中的RTTI机制详解 RTTI 推荐阅读: RTTI 原理 推荐阅读:C++中的RTTI机制 什么是RTTI机制? RTTI 是"Runti ...
- java基础(4)--javadoc文档与命令
一.Javadoc文档 javadoc是Sun公司提供的一个技术,它从程序源代码中抽取类.方法.成员等注释形成一个和源代码配套的API帮助文档.也就是说,只要在编写程序时以一套特定的标签作注释,在程序 ...