【性能测试】ChaosTesting(混沌测试)&ChaosBlade(混沌实验工具)(三)-docker容器混沌实验

4. 创建docker相关的混沌实验

4.0 介绍

创建 docker 相关的混沌实验,比如杀容器,容器网络延迟、丢包,杀容器里的进程等,不同的场景依赖的参数不同,目前支持以下实验场景:

  1. [blade create docker container](blade create docker container.md) 容器自身场景,比如杀容器
  2. [blade create docker cpu](blade create docker cpu.md) 容器内 CPU 负载场景
  3. [blade create docker network](blade create docker network.md) 容器内网络场景
  4. [blade create docker process](blade create docker process.md) 容器内进程场景

执行 docker 相关实验场景,必须确保本地能访问 docker server,可通过 tcp 或 socket 方式访问,默认是通过本地 socket 访问,也可通过 --docker-endpoint 参数指定。

很重要的一点是,如果执行 CPU 场景,必须指定 chaosblade 安装包,因为需要将安装包拷贝到容器 /opt 目录下执行,使用 --blade-tar-file 参数指定,例如 --blade-tar-file /home/admin/chaosblade-0.4.0.tar.gz。如果执行网络或者进程场景,无需指定,但这两个场景依赖 chaosblade-tool 镜像,默认是从 registry.cn-hangzhou.aliyuncs.com/chaosblade 仓库下载,也可以通过 --image-repo 参数指定,例如 --image-repo registry-vpc.cn-hangzhou.aliyuncs.com/chaosblade

Q: {“code”:801,“success”:false,“error”:“Error: No such image: xxx/chaosblade-tool:0.4.0”}
A: 说明 chaosblade-tool 镜像拉取失败,需要通过 --image-repo 指定正确的镜像仓库地址

4.1 docker容器内 CPU 负载实验场景

4.1.1 介绍

容器内 CPU 负载实验场景,同基础资源的 CPU 场景

4.1.2 命令

支持 CPU 场景命令如下:
blade create docker cpu load 容器内 CPU 负载场景,同 [blade create cpu load](blade create cpu load.md)

4.1.3 参数

除了上述基础场景各自所需的参数外,在 docker 环境下,还支持的参数如下:

–blade-override: 是否覆盖容器内已有的 chaosblade 工具,默认是 false,表示不覆盖,chaosblade 在容器内的部署路径为 /opt/chaosblade
–blade-tar-file string: 指定本地 chaosblade-VERSION.tar.gz 工具包全路径,用于拷贝到容器内执行
–container-id string: 目标容器 ID
–docker-endpoint string: Docker server 地址,默认为本地的 /var/run/docker.sock

4.1.4 示例

# 1. 对 container id 是 5239e26f6329 的做 CPU 使用率 80% 的实验场景,执行命令如下:
 blade create docker cpu fullload --cpu-percent 80 --blade-tar-file /root/chaosblade-0.4.0.tar.gz --container-id 5239e26f6329
 
# 执行成功会返回 
{"code":200,"success":true,"result":"0a47bb2f75dc71ab"} 

# 可在本机或者容器内使用 top 命令验证 CPU 使用率:
%Cpu(s): 22.7 us, 57.2 sy,  0.0 ni, 20.1 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

# 销毁实验执行以下命令:
blade destroy 0a47bb2f75dc71ab

4.1.5 常见问题

Q: 执行报如下错误:{“code”:801,“success”:false,“error”:“\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000Omv: cannot stat ‘/opt/chaosblade-0.4.0.linux-amd64’: No such file or directory”}
A: 需要修改将 chaosblade-0.4.0.linux-amd64.tar.gz 包名改为 chaosblade-VERSION.tar.gz 格式,即此处改为 chaosblade-0.4.0.tar.gz

Q: 执行报如下错误: {“code”:801,“success”:false,“error”:“\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000”}
A: 重试即可

4.2 docker容器内网络实验场景

4.2.1 介绍

容器内网络实验场景,同基础资源的网络场景

4.2.2 命令

支持的网络场景命令如下:

  1. blade create docker network delay 容器网络延迟,同 [blade create network delay](blade create network delay.md)
  2. blade create docker network loss 容器网络丢包,同 [blade create network loss](blade create network loss.md)
  3. blade create docker network dns 容器内域名访问异常,同 [blade create network dns](blade create network dns.md)

4.2.3 参数

除了上述基础场景各自所需的参数外,在 docker 环境下,还支持的参数如下:

–container-id string: 目标容器 ID
–docker-endpoint string: Docker server 地址,默认为本地的 /var/run/docker.sock
–image-repo string: chaosblade-tool 镜像仓库地址,默认是从 registry.cn-hangzhou.aliyuncs.com/chaosblade

4.2.4 示例

# 对 nginx 容器 80 端口做访问延迟 3 秒,执行命令如下:
blade create docker network delay --time 3000 --interface eth0 --local-port 80 --container-id 5239e26f6329

# 第一次会拉取 chaosblade-tool 镜像,可能会慢一些。回
{"code":200,"success":true,"result":"fc3a1b0b4295e47f"} 

# 表示执行成功,可以看到新启动了一个名字为 5239e26f6329-delay 的容器,通过 sidecar 方式,复用目标容器网络,执行实验。
# 在本机访问该容器映射出的端口服务,比如映射的端口为 0.0.0.0:32768->80/tcp,可以看出发生延迟:
[root@izbp11rrxxxx ~]# time curl localhost:32768
real	0m9.001s
user	0m0.004s
sys	0m0.002s
# 此处延迟 9 秒的原因是涉及到多次 80 端口访问。

# 也可以在同一网段下的另外一台容器内访问目标容器的 80 服务,同样能验证效果:
bash-4.4# time curl 172.17.0.2:80
real	0m9.005s
user	0m0.004s
sys	0m0.001s

# 执行以下命令可销毁实验:
blade destroy fc3a1b0b4295e47f
启动的 sidecar 容器会被销毁,网络恢复。可以通过上述方法再次验证。

[root@izbp11rr7oumxxxxx ~]# time curl localhost:32768
real	0m0.011s
user	0m0.003s
sys	0m0.002s

4.2.5 常见问题

Q: 执行命令报错: {“code”:604,“success”:false,“error”:“RTNETLINK answers: File exists\n exit status 2 exit status 1”}
A: 网络演练场景已存在,可以使用 docker ps | grep chaosblade 来查看正在运行的 sidecar 容器

4.3 资源进程场景

4.3.1 介绍

容器内进程场景,同基础资源进程场景

4.3.2 命令

支持的进程场景如下:

  1. blade create docker process kill, 杀容器内指定的进程,同 [blade create process kill](blade create process kill.md)
  2. blade create docker process stop,挂起容器内指定的进程,同 [blade create process stop](blade create process stop.md)

4.3.3 参数

除了上述基础场景各自所需的参数外,在 docker 实验场景下还支持的参数是:
–blade-override: 是否覆盖容器内已有的 chaosblade 工具,默认是 false,表示不覆盖,chaosblade 在容器内的部署路径为 /opt/chaosblade
–blade-tar-file string: 指定本地 chaosblade-VERSION.tar.gz 工具包全路径,用于拷贝到容器内执行
–container-id string: 目标容器 ID
–docker-endpoint string: Docker server 地址,默认为本地的 /var/run/docker.sock

4.3.4 案例

# 杀掉容器内 nginx 进程,命令执行如下:
blade create docker process kill --process nginx --blade-tar-file /root/chaosblade-0.4.0.tar.gz --container-id ee54f1e61c08

4.3.5 常见问题

Q: {“code”:801,“success”:false,“error”:“open : no such file or directory”}
A: 没有指定 --blade-tar-file 参数
Q:{“code”:801,“success”:false,“error”:“\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000”}
A: 重试即可
Q: {“code”:503,“success”:false,“error”:“ps command not found”}
A: 目标容器内没有 ps 命令

4.4 container 资源自身的场景

4.4.1 介绍

此命令主要执行 container 资源自身的场景,比如删容器

4.4.2 命令

支持场景命令如下

  1. blade create docker container remove 删除容器

4.4.3 参数

–container-id string: 要删除的容器 ID
–docker-endpoint string: Docker server 地址,默认为本地的 /var/run/docker.sock
–force: 是否强制删除
删除容器后,执行 blade destroy UID 命令不会恢复容器,需要靠容器自身的管理拉起!

4.4.4 案例

# 删除 container id 是 a76d53933d3f 的容器,命令如下:
blade create docker container remove --container-id a76d53933d3f

# 如果返回 
{"code":200,"success":true,"result":"ed79c686daa88152"} 
# 说明执行成功。如果执行失败,会有详细的错误提升
  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值