Sometimes people don't need advice, they just need someone to listen and care.
Toggle navigation
Home
Archives
Tags
About
Kubernetes网络插件 Flannel + LVS FULLNAT 性能测试
2019-08-16 08:55:29
713
0
0
william
## 测试命令 `yum install -y qperf`,这个工具能同时测试带宽和延时,很容易使用。 需要在其中一端开启服务端监听 ## 压测场景 宿主机 -> 宿主机服务 宿主机 -> Flannel Pod (vxlan) 宿主机 -> LVS(FULLNAT) -> Flannel Pod (vxlan) 宿主机 -> Flannel Pod (host-gw) 宿主机 -> LVS(FULLNAT) -> Flannel Pod (host-gw) ## 压测步骤 1.在 Kubernetes 中创建 Deployment 启动 nginx 服务,通过 nodeselector 指定 Pod 在宿主机 `10.18.159.9`上启动。 2.在宿主机 `10.18.159.9` 上使用 hostnetwork 的模式启动 Nginx 服务 3.获取四个POD/容器的pid和IP 最终启动状态为 | 节点 | 容器IP | pid | | :------- | ----: | :---: | | 10.18.159.9 | 172.20.7.33 | 19315 | | 10.18.159.9 | hostnetwork | 25597 | 4.运行qperf测试 **启动 qperf Server 端** 1) vxlan容器 ```bash # 其中19315是节点一上vxlan容器的pid nsenter -t 19315 -n qperf & ``` 2) hostnetwork容器 ```bash # 其中25597是节点一上hostnetwork容器的pid nsenter -t 25597 -n qperf & ``` **启动 qperf Client 端** ###测试宿主机 -> 宿主机服务的网络性能 ```bash qperf 10.18.159.9 -oo msg_size:64:64K:*2 -vu -vvc tcp_bw tcp_lat > host.raw ``` ###测试宿主机 -> Flannel Pod的网络性能 ```bash qperf 172.20.7.33 -oo msg_size:64:64K:*2 -vu -vvc tcp_bw tcp_lat > vxlan.raw ``` > 切换到 host-gw 模式后使用相同的方法启动qperf server 端。 ###测试宿主机 -> LVS(FULLNAT) -> Flannel Pod的网络性能 ```bash qperf vip -oo msg_size:64:64K:*2 -vu -vvc tcp_bw tcp_lat > lvs-vxlan.raw ``` > 切换到 host-gw 模式后使用相同的方法启动qperf server 端。 ###处理原始数据生成对比图表 下载qperf-plot工具: https://github.com/wilhelmguo/qperf-plot 把原始qperf报告转换为plot数据文件 ```bash cat vxlan.raw | ./qperf-parse.py > vxlan && \ cat lvs-vxlan.raw | ./qperf-parse.py > lvs-vxlan && \ cat host.raw | ./qperf-parse.py > host ``` 生成对比 PNG 图表 ```bash gnuplot -c qperf-plot.plt vxlan lvs-vxlan host ``` ###测试环境和结果 节点配置: 标准服务器 24 核 128G 10Gb网卡 节点操作系统:Centos 7.6 节点内核版本: 4.9.18 Qperf版本: qperf 0.4.9 Flannel版本: v0.11.0 延时图表:  吞吐量:  ### 测试性能数据 1) 宿主机 -> 宿主机服务 ```bash qperf -t 10 10.18.159.9 -v tcp_bw tcp_lat ``` ```bash tcp_bw: bw = 1.18 GB/sec msg_rate = 17.9 K/sec time = 30 sec send_cost = 109 ms/GB recv_cost = 340 ms/GB send_cpus_used = 12.8 % cpus recv_cpus_used = 39.9 % cpus tcp_lat: latency = 20.9 us msg_rate = 47.8 K/sec time = 30 sec loc_cpus_used = 19.4 % cpus rem_cpus_used = 23.2 % cpus ``` 2) 宿主机 -> Flannel Pod (vxlan模式) ```bash qperf -t 10 172.20.7.33 -v tcp_bw tcp_lat ``` #### ```bash tcp_bw: bw = 1.07 GB/sec msg_rate = 16.3 K/sec time = 30 sec send_cost = 199 ms/GB recv_cost = 1.15 sec/GB send_cpus_used = 21.2 % cpus recv_cpus_used = 122 % cpus tcp_lat: latency = 32.4 us msg_rate = 30.8 K/sec time = 30 sec loc_cpus_used = 22.9 % cpus rem_cpus_used = 35.3 % cpus ``` 3) 宿主机 -> Flannel Pod (host-gw模式) ```bash tcp_bw: bw = 1.17 GB/sec msg_rate = 17.9 K/sec port = 8,080 time = 30 sec send_cost = 108 ms/GB recv_cost = 404 ms/GB send_cpus_used = 12.6 % cpus recv_cpus_used = 47.4 % cpus tcp_lat: latency = 24 us msg_rate = 41.7 K/sec port = 8,080 time = 30 sec loc_cpus_used = 21.2 % cpus rem_cpus_used = 32.2 % cpus ``` 4) 宿主机 -> LVS(FULLNAT) -> Flannel Pod (vxlan模式) ```bash tcp_bw: bw = 1.06 GB/sec msg_rate = 16.2 K/sec time = 30 sec send_cost = 117 ms/GB recv_cost = 828 ms/GB send_cpus_used = 12.5 % cpus recv_cpus_used = 88.2 % cpus tcp_lat: latency = 40.4 us msg_rate = 24.8 K/sec time = 30 sec loc_cpus_used = 12.5 % cpus rem_cpus_used = 25.5 % cpus ``` 5) 宿主机 -> LVS(FULLNAT) -> Flannel Pod (host-gw模式) ```bash tcp_bw: bw = 1.18 GB/sec msg_rate = 18 K/sec port = 8,080 time = 30 sec send_cost = 121 ms/GB recv_cost = 462 ms/GB send_cpus_used = 14.3 % cpus recv_cpus_used = 54.5 % cpus tcp_lat: latency = 35 us msg_rate = 28.5 K/sec port = 8,080 time = 30 sec loc_cpus_used = 14.4 % cpus rem_cpus_used = 22.9 % cpus ``` ### 结论 - Flannel VXLAN 模式大概有 9% 左右性能损耗,延时为 150% - Flannel host-gw 模式几乎等同于物理机性能 - LVS + Flannel VXLAN 模式大概有 12% 左右的性能损耗,延时为 180%
Pre:
Golang 踩坑记之 Http Client 连接未释放
Next:
容器开放接口规范(CRI OCI)
0
likes
713
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
Please enable JavaScript to view the
comments powered by Disqus.
comments powered by
Disqus
Table of content