实践是知识的母亲,知识是生活的明灯。这篇文章主要讲述混沌工程 Chaosd相关的知识,希望能为你提供帮助。
Chaosd 组件简介Chaosd 是 Chaos Mesh 提供的一款混沌工程测试工具(需要单独下载和部署),用于在物理机环境上注入故障,并提供故障恢复功能。
Chaosd 具有以下核心优势:
- 易用性强:输入简单的 Chaosd 命令即可创建混沌实验,并对实验进行管理。
- 故障类型丰富:在物理机的不同层次、不同类型上都提供了故障注入的功能,包括进程、网络、压力、磁盘、主机等,且更多的功能在不断扩展中。
- 支持多种模式:Chaosd 既可作为命令行工具使用,也可以作为服务使用,满足不同场景的使用需求。
- 进程:对进程进行故障注入,支持进程的 kill、stop 等操作。
- 网络:对物理机的网络进行故障注入,支持增加网络延迟、丢包、损坏包等操作。
- 压力:对物理机的 CPU 或内存注入压力。
- 磁盘:对物理机的磁盘进行故障注入,支持增加读写磁盘负载、填充磁盘等操作。
- 主机:对物理机本身进行故障注入,支持关机等操作。
1、运行环境
查询如下:
[root@k8s-master ~]# ldd --version
ldd (GNU libc) 2.17
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software;
see the source for copying conditions.There is NO
warranty;
not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
2、下载和部署
1、将要下载的Chaosd版本设置为环境变量,例如:v1.1.1
export CHAOSD_VERSION=latest如果要查看所有已发布的 Chaosd 版本,请参阅 releases(https://github.com/chaos-mesh/chaosd/releases)
如果要下载最新的非稳定版本,则使用 latest:2、下载Chaosd
curl -fsSL -o chaosd-$CHAOSD_VERSION-linux-amd64.tar.gz https://mirrors.chaos-mesh.org/chaosd-$CHAOSD_VERSION-linux-amd64.tar.gz3、解压 Chaosd 文件并转移到 /usr/local 目录下:
tar zxvf chaosd-$CHAOSD_VERSION-linux-amd64.tar.gz &
&
sudo mv chaosd-$CHAOSD_VERSION-linux-amd64 /usr/local/4、将 Chaosd 目录加到环境变量 PATH 中:
export PATH=/usr/local/chaosd-$CHAOSD_VERSION-linux-amd64:$PATH
3、运行模式
3.1、命令行模式直接运行命令来创建、管理实验
1、创建实验
[root@k8s-master ~]# chaosd attack process kill --processsleep -s 15
Attack process sleep successfully, uid: 6eaf29c0-dbf0-4612-bbcf-bcab3be1e706
2、恢复实验
[root@k8s-master ~]# chaosd recover 6eaf29c0-dbf0-4612-bbcf-bcab3be1e706
[2022/04/07 11:25:15.995 +08:00] [WARN] [recover.go:75] ["error.core.non_recoverable_attack: only SIGSTOP process attack and process attack with the recover-cmd are supported to recover"] [uid=6eaf29c0-dbf0-4612-bbcf-bcab3be1e706] [kind=process]
Recover 6eaf29c0-dbf0-4612-bbcf-bcab3be1e706 successfully
3.2、服务模式让chaosd在后台运行,通过发送http请求的方式来创建、管理实验。
1、启动服务
[root@k8s-master ~]# chaosd server --port 12345
2、创建实验
[root@k8s-master ~]# curl -XPOST 127.0.0.1:12345/api/attack/stress -H "Content-Type:application/json" -d "action":"cpu", "load": 100, "wo
"status":200,"message":"attack successfully","uid":"86f18a92-7636-451e-9ab0-b3fc0c07a0ef"
3、删除实验
[root@k8s-master ~]# curl -X DELETE "127.0.0.1:12345/api/attack/6eaf29c0-dbf0-4612-bbcf-bcab3be1e706"
"status":200,"message":"attack recover successfully","uid":"6eaf29c0-dbf0-4612-bbcf-bcab3be1e706"
4、使用示例
4.1、进程具体文档请参考https://chaos-mesh.org/zh/docs/simulate-process-chaos-in-physical-nodes/
1、启动测试进程
[root@k8s-master ~]# sleep 1000
2、创建kill实验
[root@k8s-master ~]# chaosd attack process kill --process sleep -s 15
Attack process sleep successfully, uid: c820427d-6035-4644-9672-06cfb28d7ef4
###第一个创建的窗口
[root@k8s-master ~]# sleep 1000
Terminated
3、恢复实验:
[root@k8s-master ~]# chaosd recover c820427d-6035-4644-9672-06cfb28d7ef4
[2022/04/07 11:52:40.087 +08:00] [WARN] [recover.go:75] ["error.core.non_recoverable_attack: only SIGSTOP process attack and process attack with the recover-cmd are supported to recover"] [uid=c820427d-6035-4644-9672-06cfb28d7ef4] [kind=process]
Recover c820427d-6035-4644-9672-06cfb28d7ef4 successfully4、创建stop实验,通过指定uid
[root@k8s-master ~]# chaosd attack process stop --process sleep --uid 12345
Attack process sleep successfully, uid: 12345
##查看进程
[root@k8s-master ~]# ps -aux|grep sleep
root274570.00.0 108064668 pts/2T12:020:00 sleep 1000
root279180.00.0 108064736 pts/2T12:030:00 sleep 1000
root286220.00.0 1128202128 pts/1S+12:040:00 grep --color=auto sleep
####恢复实验
[root@k8s-master ~]# chaosd recover 12345
Recover 12345 successfully###杀进程
[root@k8s-master ~]# ps -ef|grep sleep
root3084145450 12:08 pts/200:00:00 sleep 1000
root3184145450 12:10 pts/200:00:00 grep --color=auto sleep
[root@k8s-master ~]# chaosd attack processkill --process30841
Attack process 30841 successfully, uid: 3c63fcdd-7881-4623-b202-4727b0e1c4f4
4.2、网络通过命令行的方式:
1、搜索网络相关的任务
chaosd search --kind network --status success2、丢包演示
chaosd attack network loss --correlation 10 --percent 50 -H baidu.com -d eth0
或
chaosdattack network loss -d eth0 -i 172.16.5.146 --percent 60#ping baidu.com
[root@k8s-master ~]# ping baidu.com
PING baidu.com (220.181.38.251) 56(84) bytes of data.
64 bytes from 220.181.38.251 (220.181.38.251): icmp_seq=2 ttl=48 time=5.41 ms
64 bytes from 220.181.38.251 (220.181.38.251): icmp_seq=3 ttl=48 time=6.04 ms
64 bytes from 220.181.38.251 (220.181.38.251):
64 bytes from 220.181.38.251 (220.181.38.251): icmp_seq=37 ttl=48 time=5.31 ms
--- baidu.com ping statistics ---
37 packets transmitted, 14 received, 62% packet loss, time 36576ms
rtt min/avg/max/mdev = 5.271/5.413/6.046/0.207 ms
##查看丢失60%左右的包,把实验recover
chaosd recover b5f0491d-96e0-4474-912e-d5b6b307e1812、延迟
##延迟2s
sudo chaosd attack network delay -H baidu.com --device eth0 --latency 2s
##ping baidu.com
[root@k8s-master ~]# ping baidu.com
PING baidu.com (220.181.38.251) 56(84) bytes of data.
64 bytes from 220.181.38.251 (220.181.38.251): icmp_seq=1 ttl=48 time=2005 ms3、重复包
sudo chaosd attack network duplicate -H baidu.com --device eth0 --percent 50
##ping baidu.com
[root@k8s-master ~]# ping baidu.com
PING baidu.com (220.181.38.251) 56(84) bytes of data.
64 bytes from 220.181.38.251 (220.181.38.251): icmp_seq=4 ttl=48 time=5.35 ms
64 bytes from 220.181.38.251 (220.181.38.251): icmp_seq=4 ttl=48 time=5.35 ms (DUP!)4、损坏包
sudo chaosd attack network corrupt-H baidu.com --device eth0 --percent 1005、分区
sudo chaosd attack network partition -H baidu.com -d eth0 --direction from
#direction:指定分区的方向,对来自/发送到 hostname 指定的主机或者 ip 指定的地址的数据包进行分区6、DNS
chaosd attack network dns -i 1.1.1.1 -d baidu.com
##ping baidu.com
[root@k8s-master ~]# ping baidu.com
PING baidu.com (1.1.1.1) 56(84) bytes of data.
64 bytes from baidu.com (1.1.1.1): icmp_seq=1 ttl=48 time=53.5 ms#备注
-H 只影响到指定的域名
-i:只影响到指定的IP地址常见问题:
1. correlation 和 jitter 是什么意思?
correlation 表示与前一次数据包的相关性
jitter 表示延迟时间的变化范围
2. 如何对一批 ip 地址生效?
设置 ip 为网段,例如:192.168.1.1/24
3. 恢复实验后网络仍然有问题?
查看是否有其他网络实验;根据日志中的命令排查。
4.3、主机Chaosd 支持模拟主机关机故障 。文档:https://chaos-mesh.org/zh/docs/next/simulate-host-console-in-physical-nodes/
#慎用
chaosd attack host shutdown
4.4、压力
1、模拟CPU压力命令
chaosd attack stress cpu --load 90 --workers 4
或
chaosd attack stress cpu -l 100 -w 5
通过top进行查看2、模拟内存
chaosd attack stress mem --size 1GB
通过free -h查看
4.5、JVM文档:https://github.com/chaos-mesh/website-zh/blob/main/docs/simulate-jvm-application-chaos-in-physical-nodes.md
Chaosd 通过 Byteman 模拟 JVM 应用故障,主要支持以下几种故障类型:
- 抛出自定义异常
- 触发垃圾回收
- 增加方法延迟
- 修改方法返回值
- 设置 Byteman 配置文件触发故障
- 增加 JVM 压力
1、启动测试进程
代码:https://github.com/WangXiangUSTC/byteman-example/blob/main/example.helloworld/HelloWorld/Main.java
2、下载和启动
[root@k8s-master chaos-mesh]# wget https://github.com/WangXiangUSTC/byteman-example/blob/main/example.helloworld/HelloWorld/Main.java
1、修改返回值
./chaosd attack jvm submit return --class Main --method getnum --port 9288--value 123
2、增加延迟
./chaosd attack jvm submit latency--class Main --method sayhello --latency 5000
3、抛出异常
chaosd attack jvm submit exception -c Main -m sayhello --exception
4、增加压力
./chaosd attack jvm submit stress --cpu-count 2
4.5、磁盘
1、写负载
chaosd attack disk add-payload write --path /tmp/temp --size 100MB
2、读负载
chaosd attack disk add-payload read --path /tmp/temp--size 100MB
3、填充磁盘
chaosd attack disk fill -p /tmp/123 -s 500MB --fallocate=false
4,6、时间
chaosd attack clock -p $PID -t 11s
5、查找和恢复实验
[root@k8s-master chaos-mesh]# chaosd search -h
Search chaos attack, you can search attacks through the uid or the state of the attackUsage:
chaosd search UID [flags]Flags:
-A, --alllist all chaos attacks
--ascorder by CreateTime, default value is false that means order by CreateTime desc
-h, --helphelp for search
-k, --kind stringattack kind, supported value: network, process, stress, disk, host, jvm
-l, --limit uint32limit the count of attacks
-o, --offset uint32starting to search attacks from offset
-s, --status stringattack status, supported value: created, success, error, destroyed, revokedGlobal Flags:
--log-level stringthe log level of chaosd. The value can be debug, info, warn and error
运行以下命令可查看搜索命令 (search) 所支持的配置:
1、查看网络任务
chaosd search --kind network --status success
2、查找实验
chaosd search --kind process --asc --limit 2 -o 1 --status destoryed
推荐阅读
- 权限管理
- vCenter和vMotion介绍
- linux之chattr命令
- docker 部署mysql8搭建innodb_cluster
- 大神带你进入linux网络设置
- 使用while循环语句实现猜奖小游戏
- 《LinuxProbe》—RHCE 学习 Day6-8
- 一基础配置
- hoodie.datasource.hive_sync.partition_extractor_class配置