作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!


GET 请求

想压测容器环境的服务性能,发现两个麻烦:

  • 本地使用 wrk,由于本地网络和容器服务器很远,压测效果不好;
  • wrk 找不到一个独立的二进制版本可以下载;go-wrk 完全不可用。

然后发现 hub.docker.com 上有 wrk 的镜像。

于是用下面的方法启动容器进行压测:

pod_wrk.yaml

apiVersion: v1
kind: Pod
metadata:
name: wrk
labels:
app.kubernetes.io/name: proxy
spec:
containers:
- name: wrk
image: williamyeh/wrk:4.0.2 # hub.docker.com 上的镜像
command: ["/usr/local/bin/wrk"]
args: ["-t10","-c600","-d120s","--latency","-H","X-Forwarded-proto: http","-H","X-Forwarded-For: 220. xxx.1.xxx,xxxx","-H","Host: 1.a.com","http://xx.xxx.0.71:32101/abc?size=10"]
resources:
requests:
memory: "512Mi"
cpu: "2"
limits:
memory: "2048Mi"
cpu: "2"

然后用下面的方法启动容器:

kubectl apply -f stress_test/pod_wrk.yaml --namespace=my-test-devops

压测时间是 120 秒,过后容器会再次启动。不需要压测的时候可以这样删除:

kubectl delete pods wrk --namespace=my-test-devops

POST 请求

wrk 的 post 请求要用到 Lua。

Lua 的文件内容可以放到 configMap 中。

下面是一个完整的例子:

pod_wrk.yaml

apiVersion: v1  # 第一段建一个  congfigMap
data:
post_json.lua: |
wrk.method = "POST"
wrk.body = "{\"param1\":\"123\",\"param2\":\"456\",\"client_ip\":\"10.xx.0.71\",\"extra_args\":\"\",\"path\":\"\",\"schema\":\"\"}"
wrk.headers["Content-Type"] = "application/json" kind: ConfigMap
metadata:
name: wrk-lua-post-json --- apiVersion: v1 # 第二段建立容器
kind: Pod
metadata:
name: wrk
labels:
app.kubernetes.io/name: wrk
spec:
containers:
- name: wrk
image: williamyeh/wrk:4.0.2
command: ["/usr/local/bin/wrk"]
args: ["-t10","-c500","-d60s","--latency","http://10. xxx.0.71/api/v1/GetURL","-s", "/app/lua/post_json.lua"]
resources:
requests:
memory: "512Mi"
cpu: "4"
limits:
memory: "2048Mi"
cpu: "4"
volumeMounts:
- name: config-volume
mountPath: /app/lua/
volumes:
- name: config-volume
configMap:
name: wrk-lua-post-json

创建 configMap 和容器

kubectl apply -f pod_wrk.yaml --namespace=test-devops

查看压测结果

kubectl logs wrk --namespace=test-devops

一组容器压测

有时候担心单个进程的并发度有限,无法提供足够的压力。这时就可以部署一组容器来压测:

  • Deployment_wrk.yaml
apiVersion: v1
data:
post_json.lua: |
wrk.method = "POST"
wrk.body = "{\"fields\":\"123\",\"field2\":\"456\"}"
wrk.headers["Content-Type"] = "application/json" kind: ConfigMap
metadata:
name: wrk-lua-post-json --- apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: deployment-wrk
name: deployment-wrk
spec:
progressDeadlineSeconds: 600
replicas: 5
revisionHistoryLimit: 10
selector:
matchLabels:
app: deployment-wrk
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: deployment-wrk
spec:
affinity: {}
containers:
- name: wrk
image: williamyeh/wrk:4.0.2
imagePullPolicy: IfNotPresent
command: ["/usr/local/bin/wrk"]
args:
- "-t2"
- "-c100"
- "-d120s"
- "--latency"
- "http://10.xxx.0.71:8080/api/v1/GetList"
- "-s"
- "/app/lua/post_json.lua"
resources:
requests:
memory: "512Mi"
cpu: "1"
limits:
memory: "2048Mi"
cpu: "1"
volumeMounts:
- name: config-volume
mountPath: /app/lua/
volumes:
- name: config-volume
configMap:
name: wrk-lua-post-json
  • replicas 这里启动 5 个容器来压测
  • 创建容器:
    • kubectl apply -f Deployment_wrk.yaml --namespace=test-devops
  • 查看结果,写个稍稍复杂一点的 shell:
    • while true; do (kubectl logs --selector app=deployment-wrk --namespace=test-devops | grep "Requests/sec";sleep 5); done
    • 也可以把所有结果过滤出来,便于统计:kubectl logs --selector app=deployment-wrk --namespace=test-devops | grep "Requests/sec" | awk '{print $2}'

Have fun.

【小实验】使用 wrk 的 docker 容器来压测另一个容器的更多相关文章

  1. docker搭建图片压测QPS3000+服务器(ftp+nginx)

    docker搭建图片压测QPS3000+服务器(ftp+nginx) 在针对图片算法服务进行压力测试时,需要高性能的图片服务器 自己编写的图片应用性能不一定能达到要求 可能因为图片应用自身达不到压测要 ...

  2. docker学习-lnmp+redis之搭建mysql容器服务

    一. 前期准备工作,创建配置文件目录,log文件目录,数据库DATA和WEB站点目录[root@T1 ~]# mkdir -p /lnmp/conf/{mysql,nginx,php} /lnmp/l ...

  3. 入手Docker容器注意事项:命令结束容器退出

    在没有 docker 容器的时候,在终端(terminal)中运行 shell 命令,我们知道当终端退出时(比如关闭终端窗口或退出 ssh 会话),终端中执行的命令也会结束.所以,当我们在终端中执行持 ...

  4. Http压测工具wrk使用指南

    用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持 ...

  5. Http压测工具wrk使用指南【转】

    用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持 ...

  6. wrk 及扩展支持 tcp 字节流协议压测

    wrk 及扩展支持 tcp 字节流协议压测 高性能.方便使用的 HTTP(s) 的流量压测工具,结合了多个开源项目开发而成: redis 的 ae 事件框架 luajit openssl http-p ...

  7. Docker:使用Ambassador进行跨主机间容器通信

    转载请注明出处:点我 由于Docker自身的网络的原因,想要在多主机间的容器之间进行通信是比较麻烦的事情.可以利用Ambassador容器来实现这一功能. 基本原理: 利用Ambassador来实现主 ...

  8. Docker学习笔记之运行和管理容器

    0x00 概述 容器是基于容器技术所建立和运行的轻量级应用运行环境,它是 Docker 封装和管理应用程序或微服务的“集装箱”.在 Docker 中,容器算是最核心的部分了,掌握容器的操作也是 Doc ...

  9. docker,容器,编排,和基于容器的系统设计模式

    目录 从容器说起 背景 docker实现原理 编排之争 基于容器的分布式系统设计之道 单节点协作模式 Sidecar pattern(边车模式) Ambassador pattern(外交官模式) A ...

  10. Docker 实战(3)- 搭建 Gitlab 容器并上传本地项目代码

    如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 搭建 Gitlab 容器 搜索 ...

随机推荐

  1. 专注提升用户体验,Superset 1.3发布!

    近期Superset发布了新的版本1.3.0,此版本专注于提升用户体验.并进行了大量的改进与错误修复. 用户体验 此版本的一个主要目标是改进仪表盘原生过滤器.这些过滤器的级别为仪表盘级别,而不是图表级 ...

  2. 让快更快,火山引擎 ByteHouse 为 ClickHouse 提速

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群   近日,火山引擎数智平台VeDI与DataFun联合举办以"OLAP计算引擎"为主题的直播活 ...

  3. 复杂 A/B 实验如何设计?火山引擎 DataTester 帮你落地!

    数字化转型时代,越来越多企业将目光聚焦于"数据驱动增长"的实践上,A/B 实验则在其中扮演着愈加重要的角色. A/B 实验又称对照试验,但并非人们字面认知的"抛出 A 和 ...

  4. 火山引擎 EMR StarRocks 场景案例分享

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 日前 ,火山引擎数智平台(VeDI)旗下产品 E-MapReduce(简称"EMR")正式上线 ...

  5. PPT 渐变入门

    光圈 线性渐变 路径渐变 案例 一个圆 渐变 二个圆 渐变叠加 加阴影 阴影 金属字体

  6. JavaScript 基础 - Day01

    了解变量.数据类型.运算符等基础概念,能够实现数据类型的转换,结合四则运算体会如何编程. 体会现实世界中的事物与计算机的关系 理解什么是数据并知道数据的分类 理解变量存储数据的"容器&quo ...

  7. L1-046 整除光棍 (20分)

    问题描述 这里所谓的"光棍",并不是指单身汪啦~ 说的是全部由1组成的数字,比如1.11.111.1111等.传说任何一个光棍都能被一个不以5结尾的奇数整除.比如,111111就可 ...

  8. Codeforces Round #687 (Div. 2, based on Technocup 2021 Elimination Round 2) (个人题解)

    Codeforces Round #687 (Div. 2, based on Technocup 2021 Elimination Round 2) A. Prison Break https:// ...

  9. Codeforces Round #690 (Div. 3) (简单题解记录)

    Codeforces Round #690 (Div. 3) 1462A. Favorite Sequence 简单看懂题即可,左边输出一个然后右边输出一个. void solve() { int n ...

  10. poi4版本处理word里表格中的文字换行问题和设置字体样式

    开发中遇到生成word文档的需求,其中里面存在表格,发现表格中一旦存在换行生成的模板就出现各种问题,反正就是出不来想要的结果.网上找了一些方法基本都不好用,最后找到一个靠谱点的方法 XWPFParag ...