[转帖]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 开源软件与腾讯云 ...
随机推荐
- JavaScript异步编程3——Promise的链式使用
目录 概述 详论 1️⃣回调地狱 2️⃣Promise实现 参考 概述 在上一篇文章<JavaScript异步编程2--结合XMLHttpRequest使用Promise>中,简要介绍了A ...
- “pip不是内部或外部命令,也不是可运行的程序或批处理文件” 到底有多么神秘
摘要:pip不是内部或外部命令,也不是可运行的程序或批处理文件到底有多么神秘? 本文分享自华为云社区<揭开「pip不是内部或外部命令,也不是可运行的程序或批处理文件」的神秘面纱>,作者:A ...
- IaC 存储最佳实践
往往一些成功的软件公司在构建解决方案的时候十分注重其可重复性.可审计性.和简便性,而基础设施即代码(IaC)的出现让开发人员能够将这些时间应用于基础设施的分配.目前的存储 IaC 的实践有以下三种: ...
- 如何精准预测天气?火山引擎ByteHouse与大地量子这么做
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 伴随着气象技术的发展以及城市气象设施的完善,气象监测服务能力在不断提高,实现短期甚至中长期的气象预测成为可能. ...
- 火山引擎 VeDI 推出这款产品 助力企业实现以“人”为中心的数据洞察
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 CDP(Customer Data Platform,客户数据平台)市场将迎来新一轮的高速增长. 国际数据公司(以 ...
- 火山引擎DataTester:如何使用A/B测试优化全域营销效果
当前,营销技术步入了全渠道.全周期的全域时代,随着广泛的数据积累,数据科学技术在营销领域发挥着越来越重要的作用,从消费者人群洞察到智能化信息广告投放,营销的提效让企业得以在转化的每个环节提升影响力 ...
- MongoDB 客户端工具,Studio3T 无法启动
阿里云 MongoDB 创建库添加用户并授权 MongoDB 客户端工具,Studio3T 无法启动,原因可能是因为本地的 java 版本导致 C:\Users\cj218>java -vers ...
- NLog.config 配置
NLog.confg 参考配置, NLog 热生效不需要重启服务 <?xml version="1.0" encoding="utf-8" ?> & ...
- 32. 干货系列从零用Rust编写正反向代理,关于堆和栈以及如何解决stack overflow
wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现websocket代 ...
- Docker 与 Linux Cgroups:资源隔离的魔法之旅
这篇文章主要介绍了 Docker 如何利用 Linux 的 Control Groups(cgroups)实现容器的资源隔离和管理. 最后通过简单 Demo 演示了如何使用 Go 和 cgroups ...