一个适合 Kubernetes 的最佳网络互联方案

本文讲的是一个适合 Kubernetes 的最佳网络互联方案,【编者的话】本文比较了几种 Kubernetes 联网方案,包括 Flannel(aws-vpc | host-gw | vxlan)和 IPvlan 。目前建议选择 flannel + host-gw 方案,没有特别依赖,性能也够用。一旦 flannel 支持 IPvlan (有自动化设置工具了),且 Linux 内核版本比较新,就可以采用 IPvlan 方案。

Kubernetes 要求集群包含的每一个容器都拥有一个独立、可路由的 IP 地址。IP 地址的分配是由第三方联网解决方案负责, Kubernetes 自己不管。

本研究的目标是找出一个适合 Kubernetes 的最佳联网方案:延迟最低、吞吐最高、设置最容易。我们选择延迟敏感的网络负载,试图衡量在网络负载相对较高时请求占比与延迟的对应关系。我们尤其关注网络负载是最大负载的 30-50% 时联网方案的性能表现,因为我们觉得这是一个尚未超出最大负载系统的最常见负载范围。

联网方案

Docker --net=host

这项测试的结果是一个标杆,代表可能达到的最佳性能,其他方案的测试结果将分别与之比较,评判优劣。

--net=host 是指容器继承宿主机的 IP 地址,不包含任何网络隔离。

与其他实现网络隔离的联网模式相比,Docker --net=host 模式的性能更好,所以我们选择这种模式作为标杆。

Flannel

Flannel 是由 CoreOS 维护的一个虚拟网络方案。这个方案经过精心测试,完全可用于生产环境,它也是最容易设置的。

使用Flannel ,添加一台新机器到集群时,Flannel 做了三件事:

  1. 使用 etcd 为新增机器分配一个子网
  2. 在宿主机上创建一个虚拟桥接接口(名为 docker0 的桥接器)
  3. 设置一个网络转发后端
    • aws-vpc:在 Amazon AWS 实例表中注册新增机器子网。该实例表最多支持 50 项记录,这意味着,如果你使用 flannel + aws-vpc 方案,集群最多只能包含 50 台机器,集群也只能运行在 AWS 云平台。
    • host-gw:通过远程机器 IP ,创建到子网的 IP 路由。这要求运行 flannel 的不同主机在二层直接互通。
    • vxlan:创建一个虚拟的 VXLAN 接口

由于 flannel 使用桥接接口转发网络包,从一个容器发往另一个容器的网络包将历经两个网络栈。

IPVlan

IPvlan是 Linux 内核中的一个驱动,有了它,无需使用桥接接口,就可以创建拥有唯一 IP 地址的虚拟网络接口。

使用 IPvlan 为容器分配一个 IP 地址,需要下列步骤:

  1. 创建一个不包含任何网络接口的容器;
  2. 在默认的网络命名空间中创建一个 ipvlan 接口;
  3. 把新建的 ipvlan 接口转移到容器的网络命名空间。

IPvlan 是一个相对较新的解决方案,现在还没有能完成上述过程的自动化工具。如果集群的机器和容器比较多,部署 IPvlan 的难度不小,不容易设置。

不过, IPvlan 不需要使用桥接接口,网络包从网卡直接转发到虚拟网络接口,我们预期它的性能应该好于Flannel 。

负载测试场景

对每一种方案,执行下列步骤:

  1. 在两台物理机器上设置联网
  2. 在一台物理机的一个容器中运行 tcpkali ,以恒定速度发送请求;
  3. 在另一台物理机的一个容器中运行 Nginx ,收到请求后,返回一个固定大小的文件给请求方;
  4. 记录系统度量和 tcpkali 结果。

测试的两个参数分别是每秒发送的请求数(requests per second, RPS)和静态文件的大小。前者的取值从 50,000 到 450,000 不等,后者主要分为 350B(100 字节的文件内容和 250 字节的文件头) 和 4KB 两类文件。

测试结果

  1. IPvlan 的延迟最低、吞吐量最高, Flannel + host-gw 和 flannel + aws-vpc 方案的性能紧随其后,不过,在负载达到最大值时, 前者的测试结果更好;
  2. 就跟预计的一样,在所有测试中, Flannel + vxlan 方案的测试结果都是最差的。不过,有一个例外,我们怀疑这种方案在 99.999% 这一项的糟糕结果是由软件缺陷造成的;
  3. 返回的文件的大小是 4KB 还是 350B ,测试结果都差不多。有两点不同需要注意:
    • 4KB 时,支持的最大负载(RPS)相对低得多,因为一个 10Gbps 网卡,只需 25kRPS 就达到最大负载了(250k * 4k = 10G);
    • IPvlan 的吞吐量与 --net=host 的吞吐量非常接近,即接近达到吞吐上限。

我们选择 flannel + host-gw 联网方案,因为它没有特别的依赖(例如, aws-vpc 只能运行在 AWS 平台, ipvlan 要求内核版本比较新),与 IPvlan 相比,更容易设置,性能也够用。 IPvlan 是我们的备选方案,一旦 flannel 支持 IPvlan ,我们就会切换到 IPvlan 方案。

虽然 aws-vpc 方案的性能略优于 host-gw ,但是用这种方案设置的集群最多只能包含 50 机器,也只能运行在 AWS 平台上,这是我们无法接受的。

50kRPS,350B

当每秒发送 50,000 个请求,返回的静态文件大小为 350B 时,所有方案的性能表现都还可以。从中也能看出主要趋势: IPvlan 表现最好, aws-vpc 和 host-gw 紧随其后,而 vxlan 的表现最差。

150kRPS,350B

150kRPS (约为最大 RPS 的 30% )时请求占比与延迟的对应关系,单位是 ms (毫秒)。

IPvlan 比 aws-vpc 和 host-gw 表现稍好,不过在请求占比 99.99% 这一项中,它的表现最差。总体上, host-gw 的表现略好于 aws-vpc 。

译者注:以 IPvlan 为例, 99.99% 对应的延迟取值是 6.7ms 。这意味着每秒有 150,000 * 99.99% 个请求的延迟不高于 6.7ms 。

250kRPS,350B

这是生产环境中常见的负载,所以这个测试结果特别重要。

250kRPS (约为最大 RPS 的 50% )时请求占比与延迟的对应关系,单位是 ms (毫秒)。

IPvlan 的表现最佳,但是 aws-vpc 在 99.99% 和 99.999% 两项的表现最好。而 host-gw 在 95% 和 99% 这两项的表现好过 aws-vpc 。

350kRPS,350B

与上面 250krps, 350B 的测试结果差不多,但是在 99.5% 以后,延迟迅速增加,这意味着网络负载已经接近最大值。

450kRPS,350B

这是能产生有意义结果的最大 RPS 取值。

IPvlan 仍然表现最佳,与 --net=host 相比,延迟增加了大约 30% 。

有意思的是, host-gw 的表现远超 aws-vpc 。

500kRPS,350B

当每秒请求数达到 500,000 个时,只有 IPvlan 方案还能正常工作,甚至比 --net=host 还好!不过,此时的延迟非常高,完全不适合延迟敏感型应用。

50kRPS,4KB

返回的文件更大,因此占用的网络带宽也更高。这项测试的结果与 50krps, 350B 的测试结果差不多。

50kRPS (约为最大 RPS 的 20% )时请求占比与延迟的对应关系,单位是 ms (毫秒)。

150kRPS,4KB

host-gw 在 99.999% 这一项的表现出人意料地差,低于此比例的表现还是不错的。

150kRPS (约为最大 RPS 的 60% )时请求占比与延迟的对应关系,单位是 ms (毫秒)。

250kRPS,4KB

这是响应文件大小为 4KB 时允许的最大 RPS 。 aws-vpc 表现远远好于 host-gw ,跟响应文件大小为 350B 时的测试结果非常不同。

vxlan 又一次被排除在外(译注:延迟太高了),上图中根本就没画。

测试环境

背景

要想理解这篇文章,重现测试环境,你必须熟悉有关高性能的基础知识。

下列文章非常有用:

机器

  • 两个 Amazon AWS EC2 的 c4.8xlarge 实例,操作系统是 CentOS 7 。
  • 两台机器都开启了增强联网
  • 每台机器包含 2 个处理器( NUMA 架构),每个处理器有 9 核,每核 2 个超线程。也就是说,每台机器能有效地运行 36 个线程。
  • 每台机器有一块 10Gbps 网卡, 60GB 内存。
  • 为了支持增强联网和 IPvlan ,我们安装了 Linux 内核 4.3.0 和 Intel 的 ixdbevf 驱动。

设置

现代网卡都提供了经由多中断线的RSS(Receive Side Scaling, 接收端扩展)功能。 EC2 的虚拟环境只提供两个中断线,我们测试了几种 RSS 和 RPS(Receive Packet Steering,接收包控制)配置,最后选择下列配置,其中有一部分参考了 Linux 内核文档的建议:

译者注: RSS 和 RPS 的作用都是把网络包直接交给特定的 CPU 核处理,前者需要网卡硬件支持,后者是纯软件实现。

IRQ

每台机器有两个 NUMA 节点(处理器)。设置每个 NUMA 节点的第一个 CPU 核专门处理网卡中断。

首先调用 lscpu ,列出处理器与 NUMA 节点的对应关系:

$ lscpu | grep NUMA
NUMA node(s):          2
NUMA node0 CPU(s):     0-8,18-26
NUMA node1 CPU(s):     9-17,27-35

由此可见,要设定第 0 号和第 9 号 CPU 核处理网卡中断,即把 0 和 9 写入/proc/irq/<num>/smp_affinity_list ,其中 <num> 是中断号,可以通过调用 grep eth0 /proc/interrupts 获得,例如:

$ echo 0 > /proc/irq/265/smp_affinity_list
$ echo 9 > /proc/irq/266/smp_affinity_list

RPS

我们测试了几种 RPS 组合。为了降低延迟,我们只用 CPU 核 1-8 和 10-17 处理中断。不像 IRQ 有可以直接设置的 smp_affinity_list 属性,得用位掩码设定 由哪些 CPU 核处理网络包(参见脚注 1 ):

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

XPS(Transmit Packet Steering, 传送包控制)

第一个处理器的 CPU 核(包括超线程,即 0-8, 18-26 )专门处理传输队列 tx0 ,第二个处理器的 CPU 核(9-17, 27-35)专门处理传输队列 tx1 (参见脚注 2 ):

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

RFS(Receive Flow Steering,接收流控制)

我们计划使用 60k 永久连接,官方建议把 RFS 设为与之最接近的 2 的次幂:

$ echo 65536 > /proc/sys/net/core/rps_sock_flow_entries
$ echo 32768 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt
$ echo 32768 > /sys/class/net/eth0/queues/rx-1/rps_flow_cnt

Nginx

Ngnix 使用 18 个工作进程,每个进程对应一个专门的 CPU 核(0-17),这是通过 worker_cpu_affinity 选项设定的:

workers 18;
worker_cpu_affinity 1 10 100 1000 10000 ...;

Tcpkali

Tcpkali 本身不支持与特定的 CPU 核绑定。我们用 taskset 执行 tcpkali ,设置调度器,使得线程很少会被从一个 CPU 核调整到另外一个 CPU 核执行:

$ echo 10000000 > /proc/sys/kernel/sched_migration_cost_ns
$ taskset -ac 0-17 tcpkali --threads 18 ...

上面的设置使得中断负载更均匀地分布在 CPU 核上。在同等延迟下,与其他设置相比,这种设置的吞吐量更高。

第 0 号和第 9 号CPU 核只处理网卡中断,不收发网络包。但是它们仍然是最忙碌的 CPU 核:

还使用Red Hat的tuned ,开启网络延迟画像。

为了把 nf_conntrack 的影响降到最小,添加了 NOTRACK 规则

为了支持更多的 tcp 连接,用 sysctl 调整下列参数:

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

脚注

  1. Linux 内核文档: RPS 配置
  2. Linux 内核文档: XPS 配置

原文链接: Comparison of Networking Solutions for Kubernetes (翻译:柳泉波)

原文发布时间为:2016-03-13 

本文作者:bnuhero 

本文来自合作伙伴DockerOne,了解相关信息可以关注DockerOne。

原文标题:一个适合 Kubernetes 的最佳网络互联方案

时间: 2025-01-21 18:04:28

一个适合 Kubernetes 的最佳网络互联方案的相关文章

Kubernetes网络部署方案

本文讲的是Kubernetes网络部署方案[编者的话]现在网络上流传很多Kubernetes的部署和搭建的文档,其中比较出名就是Kubernetes The Hard Way,还有基于这个翻译和衍生的版本follow-me-install-kubernetes-cluster,这两篇文章带我走过了Kubernetes的搭建的童年,我第一搭建成功就是抄袭的张俊的follow-me-install-kubernetes-cluster,然后随着新版的发展,越来越多的配置参数存在各种各样的问题,最大的

营销新人指南:5歩帮你选择最佳的广告方案

中介交易 SEO诊断 淘宝客 云主机 技术大厅 导读 给你的企业选择最佳的广告方案需要考虑很多因素,包括你本身的经验和能力,因为这决定了你在多大程度上能制定和管理你的宣传活动,还包括了你期望的花费预算,当然还有其他的因素.以下的五步走会帮助你为你的企业选择最佳的方案. 一.确定你的顾客 如果你希望在广告宣传上花的钱每一分都用在刀刃上,并切实达到了你期望的效果,那你就非常有必要去确定你的顾客(如人口特征.地理位置.兴趣.相关活动等等). 二.确定你的目标 你要清楚你希望你的顾客在看到广告宣传之后采

威客助力企业网络推广 方案信手拈来

硅谷网讯 网络是普通人生活中必不可少的一种工具,不仅如此,作为一个普及的.大众化的信息传播平台,它对企业的影响更加重大.不少企业在网络普及之前开始着手网络推广的准备工作,网络大众化之后迅速启动网络推广各项工作,狂揽网络客源,为企业创作了可观的经济效益.随着互联网的不断扩张,各行各业又有自己的特点,需要的网络推广的手段也各不相同,为此,一份适合企业的网络 推广方案,是每个企业的追求,威客的出现,给需要方案的企业带去了大好消息,推广方案从此信手拈来. 岁末年初,每个企业都蓄势待发,准备着年前最后一波

大流量网站性能优化:一步一步打造一个适合自己的BigRender插件(转)

BigRender 当一个网站越来越庞大,加载速度越来越慢的时候,开发者们不得不对其进行优化,谁愿意访问一个需要等待 10 秒,20 秒才能出现的网页呢? 常见的也是相对简单易行的一个优化方案是 图片的延迟加载.一个庞大的页面,有时我们并不会滚动去看下面的内容,这样就浪费了非首屏部分的渲染,而这些无用的渲染,不仅包括图片,还包括其他的 DOM 元素,甚至一些 js/css(某些js/css 是根据模块请求的,比如一些 ajax),理论上,每增加一个 DOM,都会增加渲染的时间.有没有办法能使得

Grails一个适合快速开发的web开源框架

本文将介绍一种更为通用的封装方案,该方案中通过组合使用 dojo.Stateful.dojo.xhr.dojo.Deferred 等常用类及方法,使开发者用一种面向对象的.简单透明的方式,实现客户端与 REST 风格的 API 之间的同步或者异步的交互. 本文将使用 Dojo 1.7 并遵循 AMD 的规范,设计并实现与 REST API 交互的 Web 前端http://www.aliyun.com/zixun/aggregation/14208.html">数据模型. 准备工作 安装

《CCNA学习指南:数据中心(640-911)》——第2章 网络互联

第2章 网络互联 本章涵盖以下内容: 理解主机到主机的通信模型 理解主机到主机的通信 OSI参考模型 OSI模型的分层及其功能 封装和解封装 端到端的通信 TCP/IP协议族 欢迎来到激动人心的网络互联世界.本章将带领你回顾网络互联的基本概念,并着重关注如何使用Cisco路由器和交换机构建网络.首先你需要知道何为互联网络(Internetwork),对吧?在创建一个互联网络时,你需要通过路由器将两个或多个网络连接在一起,在使用IP或IPv6协议的基础上,配置逻辑的网络寻址机制. 本章将介绍如下主

2017年5个最佳网络监控工具 你知道哪些

网络支撑着现代企业的IT基础设施,连接着电脑与平板电脑和手机.服务器及其他关键硬件.网络帮助企业实现有线的沟通和其他重要方面,例如工作人员之间的资源共享.企业网络使每个人都可以上网,并使用共享设备,例如打印机.传真机和电子邮件服务器. 但与其他任何技术一样,网络很容易面临中断和其他挑战,而这些网络问题可能对企业带来极大不便,这就是为什么需要网络监控工具的原因.网络监控工具可帮助企业监控网络,当问题发生时以不同方式发送警报. 下面我们来看看5个最佳网络监控解决方案: 1. EventSentry

加盟北京游戏公社最佳财富分享方案

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   众所周知,网络游戏产业作为投资界的"天之骄子",随着人们生活水平的逐步提高,有了更多的时间花在休闲娱乐上,而 棋牌类游戏是大众的娱乐的 首选.2012年底CNNIC统计数据显示:我国网络游戏用户2012年达到了3.5亿人,占网民比例65.3%,网络棋牌类游戏用户2.85亿人,占网络游戏的80%,在未来 五年中棋牌类网络游戏还有巨大的发展空间.

应用为王 宝德获最佳国产云计算方案奖

本文讲的是应用为王 宝德获最佳国产云计算方案奖,近日国家信息产业公共服务平台2012年终评选揭晓,宝德科技以出色的云计算解决方案能力获"最佳国产云计算解决方案奖",共有宝德监控云存储解决方案和基于虚拟化技术构建高校绿色云计算数据中心方案获得殊荣.宝德作为国内云计算推动厂商,一直是国内最重要的云计算解决方案和云基础架构的提供者之一,特别是宝德可伸缩智慧云基础架构,更给云计算带来智慧与活力.目前宝德已经拥有了公有云.私有云.云服务和云基础架构的提供能力. 近年来,云计算落地问题一直困扰着业