前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >混沌工程工具:chaosblade在服务器上注入项原理分析(3)

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

原创
作者头像
AIOPS
修改2023-10-10 15:12:27
7301
修改2023-10-10 15:12:27
举报
文章被收录于专栏:高可用高可用

概述

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 混沌工程工具系列传送门:
  • 环境相关指令
  • 实验相关指令
  • 其他指令
  • 服务器上的混沌
  • 概述
    • 所有CPU 100%
      • 所有CPU核心 60%
        • 整体负载120(2*60)均分在设备所有核心
          • 核心1,2,3负载60%
            • MEM
              • Disk
                • io利用率
                • 空间利用率
              • Network
                • 说明
                • dns
                • loss
                • corrupt
                • reorder
                • duplicate
                • occupy
              • process
                • shell
                  • 延迟
                  • 退出
                • docker
                  • 删除container
                  • 高负载
                • K8S
                  • node
                  • network
                  • disk
                  • process
                  • pod
                  • Network
                  • container
              相关产品与服务
              混沌演练平台
              混沌演练平台(Chaotic Fault Generator)提供高效便捷、安全可靠的故障演习服务,除可视化故障注入服务外,还提供行业经验模板,监控护栏等核心功能,致力于帮助用户及时发现业务容灾隐患、验证高可用预案的有效性,从而提高系统的可用性和韧性。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档