【容器云架构】Kubernetes网络解决方案的比较

简介: 【容器云架构】Kubernetes网络解决方案的比较

Kubernetes要求集群中的每个容器都具有唯一的可路由的IP。Kubernetes本身不分配IP,将任务交给第三方解决方案。


在这项研究中,我们的目标是找到具有最低延迟,最高吞吐量和最低安装成本的解决方案。由于我们的负载对延迟敏感,因此我们的目的是在相对高的网络利用率下测量高百分比的延迟。我们特别关注性能低于最大负载的30-50%,因为我们认为这最好代表了非超载系统的最常见用例。


竞争对手


Docker与--net =主机

这是我们的参考设置。所有其他的竞争对手都与这种设置进行比


-net = host选项意味着容器继承其主机的IP,即不涉及网络容器化。


先验,没有网络集装箱比任何网络容器化表现更好; 这就是为什么我们使用这个设置作为参考。


Flannel


Flannel是由CoreOS项目维护的虚拟网络解决方案。这是一个经过充分测试,生产就绪的解决方案,所以它的安装成本最低。


当您将一台带Flannel的机器添加到集群时,Flannel做三件事情:


使用etcd为新机器分配一个子网


在机器上创建虚拟桥接器(称为docker0桥)


设置数据包转发后端:


AWS-VPC


在Amazon AWS实例表中注册计算机子网。此表中的记录数限制为50,即如果使用aws-vpc Flannel,则集群中的计算机数不能超过50台。而且,这个后端只适用于Amazon的AWS。


主机-GW


通过远程计算机IP创建到子网的IP路由。运行Flannel的主机之间需要直接的二层连接。


VXLAN

创建一个虚拟的VXLAN接口。

由于flannel使用网桥接口来转发数据包,因此每个数据包在从一个容器移动到另一个容器时会通过两个网络堆栈。


IPvlan

在Linux内核中,IPvlan是驱动程序,使您可以创建具有唯一IP的虚拟接口,而无需使用网桥接口。

要将IP分配给具有IPvlan的容器,您必须:

  • 创建一个没有网络接口的容器
  • 在默认网络命名空间中创建一个ipvlan接口
  • 将接口移动到容器的网络名称空间

IPvLAN是一个相对较新的解决方案,所以没有现成的工具来自动化这个过程。这使得用许多机器和容器来部署IPvlan很困难,即安装成本高。


但是,IPvLAN不需要网桥接口,直接将数据包从网卡转发到虚拟接口,所以我们期望它的性能比Flannel更好。


负载测试方案

对于每个竞争对手,我们运行这些步骤:


在两台物理机上建立网络

在一台机器上的一个容器中运行tcpkali,让我们以恒定的速率发送请求

在另一台机器的容器中运行Nginx,让它用固定大小的文件进行响应

捕获系统度量和tcpkali结果

我们以每秒50,000到450,000个请求(RPS)的请求速率运行基准测试。


在每个请求中,Nginx都以一个固定大小的静态文件进行响应:350B(100B内容,250B头)或4KB。

结果

IPvlan显示最低延迟和最高吞吐量。带有host-gw和aws-vpc的法兰绒紧随其后,但是host-gw在最大负荷下显示效果更好。

与vxlan法兰绒显示在所有测试中最差的结果。但是,我们怀疑其99.999%的分数是由于一个错误。

4 KB响应的结果与350 B响应的结果类似,有两个显着的差异:

最大RPS点要低得多,因为4 KB响应只需要约270k RPS即可完全加载10 Gbps NIC

在接近吞吐量限制的情况下,IPvlan更接近--net = host

我们目前的选择是与主机gw法兰绒。它没有太多的依赖关系(例如,不需要AWS或新的Linux版本),与IPvlan相比很容易设置,并且具有足够的性能特征。IPvlan是我们的备份解决方案。如果在某些时候flannel增加了对IPvLAN的支持,我们将切换到它。


尽管aws-vpc比host-gw表现得稍微好一些,但它的50台机器限制和它连接亚马逊AWS的事实对我们来说是一个破坏者。

50,000 RPS, 350 B

每秒5万个请求,所有候选人表现出可接受的性能。您已经可以看到主要趋势:IPVlan表现最好,host-gw和aws-vpc紧随其后,vxlan是最差的。

150,000 RPS, 350 B

IPvLAN稍好于host-gw和aws-vpc,但是它具有最差的99.99个百分点。host-gw比aws-vpc执行略好。


250,000 RPS, 350 B

这种负荷预计在生产中也是常见的,所以这些结果是特别重要的。


IPvLAN再次显示最佳性能,但aws-vpc具有最好的99.99和99.999百分点。host-gw在95和99百分位上胜过aws-vpc。

350,000 RPS, 350 B¶


在大多数情况下,潜伏期接近250,000 RPS,350 B的情况,但在99.5百分位之后迅速增长,这意味着我们已经接近最大RPS。

450,000 RPS, 350 B

This is the maximum RPS that produced sensible results.

IPvlan leads again with latency ≈30% worse than that of --net-host:

Interestingly, host-gw performs much better than aws-vpc:


500,000 RPS, 350 B

Under 500,000 RPS, only IPvlan still works and even outperforms --net=host, but the latency is so high that we think it would be of no use to latency-sensitive applications.

50k RPS, 4 KB

Bigger response results in higher network usage, but the leaderboard looks pretty much the same as with the smaller response:

Latency percentiles at 50k RPS (≈20% of maximum RPS), ms

Setup 95 %ile 99 %ile 99.5 %ile 99.99 %ile 99.999 %ile Max Latency
IPvlan 0.6 0.8 0.9 5.7 9.6 15.8
aws-vpc 0.7 0.9 1 5.6 9.8 403.1
host-gw 0.7 0.9 1 7.4 12 202.5
vxlan 0.8 1.1 1.2 5.7 201.5 402.5
--net=host 0.5 0.7 0.7 6.4 9.9 14.8

150k RPS, 4 KB

Host-gw has a surprisingly poor 99.999 percentile, but it still shows good results for lower percentiles.

Latency percentiles at 150k RPS (≈60% of maximum RPS), ms

Setup 95 %ile 99 %ile 99.5 %ile 99.99 %ile 99.999 %ile Max Latency
IPvlan 1 1.3 1.5 5.3 201.3 405.7
aws-vpc 1.2 1.5 1.7 6 11.1 405.1
host-gw 1.2 1.5 1.7 7 211 405.3
vxlan 1.4 1.7 1.9 6 202.51 406
--net=host 0.9 1.2 1.3 4.2 9.5 404.7

250k RPS, 4 KB

This is the maximum RPS with big response. aws-vpc performs much better than host-gw, unlike the small response case.

Vxlan was excluded from the graph once again.


测试环境

Background

To understand this article and reproduce our test environment, you should be familiar with the basics of high performance.

These articles provide useful insights on the topic:

  • How to receive a million packets per second by CloudFlare
  • How to achieve low latency with 10Gbps Ethernet by CloudFlare
  • Scaling in the Linux Networking Stack from the Linux kernel documentation

Machines

  • We use two c4.8xlarge instances by Amazon AWS EC2 with CentOS 7.
  • Both machines have enhanced networking enabled.
  • Each machine is NUMA with 2 processors; each processor has 9 cores, each core has 2 hyperthreads, which effectively allows to run 36 threads on each machine.
  • Each machine has a 10Gbps network interface card (NIC) and 60 GB memory.
  • To support enhanced networking and IPvlan, we’ve installed Linux kernel 4.3.0 with Intel’s ixgbevf driver.

Setup

Modern NICs offer Receive Side Scaling (RSS) via multiple interrupt request (IRQ) lines. EC2 provides only two interrupt lines in a virtualized environment, so we tested several RSS and Receive Packet Steering (RPS) Receive Packet Steering (RPS) configurations and ended up with following configuration, partly suggested by the Linux kernel documentation:

  • IRQ
  • The first core on each of the two NUMA nodes is configured to receive interrupts from NIC.
    To match a CPU to a NUMA node, use lscpu:

$ lscpu | grep NUMA

NUMA node(s):          2

NUMA node0 CPU(s):     0-8,18-26

NUMA node1 CPU(s):     9-17,27-35

  • This is done by writing 0 and 9 to /proc/irq/<num>/smp_affinity_list, where IRQ numbers are obtained with grep eth0 /proc/interrupts:

$ echo0 > /proc/irq/265/smp_affinity_list

$ echo9 > /proc/irq/266/smp_affinity_list

  • RPS
  • Several combinations for RPS have been tested. To improve latency, we offloaded the IRQ handling processors by using only CPUs 1–8 and 10–17. Unlike IRQ’s smp_affinity, the rps_cpus sysfs file entry doesn’t have a _list counterpart, so we use bitmasks to list the CPUs to which RPS can forward traffic1:

$ echo"00000000,0003fdfe" > /sys/class/net/eth0/queues/rx-0/rps_cpus

$ echo"00000000,0003fdfe" > /sys/class/net/eth0/queues/rx-1/rps_cpus

  • Transmit Packet Steering (XPS)
  • All NUMA 0 processors (including HyperThreading, i.e. CPUs 0-8, 18-26) were set to tx-0 and NUMA 1 (CPUs 9-17, 27-37) to tx-12:

$ echo"00000000,07fc01ff" > /sys/class/net/eth0/queues/tx-0/xps_cpus

$ echo"0000000f,f803fe00" > /sys/class/net/eth0/queues/tx-1/xps_cpus

  • Receive Flow Steering (RFS)
  • We’re planning to use 60k permanent connections, official documentation suggests to round up it to the nearest power of two:

$ echo65536 > /proc/sys/net/core/rps_sock_flow_entries

$ echo32768 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt

$ echo32768 > /sys/class/net/eth0/queues/rx-1/rps_flow_cnt

  • Nginx
  • Nginx uses 18 workers, each worker has it’s own CPU (0-17). This is set by the worker_cpu_affinity option:

workers18;worker_cpu_affinity110100100010000...;

  • Tcpkali
  • Tcpkali doesn’t have built-in CPU affinity support. In order to make use of RFS, we run tcpkali in a taskset and tune the scheduler to make thread migrations happen rarely:

$ echo10000000 > /proc/sys/kernel/sched_migration_cost_ns

$ taskset -ac 0-17 tcpkali --threads 18 ...

This setup allows us to spread interrupt load across the CPU cores more uniformly and achieve better throughput with the same latency compared to the other setups we have tried.

Cores 0 and 9 deal exclusively with NIC interrupts and don’t serve packets, but they still are the most busy ones:


RedHat’s tuned was also used with the network-latency profile on.

To minimize the influence of nf_conntrack, NOTRACK rules were added.

Sysctls was tuned to support large number of tcp connections:

fs.file-max=1024000net.ipv4.ip_local_port_range="2000 65535"net.ipv4.tcp_max_tw_buckets=2000000net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_tw_recycle=1net.ipv4.tcp_fin_timeout=10net.ipv4.tcp_slow_start_after_idle=0net.ipv4.tcp_low_latency=1

Footnotes

[1] Linux kernel documentation: RPS Configuration
[2] Linux kernel documentation: XPS Configuration


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4月前
|
小程序 前端开发
2025商业版拓展校园圈子论坛网络的创新解决方案:校园跑腿小程序系统架构
校园跑腿小程序系统是一款创新解决方案,旨在满足校园配送需求并拓展校友网络。跑腿员可接单配送,用户能实时跟踪订单并评价服务。系统包含用户、客服、物流、跑腿员及订单模块,功能完善。此外,小程序增设信息咨询发布、校园社区建设和活动组织等功能,助力校友互动、经验分享及感情联络,构建紧密的校友网络。
129 1
2025商业版拓展校园圈子论坛网络的创新解决方案:校园跑腿小程序系统架构
|
4月前
|
人工智能 监控 安全
NTP网络子钟的技术架构与行业应用解析
在数字化与智能化时代,时间同步精度至关重要。西安同步电子科技有限公司专注时间频率领域,以“同步天下”品牌提供可靠解决方案。其明星产品SYN6109型NTP网络子钟基于网络时间协议,实现高精度时间同步,广泛应用于考场、医院、智慧场景等领域。公司坚持技术创新,产品通过权威认证,未来将结合5G、物联网等技术推动行业进步,引领精准时间管理新时代。
|
3月前
|
Docker 容器
Docker网关冲突导致容器启动网络异常解决方案
当执行`docker-compose up`命令时,服务器网络可能因Docker创建新网桥导致IP段冲突而中断。原因是Docker默认的docker0网卡(172.17.0.1/16)与宿主机网络地址段重叠,引发路由异常。解决方法为修改docker0地址段,通过配置`/etc/docker/daemon.json`调整为非冲突段(如192.168.200.1/24),并重启服务。同时,在`docker-compose.yml`中指定网络模式为`bridge`,最后通过检查docker0地址、网络接口列表及测试容器启动验证修复效果。
|
5月前
|
机器学习/深度学习 并行计算 PyTorch
英伟达新一代GPU架构(50系列显卡)PyTorch兼容性解决方案
本文记录了在RTX 5070 Ti上运行PyTorch时遇到的CUDA兼容性问题,分析其根源为预编译二进制文件不支持sm_120架构,并提出解决方案:使用PyTorch Nightly版本、更新CUDA工具包至12.8。通过清理环境并安装支持新架构的组件,成功解决兼容性问题。文章总结了深度学习环境中硬件与框架兼容性的关键策略,强调Nightly构建版本和环境一致性的重要性,为开发者提供参考。
2450 64
英伟达新一代GPU架构(50系列显卡)PyTorch兼容性解决方案
|
4月前
|
机器学习/深度学习 算法 测试技术
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
本文探讨了基于图的重排序方法在信息检索领域的应用与前景。传统两阶段检索架构中,初始检索速度快但结果可能含噪声,重排序阶段通过强大语言模型提升精度,但仍面临复杂需求挑战
124 0
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
|
4月前
|
Cloud Native 区块链 数据中心
Arista CloudEOS 4.32.2F - 云网络基础架构即代码
Arista CloudEOS 4.32.2F - 云网络基础架构即代码
90 1
|
5月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
6月前
|
机器学习/深度学习 测试技术 网络架构
FANformer:融合傅里叶分析网络的大语言模型基础架构
近期大语言模型(LLM)的基准测试结果显示,OpenAI的GPT-4.5在某些关键评测中表现不如规模较小的模型,如DeepSeek-V3。这引发了对现有LLM架构扩展性的思考。研究人员提出了FANformer架构,通过将傅里叶分析网络整合到Transformer的注意力机制中,显著提升了模型性能。实验表明,FANformer在处理周期性模式和数学推理任务上表现出色,仅用较少参数和训练数据即可超越传统Transformer。这一创新为解决LLM扩展性挑战提供了新方向。
160 5
FANformer:融合傅里叶分析网络的大语言模型基础架构
|
6月前
|
算法 前端开发 定位技术
地铁站内导航系统解决方案:技术架构与核心功能设计解析
本文旨在分享一套地铁站内导航系统技术方案,通过蓝牙Beacon技术与AI算法的结合,解决传统导航定位不准确、路径规划不合理等问题,提升乘客出行体验,同时为地铁运营商提供数据支持与增值服务。 如需获取校地铁站内智能导航系统方案文档可前往文章最下方获取,如有项目合作及技术交流欢迎私信我们哦~
350 1
|
6月前
|
安全 容灾 网络安全
深度用云——释放企业潜能 | 网络先行——阿里云网络卓越架构白皮书正式发布
深度用云——释放企业潜能 | 网络先行——阿里云网络卓越架构白皮书正式发布
206 3

热门文章

最新文章

推荐镜像

更多