混沌工程工具:chaosblade在服务器上注入项原理分析(3)

2023-10-10 15:12:27 浏览数 (1)

概述

前面文章,分析了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

待办:

  1. ssh channel用法
  2. --endpoint
  3. -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

设置重点:

  1. 本机网卡
  2. 本地端口
  3. 目标IP
  4. 目标端口

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腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

0 人点赞