概述
前面文章,分析了chaos-mesh在服务器上注入项的原理,本文继续分析chaosblade在服务器上注入项原理,实际他们的思路还是比较一致的,只是实现的路径不太一样。
混沌工程工具系列传送门:
1、 混沌工程工具:Chaos-mesh与Chaosblade技术实现与原理分析(1)-腾讯云开发者社区-腾讯云
2、 混沌工程工具:chaos-mesh注入项原理分析(2)-腾讯云开发者社区-腾讯云
3、 混沌工程工具:chaosblade在服务器上注入项原理分析(3)-腾讯云开发者社区-腾讯云
4、 混沌工程工具:业务代码注入原理(4)-腾讯云开发者社区-腾讯云
5、 混沌工程工具:Chaosblade Java业务代码注入原理(5)-腾讯云开发者社区-腾讯云
6、 混沌工程工具:混沌工程实施过程及持久价值(7)-腾讯云开发者社区-腾讯云
7、 混沌工程工具:混沌工程定位及原则梳理(8)-腾讯云开发者社区-腾讯云
8、 混沌工程工具:一个混沌工程设计的例子(9)-腾讯云开发者社区-腾讯云
环境相关指令
blade prepare / blade revoke
实验相关指令
blade create/destroy
blade status
其他指令
blade check/query
blade server
blade version
服务器上的混沌
概述
blade check os,检查操作系统是否满足混沌工程环境
CPU
原理:利用消耗CPU时间片来做
所有CPU 100%
blade create cpu fullload
blade status --status Success --type create
所有CPU核心 60%
create cpu load --cpu-percent 60
整体负载120(2*60)均分在设备所有核心
blade create cpu load --cpu-percent 60 --cpu-count 2
核心1,2,3负载60%
blade create cpu load --cpu-percent 60 --cpu-list 1-3
待办:
- ssh channel用法
- --endpoint
- -timeout 指定blade运行时长
MEM
原理:ram 模式采用代码申请内存实现 cache 模式采用 dd、mount 命令实现,挂载 tmpfs 并且进行文件填充
blade c mem load --mode ram --mem-percent 50
blade c mem load --mode ram --reserve 500
Disk
io利用率
用途:磁盘 io 高负载下对系统服务的影响,比如监控告警、服务稳定性等。
原理:使用dd命令实现
利用率到100%
blade create disk burn --read
blade create disk burn --write
空间利用率
用途:验证磁盘满下对系统服务的影响,比如监控告警、服务稳定性等。
原理:使用 fallocate、dd 命令实现
blade create disk fill --percent 99
待办:
--retain-handle是做什么的
Network
说明
本地端口和远程端口之间是或的关系,即这两个端口都会发生丢包,只要指定了本地端口或者远程端口,无需指定需要排除的端口。端口与 IP 之间是与的关系,即指定的 IP:PORT 发生丢包
实验时,切记要添加 --timeout 参数或者 --exclude-port 参数,前者是指定运行时间,自动停止销毁实验,后者是指定排除掉不受影响的端口,两者都是防止机器无法连接的情况delay
全局延迟
blade create network delay --time 50 --offset 100 --interface eth0
全局延迟排除本地端口22,80,8000到8080
blade create network delay --time 50 --offset 100 --interface eth0 --exclude-port 22,80,8000-8080
目标IP114.114.114.114 全局延迟
blade create network delay --interface eth0 --time 50 --offset 100 --destination-ip 114.114.114.114
全局延迟排除目标IP114.114.114.114
blade create network delay --interface eth0 --time 50 --offset 100 --exclude-ip 114.114.114.114
本地端口22全局延迟
blade create network delay --interface eth0 --local-port 22 --time 100
远端端口443全局延迟
blade create network delay --time 3000 --interface eth0 --remote-port 443
设置重点:
- 本机网卡
- 本地端口
- 目标IP
- 目标端口
dns
blade create network dns --domain www.baidu.com --ip 10.0.0.0
原理:修改 /etc/hosts
loss
blade create network loss --percent 60 --interface eth0 --exclude-port 22,8000-8080
注意:相比delay,多了一个percent参数
corrupt
blade create network corrupt --percent 80 --destination-ip 180.101.49.12 --interface eth0
reorder
blade c network reorder --correlation 80 --percent 50 --gap 2 --time 500 --interface eth0 --destination-ip 180.101.49.12
duplicate
blade create network duplicate --interface eth0 --exclude-port 22 --percent 80
occupy
blade c network occupy --port 8080 --force
process
原理: --process 内部使用 ps -ef | grep KEY 查找;--process-cmd 内部使用 pgrep 命令查找。kill -STOP PIDS 暂停进程,使用 kill -CONT PIDS 恢复进程
stop暂停进程;kill杀掉进程
blade create process kill --process-cmd ntpd
blade create process stop --process-cmd ntpd
shell
延迟
原理:备份原有脚本,根据函数名添加 sleep 命令
# blade create script delay --time 10000 --file test.sh --function-name start0
{"code":200,"success":true,"result":"b6a0f477b7fb1f4c"}
# blade会在脚本中自动添加如下命令:
start0() {
sleep 10.000000
...
}
退出
备份原有脚本,根据函数名添加 echo 和 exit 命令。回复时还原脚本。
# blade create script exit --exit-code 1 --exit-message this-is-error-message --file test.sh --function-name start0
{"code":200,"success":true,"result":"d8a016b96380d7f3"}
# 执行脚本会触发场景。查看脚本修改如下:
start0() {
echo this-is-error-message;exit 1
...
}
docker
docker场景还支持下面参数
代码语言:javascript复制--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
删除container
blade create docker container remove --container-id 6f5a0de906d3
高负载
/usr/local/chaosblade/blade create docker cpu fullload --container-id 29e54c4fbd13 --blade-tar-file chaosblade-1.2.0-linux-amd64.tar.gz
blade create docker cpu fullload --container-id 82ec2d97c1c4 --image-repo registry.cn-hangzhou.aliyuncs.com/chaosblade/chaosblade-tool --image-version 1.2.0
- -blade-tar-file 需指定二进制文件
- blade status --status Success --type create
坑点
blade-tar-file默认在/opt/下查找;
要挂载本地盘
删除container后,任务仍然存在,还没停,设计未闭环
K8S
node
cpu
blade create k8s node-cpu fullload --names cn-hangzhou.192.168.0.205 --cpu-percent 80 --kubeconfig ~/.kube/config
network
delay/loss/dns等,与主机的一致
blade create k8s node-network loss --percent 60 --interface eth0 --names sigezhao-tke-worker1 --kubeconfig ~/.kube/config
disk
同主机disk
process
blade create k8s node-process kill --process rsyslogd --names sigezhao-tke-worker1 --kubeconfig ~/.kube/config
pod
删除pod
blade create k8s pod-pod delete --namespace default --names kubernetes-bootcamp-76594b5ddc-2vqpd --kubeconfig ~/.kube/config
fail pod
blade create k8s pod-pod fail --namespace default --names kubernetes-bootcamp-76594b5ddc-cg6c8 --kubeconfig ~/.kube/config
控制台界面看到pod一直是异常状态,重建也不成功;执行destroy后,则会终止当前pod,创建新pod
IO
blade create k8s pod-pod IO --method read --delay 1000 --path /home --percent 60 --errno 28 --labels "app=test" --namespace default
Network
同基础资源network场景
blade create k8s pod-network delay --time 2000 --namespace default --names kubernetes-bootcamp-76594b5ddc-w84zx --interface eth0 --kubeconfig ~/.kube/config
container
cpu高负载
blade create k8s container-cpu load --cpu-percent 100 --container-ids 877199c6f7d8 --names kubernetes-bootcamp-76594b5ddc-27zz6 --namespace default --kubeconfig ~/.kube/config
我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表