赞
踩
创建 docker 相关的混沌实验,比如杀容器,容器网络延迟、丢包,杀容器里的进程等,不同的场景依赖的参数不同,目前支持以下实验场景:
执行 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 指定正确的镜像仓库地址
容器内 CPU 负载实验场景,同基础资源的 CPU 场景
支持 CPU 场景命令如下:
blade create docker cpu load 容器内 CPU 负载场景,同 [blade create cpu load](blade create cpu load.md)
除了上述基础场景各自所需的参数外,在 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
# 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
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: 重试即可
容器内网络实验场景,同基础资源的网络场景
支持的网络场景命令如下:
除了上述基础场景各自所需的参数外,在 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
# 对 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
Q: 执行命令报错: {“code”:604,“success”:false,“error”:“RTNETLINK answers: File exists\n exit status 2 exit status 1”}
A: 网络演练场景已存在,可以使用 docker ps | grep chaosblade 来查看正在运行的 sidecar 容器
容器内进程场景,同基础资源进程场景
支持的进程场景如下:
除了上述基础场景各自所需的参数外,在 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
# 杀掉容器内 nginx 进程,命令执行如下:
blade create docker process kill --process nginx --blade-tar-file /root/chaosblade-0.4.0.tar.gz --container-id ee54f1e61c08
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 命令
此命令主要执行 container 资源自身的场景,比如删容器
支持场景命令如下
–container-id string: 要删除的容器 ID
–docker-endpoint string: Docker server 地址,默认为本地的 /var/run/docker.sock
–force: 是否强制删除
删除容器后,执行 blade destroy UID 命令不会恢复容器,需要靠容器自身的管理拉起!
# 删除 container id 是 a76d53933d3f 的容器,命令如下:
blade create docker container remove --container-id a76d53933d3f
# 如果返回
{"code":200,"success":true,"result":"ed79c686daa88152"}
# 说明执行成功。如果执行失败,会有详细的错误提升
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。