混沌工具参数梳理-持续更新
https://chaosblade.io/
https://chaosblade.io/docs
⭕ 初识 blade
命令
先看一下 blade
命令,如下图所示,用法是 blade [command]
,例如 blade check ...
、blade create ...
等
除了不通 Command
各自的用法,命令后还可以加 Flags
,例如 -d
表示 --debug
可帮助我们排查报错、-h
可以输出帮助文档
[root@master ~]# blade -h
An easy to use and powerful chaos engineering experiment toolkit # 易于使用且功能强大的混沌工程实验工具包Usage:blade [command]Available Commands:check Check the environment for chaosbladecreate Create a chaos engineering experimentdestroy Destroy a chaos experimenthelp Help about any commandprepare Prepare to experimentquery Query the parameter values required for chaos experimentsrevoke Undo chaos engineering experiment preparationstatus Query preparation stage or experiment statusversion Print version infoFlags:-d, --debug Set client to DEBUG mode-h, --help help for bladeUse "blade [command] --help" for more information about a command.
通过上方 blade -h
的帮助文档,我们已知 blade
后可以跟 Command
用于执行不通的命令,接下来我们通过 blade version -h
举例
[root@master ~]# blade version -h
Print version info # 打印日志信息Usage: # 用法示例blade version # blade version, 无参Aliases:version, v # 别名 version、vFlags:-h, --help help for version # 可选参数 -h, 查看 blade version 命令的帮助文档Global Flags:-d, --debug Set client to DEBUG mode # 全局参数 -d, 启用 debug 模式
使用效果如下
[root@master ~]# blade v
version: 1.7.4
env: #1 SMP Thu Mar 17 17:08:06 UTC 2022 x86_64
build-time: Wed Jul 3 09:25:20 UTC 2024
接下来我将依次介绍剩余的 blade
命令,check
、 create
、 destroy
、 help
、prepare
、query
、 revoke
、 status
1、blade check
帮助文档
[root@master ~]# blade check -h
Check the environment for chaosblade # 检查chaosblade的环境Usage: # 用法示例blade check # blade check 无参blade check [command] # 亦可 blade check [command] 后面跟一个命令、如下方有java、osAliases:check, k # 别名 check、hExamples:
check os # 示例 check osAvailable Commands: # 可用命令,可以替代填写在 Usage 的 [command] java Check the environment of java for chaosbladeos Check the environment of os for chaosbladeFlags: # 参数 -h 查看帮助文档-h, --help help for checkGlobal Flags: # 全局参数 -d 开启 debug 模式-d, --debug Set client to DEBUG modeUse "blade check [command] --help" for more information about a command.
使用示例
[root@master ~]# blade check os
[success] cpu fullload, success! `taskset` command exists
[success] men load, success! `mount` command exists
[success] men load, success! `umount` command exists
[success] network delay, success! `tc` command exists
[success] network drop, success! `iptables` command exists
[success] network dns, success! `set` command exists
[success] network loss, success! `tc` command exists
[success] network duplicate, success! `tc` command exists
[success] network corrupt, success! `tc` command exists
[success] network reorder, success! `tc` command exists
[success] network occupy, success! `ss` command exists
[failed] create disk burn --read true, exec failed! create err: 3b1c0c488a488475
[failed] create disk burn --write true, exec failed! create err: 6733b991e945a359
------------summary----------+------------+-----------+---------+--------------------------------+
| EXPERIMENT | COMMAND | RESULT | INFO |
+------------+-----------+---------+--------------------------------+
| cpu | fullload | success | `taskset` command exists |
+------------+-----------+---------+--------------------------------+
| men | load | success | `mount` command exists |
+ +-----------+---------+--------------------------------+
| | load | success | `umount` command exists |
+------------+-----------+---------+--------------------------------+
| network | delay | success | `tc` command exists |
+ +-----------+---------+--------------------------------+
| | drop | success | `iptables` command exists |
+ +-----------+---------+--------------------------------+
| | dns | success | `set` command exists |
+ +-----------+---------+--------------------------------+
| | loss | success | `tc` command exists |
+ +-----------+---------+--------------------------------+
| | duplicate | success | `tc` command exists |
+ +-----------+---------+--------------------------------+
| | corrupt | success | `tc` command exists |
+ +-----------+---------+--------------------------------+
| | reorder | success | `tc` command exists |
+ +-----------+---------+--------------------------------+
| | occupy | success | `ss` command exists |
+------------+-----------+---------+--------------------------------+
| disk | burn | failed | create disk burn --read true, |
| | | | exec failed! create err: |
| | | | 3b1c0c488a488475 |
+ +-----------+---------+--------------------------------+
| | burn | failed | create disk burn --write |
| | | | true, exec failed! create err: |
| | | | 6733b991e945a359 |
+------------+-----------+---------+--------------------------------+
同时我们经过 blade check os -h
可知,后面还能跟命令,如下
blade check [command]
-
os
cpu
(Cpu experiment
)fullload
(Cpu load
)
disk
(Check disk experiment
)burn
(Increase disk read and write io load
)
men
(Mem experiment
)load
(mem load
)
network
(Network experiment
)corrupt
(Corrupt experiment
)delay
(Delay experiment
)dns
(Dns experiment
)drop
(Drop experiment
)duplicate
(Duplicate experiment
)loss
(Loss network package
)occupy
(Occupy the specify port
)reorder
(Reorder experiment
)
-
java
blade check os
blade check os cpu
blade check os cpu fullload
blade check os disk
blade check os disk burn
blade check os men
blade check os men load
blade check os network
blade check os network corrupt
blade check os network delay
blade check os network dns
blade check os network drop
blade check os network duplicate
blade check os network loss
blade check os network occupy
blade check os network reorder
2、blade create
帮助文档
[root@master ~]# blade create -h
Create a chaos engineering experimentUsage:blade create [command]Aliases:create, cExamples:
blade create cpu load --cpu-percent 60Available Commands:aliyun Aliyun experimentaws Aws experimentck Clickhouse experimentcplus C++ chaos experimentscpu Cpu experimentcri CRI experimentdisk Disk experimentdruid Experiment with the Druiddubbo Experiment with the Dubboes ElasticSearch experiment!feign feign experimentfile File experimentgateway gateway experiment!hbase hbase experiment!hdfs HDFS Chaos Experiment Plugin.http http experimentjedis jedis experimentjvm Experiment with the JVMk8s Kubernetes experimentkafka kafka experimentlettuce redis client lettuce experimentlog log experimentmem Mem experimentmongodb MongoDB experimentmysql mysql experimentnetwork Network experimentnginx Nginx experimentprocess Process experimentpsql Postgrelsql experimentrabbitmq rabbitmq experimentredis Redis experimentredisson redisson experimentrocketmq Rocketmq experiment,can make message send or pull delay and exceptionscript Script chaos experimentsecurity SpringSecurity login experimentservlet java servlet experimentstrace strace experimentsystemd Systemd experimenttars tars experimenttime Time experimentzk zk experimentFlags:-a, --async whether to create asynchronously, default is false-e, --endpoint string the create result reporting address. It takes effect only when the async value is true and the value is not empty-h, --help help for create-n, --nohup used to internal async create, no need to config--uid string Set Uid for the experiment, adapt to docker and criGlobal Flags:-d, --debug Set client to DEBUG modeUse "blade create [command] --help" for more information about a command.
使用示例
例如我们输入一个不存在的 k8s time
,它会给出 blade create k8s
的帮助文档
[root@master ~]# blade create k8s time --help
Kubernetes experiment, for example kill podUsage:blade create k8s [flags]blade create k8s [command]Available Commands:container-ck Clickhouse experimentcontainer-container Execute a container experimentcontainer-cpu Cpu experimentcontainer-disk Disk experimentcontainer-druid Experiment with the Druidcontainer-dubbo Experiment with the Dubbocontainer-es ElasticSearch experiment!container-feign feign experimentcontainer-file File experimentcontainer-gateway gateway experiment!container-hbase hbase experiment!container-hdfs HDFS Chaos Experiment Plugin.container-http http experimentcontainer-jedis jedis experimentcontainer-jvm Experiment with the JVMcontainer-kafka kafka experimentcontainer-lettuce redis client lettuce experimentcontainer-log log experimentcontainer-mem Mem experimentcontainer-mongodb MongoDB experimentcontainer-mysql mysql experimentcontainer-network Network experimentcontainer-process Process experimentcontainer-psql Postgrelsql experimentcontainer-rabbitmq rabbitmq experimentcontainer-redisson redisson experimentcontainer-rocketmq Rocketmq experiment,can make message send or pull delay and exceptioncontainer-script Script chaos experimentcontainer-security SpringSecurity login experimentcontainer-servlet java servlet experimentcontainer-tars tars experimentcontainer-zk zk experimentnode-cpu Cpu experimentnode-disk Disk experimentnode-file File experimentnode-mem Mem experimentnode-network Network experimentnode-process Process experimentnode-script Script chaos experimentpod-cpu Cpu experimentpod-disk Disk experimentpod-file File experimentpod-mem Mem experimentpod-network Network experimentpod-pod Pod experimentspod-process Process experimentpod-script Script chaos experimentFlags:-h, --help help for k8s--kubeconfig string kubeconfig file--waiting-time string Waiting time for invoking, default value is 20sGlobal Flags:-a, --async whether to create asynchronously, default is false-d, --debug Set client to DEBUG mode-e, --endpoint string the create result reporting address. It takes effect only when the async value is true and the value is not empty-n, --nohup used to internal async create, no need to config--uid string Set Uid for the experiment, adapt to docker and criUse "blade create k8s [command] --help" for more information about a command.
😒 太多了,create
这块用到哪个看哪个吧。。。
3、blade distroy
帮助文档
[root@master ~]# blade destroy -h
Destroy a chaos experiment by experiment uid which you can run status command to queryUsage:blade destroy UIDblade destroy [command]Aliases:destroy, dExamples:# Destroy experiment
blade destroy 47cc0744f1bb# Force delete kubernetes experiment
blade destroy 47cc0744f1bb --target k8s --kubeconfig ~/.kube/config --force-removeAvailable Commands:aliyun Aliyun experimentaws Aws experimentck Clickhouse experimentcplus C++ chaos experimentscpu Cpu experimentcri CRI experimentdisk Disk experimentdruid Experiment with the Druiddubbo Experiment with the Dubboes ElasticSearch experiment!feign feign experimentfile File experimentgateway gateway experiment!hbase hbase experiment!hdfs HDFS Chaos Experiment Plugin.http http experimentjedis jedis experimentjvm Experiment with the JVMk8s Kubernetes experimentkafka kafka experimentlettuce redis client lettuce experimentlog log experimentmem Mem experimentmongodb MongoDB experimentmysql mysql experimentnetwork Network experimentnginx Nginx experimentprocess Process experimentpsql Postgrelsql experimentrabbitmq rabbitmq experimentredis Redis experimentredisson redisson experimentrocketmq Rocketmq experiment,can make message send or pull delay and exceptionscript Script chaos experimentsecurity SpringSecurity login experimentservlet java servlet experimentstrace strace experimentsystemd Systemd experimenttars tars experimenttime Time experimentzk zk experimentFlags:--force-remove Force remove chaosblade resource or record even if destroy experiment failed-h, --help help for destroy--kubeconfig string The config file of kubernetes cluster. Used to destroy creating k8s experiments without using blade command--target string Specify experiment target, such as --target k8s. Used to destroy creating k8s experiments without using blade command--uid string Set Uid for the experiment, adapt to containerGlobal Flags:-d, --debug Set client to DEBUG modeUse "blade destroy [command] --help" for more information about a command.
总而言之,后面跟 uid
或者跟命令 Command
使用示例
[root@master ~]# blade create network dns --domain www.baidu.com --ip 10.0.0.0
{"code":200,"success":true,"result":"98f4786bd8562266"}
[root@master ~]# blade d 98f4786bd8562266
{"code":200,"success":true,"result":{"target":"network","action":"dns","flags":{"domain":"www.baidu.com","ip":"10.0.0.0"},"ActionProcessHang":false}}
[root@master ~]# blade create network dns --domain www.baidu.com --ip 10.0.0.0
{"code":200,"success":true,"result":"debf669b9fb46c4d"}
[root@master ~]# blade d network dns --domain www.baidu.com --ip 10.0.0.0
{"code":200,"success":true,"result":{"target":"network","scope":"host","action":"dns","flags":{"blade-release":"","channel":"","domain":"www.baidu.com","endpoint":"","install-path":"","ip":"10.0.0.0","kubeconfig":"","ssh-host":"","ssh-key":"","ssh-port":"","ssh-user":"","target":"","timeout":"","uid":""},"ActionProcessHang":false}}
注:只能一个一个删,没有命令直接删所有,可以写脚本批量删除。
4、blade help
效果等同于 blade -h
, 开篇已说明,此处不再赘述。
5、blade prepare
blade prepare
是在目标 Pod
(或容器)中 注入 ChaosBlade Agent(混沌执行代理) 的过程
blade revoke
是 回收这个代理资源、清除标记和注入内容 的过程。
帮助文档
[root@master ~]# blade prepare -h
Prepare to experiment, for example, attach agent to java process or deploy agent to kubernetes cluster.Usage:blade prepareblade prepare [command]Aliases:prepare, pExamples:
prepare jvm --process tomcatAvailable Commands:cplus Active cplus agent.jvm Attach a type agent to the jvm processFlags:-h, --help help for prepareGlobal Flags:-d, --debug Set client to DEBUG modeUse "blade prepare [command] --help" for more information about a command.
使用示例
[root@master ~]# blade prepare jvm --process mysql-delay-1.0-SNAPSHOT.jar
{"code":200,"success":true,"result":"759b0ad398c53c41"}
6、blade query
帮助文档
[root@master ~]# blade query -h
Query the parameter values required for chaos experimentsUsage:blade query TARGET TYPEblade query [command]Aliases:query, qExamples:
query network interfaceAvailable Commands:disk Query disk informationjvm Query hit counts of the specify experimentk8s Query status of the specify experiment by uidnetwork Query network informationFlags:-h, --help help for queryGlobal Flags:-d, --debug Set client to DEBUG modeUse "blade query [command] --help" for more information about a command.
使用示例
# 查询网卡名称
blade q net interface
# 查询磁盘挂载点
blade q disk mount-point
# 查询磁盘设备列表(the device argument not found)
blade q disk device
# 查询指定实验的点击次数
[root@master ~]# blade q jvm c6b266d13ce72d13
{"code":63064,"success":false,"error":"`http://127.0.0.1:34659/sandbox/chaosblade/module/http/chaosblade/status?suid=c6b266d13ce72d13`: http cmd failed, err: Get \"http://127.0.0.1:34659/sandbox/chaosblade/module/http/chaosblade/status?suid=c6b266d13ce72d13\": dial tcp 127.0.0.1:34659: connect: connection refused"}
7、blade revoke
帮助文档
blade prepare
是在目标 Pod
(或容器)中 注入 ChaosBlade Agent(混沌执行代理) 的过程
blade revoke
是 回收这个代理资源、清除标记和注入内容 的过程。
[root@master ~]# blade revoke -h
Undo chaos engineering experiment preparationUsage:blade revoke