k8s 系真的是 qps 杀手

2021-10-02 17:46:37 +08:00
 liuxu
测试了下 k3s,发现 qps 10 倍下跌。

压测机:ubuntu20.04 ,wrk2,6C16G 。
靶机:ubuntu20.04 ,2C4G 。
靶机和压测机均为同一内网,使用 vultr 多台机器搭建。

准备:
ubuntu20.04 下编译最新的 stable 版本 nginx-1.20.1,编译后的文件制作成 docker 镜像上传到 docker hub,然后又制作了一个 helm 包,用于直接安装到 k3s 测试。
其中 index.html 均为字符串"helloworld",nginx 配置 worker_connections 为 102400,worker_processes 为 auto 。
所有系统 nofile 为 102400 。

压测目标:
所有请求保证在 1s 以内,1k 或 10k 加减,如测试 1k 、2k,2k 超过 1s 则丢弃 2k 的数据,只留下 1k 的。10k 、20k,20k 超过 1 秒则丢弃 20k 的数据。


压测步骤:
1. 裸机启动 docker run,压测,然后卸载 docker,安装 k3s,默认 runtime 为 containerd 。
结果:裸 docker run 并发 10k,rps 30k 。k3s 直接降到并发 1k,rps 1k 。



2.分别安装 k3s(runtime 为 containerd)和 k3s(runtime 为 docker)压测。
结果:同为并发 1k,rps 1k,docker 延迟明显高于 containerd 。



3. k3s 使用 containerd,并分别安装 2 、3 、4 个 node 压测,其中 master 会被 taint 掉 agent,也就是真正运行 nginx 的为 1 、2 、3 个 node,其中每个 node 分配 1 个 nginx pod (当然 master 没有 pod )。
结果:随着 node 数增加,rps 也可以慢慢增加。但总的来说,即使此时有 4 个 2C4G 的 node,也只能并发 1k,rps 7k,远不如裸机跑 docker run 。




结论:使用 k8s 系可以拥有自动扩展,高可用等能力,而且可以直接对接多种 CI 平台。但是对于小成本又想要高 qps 的项目,不要使用 k8s 系,建议使用传统环境部署。当然很多人的项目永远都不会有 1k qps,所以这种业务情况上 k8s 系还是很香的。
12031 次点击
所在节点    Kubernetes
68 条回复
yidinghe
2021-10-03 10:38:32 +08:00
@WispZhan 懂你就多说两句,这么多人看着呢,要么别张嘴,张嘴就要讲出有说服力的话,不然自己名声没了
choury
2021-10-03 10:45:25 +08:00
用容器方案可优化的地方多了,用默认配置跑当然性能不行,cpu 绑核,中断绑定,网络模式这些,甚至日志打的多了都会影响性能
guyskk0x0
2021-10-03 10:49:16 +08:00
一般业务代码 2c4g 机器只能跑到几十上百 QPS,响应时间 50ms 左右。index.html 太小了,响应时间太短。
liuxu
2021-10-03 10:56:40 +08:00
@guyskk0x0 我掐指一算你要么是个 java 写中台的,要么是个 php 但是用的 laravel /dog
HelloAmadeus
2021-10-03 11:02:08 +08:00
2c4g 基本上 CPU 和内存都被 k8s 占了吧,配置太低了
guyskk0x0
2021-10-03 11:16:44 +08:00
@liuxu #42 问题不在语言框架,只要用了数据库,或是请求了外部接口,响应时间和 QPS 都是这个水平。仅讨论问题,没必要瞎猜,而且你都猜错了。
tinkerer
2021-10-03 12:32:49 +08:00
@liuxu 你这一路点评下来,到底是为了找到问题根源还是想证明自己正确?
jiangzhizhou
2021-10-03 13:03:13 +08:00
上云很贵嘛? EKS ?
好奇为什么要自己运维,友善讨论。
liuxu
2021-10-03 13:41:24 +08:00
@guyskk0x0 就认真讨论问题话,2h4g 的 qps 简单业务用上异步框架可以过 1-2k,没有的话建议跑下 profile 分析下,以及数据库性能
liuxu
2021-10-03 13:49:33 +08:00
@tinkerer 要分析 k3s 发帖回帖是找不到答案的,找答案要自己分析系统 profile,主要是我自己的几个网站用的 k3s 后 qps 极速下降,我还以为是 cf 的问题,这测了下才知道是 k3s 导致
liuxu
2021-10-03 13:51:37 +08:00
@jiangzhizhou 很贵,按楼上大佬的意思搞几台 16c64g,简单的 4c8g 每个月小几千,个人项目和小公司很难负担吧
uucloud
2021-10-03 14:37:08 +08:00
裸 docker 跑有限制 cgroup 吗,同 cpu limit 下跑的差 10 倍? 感觉有点离谱...大概率是实验设计的有问题
jiangzhizhou
2021-10-03 15:17:05 +08:00
@liuxu 嗯,能够理解。小公司咬咬牙上云长远来看肯定省心,只要一次事故,钱肯定回来了。个人项目这个就不好说了,丰简由人。
PS:小公司在基础设施上省钱肯定要转嫁到客户头上去的。
Skmgo
2021-10-03 19:11:20 +08:00
这个问题我曾经提问过, 大家都说没问题.
idblife
2021-10-03 20:33:10 +08:00
@liuxu
如果没那么多预算,说明项目不大,用 k8s 的考虑是啥呢?
liuxu
2021-10-03 20:42:38 +08:00
@idblife 我自己的是有一堆小项目每年换服务器商能快速迁移,其次接入 github actions 自动化部署也方便很多,而且有时候突然流量来了能快速伸缩
yc8332
2021-10-03 23:13:36 +08:00
有损耗是一定的。但是 10 倍我是不信,估计是你的机器资源问题。。这个和并发设置一样,并不是设置越高性能就会越高,资源不足的时候切换就越慢
offswitch
2021-10-03 23:15:54 +08:00
nginx 用 return 200 再压测一下,对比一下。
dcoder
2021-10-04 00:37:32 +08:00
docker, k8s 就是又慢又复杂啊...

但是, 大家都是"面向简历编程", 不妨碍浪费公司资源用这套破烂
carrotrollroll
2021-10-04 10:20:24 +08:00
1. 标题说 k8s,实测用 k3s 有点标题党,k3s 本身就是为资源紧张的设备设计的,没有刻意优化高并发下的性能
2. k8s 是通过 nodeport 暴露的吗,有没有看过瓶颈在哪?
感觉只剩不足 10%的性能有些夸张,我在生产环境大量使用 k8s 上也没遇到过(默认的 k8s 配置有 20%左右的 rps 损失)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/805677

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX