暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

云原生混沌工程——ChaosBlade详解

IT运维大爆炸 2024-03-28
142

1、简介

ChaosBlade 是阿里巴巴 2019 年开源的混沌工程项目,包含混沌工程实验工具 chaosblade 和混沌工程平台 chaosblade-box,旨在通过混沌工程帮助企业解决云原生过程中高可用问题。实验工具 chaosblade 支持 3 大系统平台,4 种编程语言应用,共涉及 200 多的实验场景,3000 多个实验参数,可以精细化的控制实验范围。混沌工程平台 chaosblade-box 支持实验工具托管,除已托管 chaosblade 外,还支持 Litmuschaos 实验工具。已登记使用企业 40 多家,其中已在工商银行、中国移动、小米、京东等企业中落地使用。

2、特点

  • 丰富的实验场景:包含基础资源(CPU、内存、网络、磁盘、进程、内核、文件等)、多语言应用服务(Java、C++、NodeJS、Golang 等)、Kubernetes 平台(覆盖 Container、Pod、Node 资源场景,包含上述实验场景)。

  • 多维度实验方式:支持从主机到 Kubernetes 资源,再到应用维度进行实验编排。

  • 多样化的执行方式:除了使用平台白屏化操作,还可以通过工具自带的 blade 工具或者 kubectl、编码的方式执行。

  • 便捷的场景扩展能力:所有的实验场景遵循混沌实验模型实现,并且不同层次场景对应不同的执行器,实现简单,易于扩展。

  • 实验工具自动化部署:无需手动部署实验工具,实现实验工具在主机或集群上自动化部署。

  • 支持开源实验工具托管:平台可托管业界主流的实验工具,如自身的 chaosblade 和外部的 litmuschaos 等。

  • 统一混沌实验用户界面:用户无需关心不同工具的使用方式,在统一用户界面进行混沌实验。

  • 集成云原生生态:采用 Helm 部署管理,集成 Prometheus 监控,支持云原生实验工具托管等。

3、架构

ChaosBlade 支持多种环境部署与演练,包括 linux、docker、kubernetes 集群及各类云厂商环境。ChaosBlade 主要包括以下几个组件:

  • ChaosBlade-Box Console:ChaosBlade 可视化组件,主要提供一套用户友好的 Web 界面,用户可以通过该界面进行混沌工程实验的编排与操作管理。

  • ChaosBlade-Box Server:核心逻辑组件,主要负责混沌工程实验的管理与编排,探针与应用管理。包括组件,Chaos Engine:演练引擎,包括流程编排、安全管控、演练报告等功能;Chaos Runner:演练执行器,兼容多种执行工具;Chaos Experinece:演练经验库等。

  • Agent:核心逻辑组件,部署在用户终端的主机或 Kubernetes 集群内,主要负责和 ChaosBlade-Box Server 建联上报心跳并作为命令下发通道。

  • ChaosBlade:主要执行工具,能在主机和 Kubernetes 等不同环境上执行故障注入,能对系统网络设备、文件系统、内核及系统上运行的应用等进行故障干扰。

4、安装部署

[root@mast01 ~]# wget https://github.com/chaosblade-io/chaosblade/releases/download/v1.7.2/chaosblade-1.7.2-linux-amd64.tar.gz

[root@mast01 ~]# tar -xzvf chaosblade-1.7.2-linux-amd64.tar.gz -C opt/chaosblade/
[root@mast01 ~]# cd opt/chaosblade/chaosblade-1.7.2
[root@mast01 chaosblade-1.7.2]# ./blade version
version: 1.7.2
env: #1 SMP Wed Jan 25 16:41:43 UTC 2023 x86_64
build-time: Fri May 19 03:23:24 UTC 2023

5、参数

--destination-ip string   目标 IP. 支持通过子网掩码来指定一个网段的IP地址, 例如 192.168.1.0/24. 则 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通过都号分隔多个参数,例如 192.168.1.1,192.168.2.1。
--exclude-port string     排除掉的端口,默认会忽略掉通信的对端端口,目的是保留通信可用。可以指定多个,使用逗号分隔或者连接符表示范围,例如 22,8000 或者 8000-8010。这个参数不能与 --local-port 或者 --remote-port 参数一起使用
--exclude-ip string       排除受影响的 IP,支持通过子网掩码来指定一个网段的IP地址, 例如 192.168.1.0/24. 则 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通过都号分隔多个参数,例如 192.168.1.1,192.168.2.1。
--interface string       网卡设备,例如 eth0 (必要参数)
--local-port string       本地端口,一般是本机暴露服务的端口。可以指定多个,使用逗号分隔或者连接符表示范围,例如 80,8000-8080
--offset string           延迟时间上下浮动的值, 单位是毫秒
--remote-port string     远程端口,一般是要访问的外部暴露服务的端口。可以指定多个,使用逗号分隔或者连接符表示范围,例如 80,8000-8080
--time string             延迟时间,单位是毫秒 (必要参数)
--force                   强制覆盖已有的 tc 规则,请务必在明确之前的规则可覆盖的情况下使用
--ignore-peer-port       针对添加 --exclude-port 参数,报 ss 命令找不到的情况下使用,忽略排除端口
--timeout string         设定运行时长,单位是秒,通用参数

6、模拟网络丢包

#模拟丢包命令
[root@mast01 chaosblade-1.7.2]# ./blade create network loss --interface ens33 --percent 50
{"code":200,"success":true,"result":"ac14eb80f04b6743"}

#丢包效果
[root@mast01 chaosblade-1.7.2]# ping www.baidu.com
PING www.baidu.com (36.155.132.76) 56(84) bytes of data.
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=1 ttl=128 time=92.7 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=2 ttl=128 time=45.0 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=3 ttl=128 time=33.4 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=4 ttl=128 time=55.2 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=5 ttl=128 time=26.7 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=6 ttl=128 time=31.7 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=7 ttl=128 time=26.1 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=8 ttl=128 time=62.3 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=9 ttl=128 time=29.5 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=10 ttl=128 time=16.7 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=11 ttl=128 time=19.2 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=12 ttl=128 time=50.4 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=13 ttl=128 time=14.2 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=15 ttl=128 time=28.9 ms

#停止实验
[root@mast01 chaosblade-1.7.2]# ./blade destroy ac14eb80f04b6743
{"code":200,"success":true,"result":{"target":"network","action":"loss","flags":{"interface":"ens33","percent":"50"},"ActionProcessHang":false}}

7、模拟网络延时

#模拟网络延时命令
[root@mast01 chaosblade-1.7.2]# ./blade create network delay --interface ens33 --time 3000
{"code":200,"success":true,"result":"9da7fd2d983380f8"}

#丢包效果
[root@mast01 chaosblade-1.7.2]# ping www.baidu.com
PING www.baidu.com (36.155.132.76) 56(84) bytes of data.
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=1 ttl=128 time=42.3 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=2 ttl=128 time=15.5 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=3 ttl=128 time=19.4 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=4 ttl=128 time=23.7 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=5 ttl=128 time=21.9 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=6 ttl=128 time=18.4 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=7 ttl=128 time=15.9 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=8 ttl=128 time=21.8 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=9 ttl=128 time=15.8 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=10 ttl=128 time=14.4 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=11 ttl=128 time=18.6 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=12 ttl=128 time=23.4 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=13 ttl=128 time=77.1 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=14 ttl=128 time=74.8 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=15 ttl=128 time=3055 ms
64 bytes from 36.155.132.76 (36.155.132.76): icmp_seq=16 ttl=128 time=3023 ms

#停止实验
[root@mast01 chaosblade-1.7.2]# ./blade destroy 9da7fd2d983380f8
{"code":200,"success":true,"result":{"target":"network","action":"delay","flags":{"interface":"ens33","time":"3000"},"ActionProcessHang":false}}

欢迎大家扫码关注:

本公众号只写原创,不接广告、不接广告、不接广告。下期小伙伴想学习什么技术,可以私信发我吆。

文章转载自IT运维大爆炸,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论