Skip to content

v1.3.0 版本特性介绍

xcaspar edited this page Aug 26, 2021 · 4 revisions

基础资源场景

新增 systemd stop 场景

$ blade c systemd stop --service docker
{"code":200,"success":true,"result":"a6da606fbcdea2cb"}

$ docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

优化内存实验场景

新增 --avoid-being-killed参数来控制占用内存的进程是否被杀死,通过调整进程优先级来实现。适用于内存100%的场景。

Java 实验场景

创建实验时支持 javaHome 配置

可以通过 --javaHome参数指定 JAVA_HOME 路径,用于挂载 java agent。

blade c jvm cpufullload --javaHome /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home --process tomcat

创建实验时重新挂载探针

从 v1.2.0 版本开始,无需先执行 prepare jvm 挂载探针操作,直接执行 create 操作会先判断探针是否挂载,没有挂载会重新挂载探针,v1.3.0版本新增 -refresh参数,添加此参数会每次都会重新挂载探针,适用于探针更新时使用

blade c jvm cpufullload --process tomcat --refresh 

新增 jvm fullgc 场景

需要特别注意 --interval 参数是必填项

blade c jvm full-gc --process spring --effect-count 5 --interval 1000
{"code":200,"success":true,"result":"2ee474df48fe5f85"}

image

新增 spring cloud gateway 实验场景

支持指定请求延迟或抛异常

blade create gateway delay --requestPath /consumer/hello --time 20000
blade create gateway throwCustomException --exception java.lang.Exception --requestPath /consumer/hello

image

新增 logback 实验场景

支持 logback 日志记录延迟或抛异常

blade create log delay --logback --time 1000 --effect-count 100

blade create log throwCustomException --logback --exception java.lang.NullPointException

支持 http 插件超时场景

使用 http 请求延迟时,如果配置的延迟时间大于系统服务的超时时间,则会触发请求超时异常。

servlet 插件支持正则表达式

通过正则表达式匹配请求

./blade create servlet modifyCode --code 500 --requestpath-regex-pattern /greeting/2*
./blade create servlet modifyCode --code 500 --querystring-regex-pattern name=1*

支持 Dubbo、Http 演练场景调用方匹配,控制实验范围

通过 --call-point 参数控制,服务名和方法之间使用|分隔。

blade create http delay --time 500 --uri http://api.bservice.xxx.com/api/user/list --call-point com.xxx.service.AService|a1Method

修复 Dubbo 泛型方法调用问题

dubbo matchers: {"matchers":{"appname":"test_provider","service":"com.test.provider.api.DubboTestService","version":"1.0.0","group":"test","methodname":"testDubbo","timeout":"3000"}}

Kubernetes 实验场景

增强安装时配置参数 daemonset.enable

daemonset.enable 是控制是否部署 chaosblade-tool daemonset,此 daemonset 目前进展 docker 容器下起作用,作用如下:

  1. 解决演练的目标容器中没有 tc 命令问题
  2. 支持节点演练

如果没有以上需求,可以将其设置为 false,即在使用 helm 安装时配置 daemonset.enable=false 此版本增强了此参数,在 1.3.0 版本之前,chaosblade-tool 的部署是通过 chaosblade operator 来控制部署,当前版本是单独出一个 yaml 文件部署,方便修改部署参数,支持指定节点部署。 ​

演练 Pod、Container 目标时新增 chaosblade-deploy-mode参数

chaosblade-deploy-mode参数控制演练工具部署模式,取值有 downloadcopy,默认是 copy。 copy 类似于 kubectl cp 命令,但如果同时演练机器数量多时,会对 apiserver 造成一定的负载压力,适用于小规模演练。download 是在容器内执行 curl 命令下载工具,需要配置文件下载地址,即使在大规模演练下对 apiserver 的影响有限。

  • copy: 从 chaosblade-operator 容器中拷贝所需工具到目标容器。
  • download: 从指定的 url 中下载所需工具到目标容器。需要配置 chaosblade-download-url参数或者在部署 chaosblade-operator 时指定 blade.downloadUrl 配置。需要注意文件目录和文件名应如下,应保持如下目录:
.
├── bin
├── blade
├── lib.tar.gz
└── yaml.tar.gz
  • bin:存放基础资源实验工具
  • blade: chaosblade cli 工具
  • lib.tar.gz:lib 文件压缩包
  • yaml.tar.gz:yaml 文件压缩包

部署规则:

  • 先判断 --chaosblade-override参数是否为true,如果是,即使文件已存在,也会重新部署所需文件;
  • 根据 --chaosblade-path参数(默认为 /opt),判断 chaosblade 目录是否存在,不存在,则创建;
  • 判断 chaosblade/blade 文件是否存在,不存在则copy 或下载;
  • 判断 chaosblade/yaml 目录是否存在,不存在则copy 或下载 yaml.tar.gz 并解压;
  • 判断 chaosblade/bin/chaos_os 文件是否存在,不存在则copy 或下载;
  • 根据实验场景下载所需要的其他文件:
    • 如果是 Java,则判断 chaosblade/lib 目录是否存在,不存在则copy或者下载lib.tar.gz 并解压
    • 如果是网络实验,则判断 chaosblade/bin/chaos_tcnetwork 文件是否存在,不存在则copy或下载。
    • 依次类推。

使用默认方式

blade c k8s pod-cpu fullload --names logtail-ds-gzd72 --namespace kube-system -d --kubeconfig ~/.kube/config                     
{"code":200,"success":true,"result":"5bf33579c3f768ee"}

使用 download 模式

blade c k8s pod-cpu fullload --chaosblade-deploy-mode download --chaosblade-download-url https://chaosblade.oss-xxx.aliyuncs.com/agent/github/1.3.0 --names logtail-ds-gzd72 --namespace kube-system -d --kubeconfig ~/.kube/config                     
{"code":200,"success":true,"result":"dcdf0a13814fcacc"}

部署 operator 时指定下载地址

helm install chaosblade-operator chaosblade-operator-1.3.0-v3.tgz --namespace chaosblade --set blade.downloadUrl=https://chaosblade.oss-xxxxx.aliyuncs.com/agent/github/1.3.0  

支持重新部署 chaosblade 工具到容器

创建实验时添加 --chaosblade-override参数,会重新部署工具到目标容器,适用于工具更新时使用。

上述新增的场景,kubernetes 也支持

解决Pod、Container 网络场景恢复失败问题

v1.2.0及之前版本是通过 containerId 来查找演练容器,如果网络不可访问,容器会被重建,containerId 发生改变,所以导致恢复失败,v1.3.0 版本内部使用 container name 来查找。

磁盘IO演练支持 alpine 容器

其他

实验查询支持 action 和 flag 参数

blade s --type c --action stop
{
	"code": 200,
	"success": true,
	"result": [
		{
			"Uid": "a6da606fbcdea2cb",
			"Command": "systemd",
			"SubCommand": "stop",
			"Flag": " --service=docker",
			"Status": "Success",
			"Error": "",
			"CreateTime": "2021-08-05T11:07:05.373964934+08:00",
			"UpdateTime": "2021-08-05T11:07:06.615654415+08:00"
		}
	]
}
blade s --type c --flag-filter service
{
	"code": 200,
	"success": true,
	"result": [
		{
			"Uid": "a6da606fbcdea2cb",
			"Command": "systemd",
			"SubCommand": "stop",
			"Flag": " --service=docker",
			"Status": "Success",
			"Error": "",
			"CreateTime": "2021-08-05T11:07:05.373964934+08:00",
			"UpdateTime": "2021-08-05T11:07:06.615654415+08:00"
		}
	]
}