当前位置: 首页 > 工具软件 > Blade > 使用案例 >

chaosblade使用(二十一):blade create docker

吕衡
2023-12-01

1 介绍

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

  • [blade create docker container](blade create docker container.md) 容器自身场景,比如杀容器

  • [blade create docker cpu](blade create docker cpu.md) 容器内 CPU 负载场景

  • [blade create docker network](blade create docker network.md) 容器内网络场景

  • [blade create docker process](blade create docker process.md) 容器内进程场景

2 执行

执行 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

3 场景

3.1 blade create docker cpu

3.1.1 介绍

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

3.1.2 命令

支持 CPU 场景命令如下:

blade create docker cpu load

容器内 CPU 负载场景,同 [blade create cpu load](blade create cpu load.md)

3.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

3.1.4 案例

对 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

3.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:重试即可

3.1.6 兜底方案

登录容器,kill 掉 chaos_burncpu 进程即可,或者主机上执行

3.2 blade create docker network

3.2.1 介绍

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

3.2.2 命令

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

blade create docker network delay

容器网络延迟,同 [blade create network delay](blade create network delay.md)

blade create docker network loss 

容器网络丢包,同 [blade create network loss](blade create network loss.md)

blade create docker network dns

容器内域名访问异常,同 [blade create network dns](blade create network dns.md)

3.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`

3.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

3.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 容器

3.3 blade create docker process

3.3.1 介绍

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

3.3.2 命令

支持的进程场景如下:

blade create docker process kill

 杀容器内指定的进程,同 [blade create process kill](blade create process kill.md)

blade create docker process stop

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

 3.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

3.3.4 案例

杀掉容器内 nginx 进程,命令执行如下:

blade create docker process kill --process nginx --blade-tar-file /root/chaosblade-0.4.0.tar.gz --container-id ee54f1e61c08

3.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 命令

3.4 blade create docker container

3.4.1介绍

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

3.4.2 命令

支持场景命令如下

blade create docker container remove

删除容器

3.4.3 参数

--container-id string 要删除的容器 ID
--docker-endpoint string Docker server 地址,默认为本地的 /var/run/docker.sock
--force 是否强制删除

删除容器后,执行 blade destroy UID 命令不会恢复容器,需要靠容器自身的管理拉起!

3.4.4 案例

删除 container id 是 a76d53933d3f 的容器,命令如下:

blade create docker container remove --container-id a76d53933d3f

如果返回 {"code":200,"success":true,"result":"ed79c686daa88152"} 说明执行成功。如果执行失败,会有详细的错误提升

4 常见问题

Q: {"code":801,"success":false,"error":"Error: No such image: xxx/chaosblade-tool:0.4.0"}

A: 说明 chaosblade-tool 镜像拉取失败,需要通过 --image-repo 指定正确的镜像仓库地址

 类似资料: