![0](https://yqfile.alicdn.com/8f12e73ef1951c8f58ef26c67d9e188fa5c46282.png)
作者 | 肖长军(穹谷)阿里云智能事业群技术专家
> **导读**:随着云原生系统的演进,如何保障系统的稳定性受到很大的挑战,混沌工程通过反脆弱思想,对系统注入故障,提前发现系统问题,提升系统的容错能力。ChaosBlade 工具可以通过声明式配置执行混沌实验,简单高效。本文将会重点介绍 ChaosBlade 以及云原生相关的实验场景实践。
ChaosBlade 介绍
-------------
ChaosBlade 是阿里巴巴开源的一款遵循混沌实验模型的混沌实验执行工具,具有场景丰富度高、简单易用等特点,而且可以很方便的扩展实验场景,开源后不久就被加入到 CNCF Landspace 中,成为主流的一款混沌工具。
### 实验场景
目前支持的实验场景如下:
* 基础资源场景:CPU 负载、内存占用、磁盘 IO 负载、磁盘占用、网络延迟、网络丢包、网络屏蔽、域名不可访问、shell 脚本篡改、杀进程、进程 Hang、机器重启等;
* 应用服务场景:支持 Java 应用和 C++ 应用内的实验场景。Java 的场景组件丰富,例如支持 Dubbo、RocketMQ、HttpClient、Servlet、Druid等,而且支持编写 Java 或 Groovy 脚本实现复杂的实验场景;
* 容器服务场景:支持 Kubernetes 和 Docker 服务,包含 node、pod 和 container 三种资源的实验场景,例如 Pod 网络延迟、丢包等。
### 混沌实验模型
![1_jpeg](https://yqfile.alicdn.com/3e412a51c4bbe837b04e8cae6ac947b5847e7c6d.jpeg)
以上所有的实验场景都遵循混沌实验模型,此模型共分为四层,包含:
* Target:实验靶点。指实验发生的组件,如容器、应用框架(Dubbo、Redis)等;
* Scope:实验实施的范围。指具体触发实验的机器或者集群等;
* Matcher:实验规则匹配器。根据所配置的 Target,定义相关的实验匹配规则,可以配置多个。由于每个 Target 可能有各自特殊的匹配条件,比如 RPC 领域的 Dubbo,可以根据服务提供者提供的服务和服务消费者调用的服务进行匹配,缓存领域的 Redis,可以根据 set、get 操作进行匹配;
* Action:指实验模拟的具体场景,Target 不同,实施的场景也不一样,比如磁盘,可以演练磁盘满,磁盘 IO 读写高等。如果是应用,可以抽象出延迟、异常、返回指定值(错误码、大对象等)、参数篡改、重复调用等实验场景。
比如一台 IP 是 10.0.0.1 机器上的应用,调用 com.example.HelloService\[@1.0.0 \]() Dubbo 服务延迟 3s,基于此模型可以描述为对 Dubbo 组件(Target)进行实验,实验实施的范围是 10.0.0.1 主机(Scope),调用 com.example.HelloService\[@1.0.0 \]() (Matcher)服务延迟 3s(Action),对应的 chaosblade 命令为:
```
blade create dubbo delay --time 3000 --service com.example.HelloService --version 1.0.0
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
所以此模型很简单清晰的表达出实验场景,易于理解。下文中的云原生实验场景也基于此模型定义。
面向云原生的实验场景
----------
### 实现方案
![2](https://yqfile.alicdn.com/094f5dfedd0e3b38c6d3c86eee65f7a099804ccc.png)
将混沌实验场景按照上述的实验模型,定义为 Kubernetes 中的资源,并通过自定义控制器来管理,可以通过 Yaml 配置或者直接执行 blade 命令执行。
ChaosBlade Operator 定义了资源控制器,并且会以 daemonset 的方式,在每个节点上部署一个 chaosblade-tool pod 来执行混沌实验。不同的实验场景内部实现方式不同,比如 Node 实验场景,其上面部署的 chaosblade-tool 内部执行即可,而 Container 内的实验场景,控制器会将 chaosblade 包拷贝到目标 Container 中执行。
### 使用方式
#### 安装必要组件
安装 ChaosBlade Operator,可通过[地址](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2Fchaosblade-io%2Fchaosblade-operator%2Freleases%2Ftag%2Fv0.0.1)下载 chaosblade-operator-0.0.1.tgz,使用以下命令安装:
```
helm install --namespace kube-system --name chaosblade-operator chaosblade-operator-0.0.1.tgz
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
安装在 kube-system 命令空间下。ChaosBlade Operator 启动后会在每个节点部署 chaosblade-tool Pod 和一个 chaosblade-operator Pod。可通过以下命令查看安装结果:
```
kubectl get pod -n kube-system -o wide | grep chaosblade
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
![3](https://yqfile.alicdn.com/927a1ae4702dc4af8da2392eba3a1e5862a04e26.png)
#### 执行实验
执行方式有两种:
* 一种是通过配置 yaml 方式,使用 kubectl 执行;
* 另一种是直接使用 chaosblade 包中的 blade 命令执行。
下面以指定一台节点,做 CPU 负载 80% 实验举例。
**yaml 配置方式**
```
apiVersion: chaosblade.io/v1alpha1
kind: ChaosBlade
metadata:
name: cpu-load
spec:
experiments:
- scope: node
target: cpu
action: fullload
desc: "increase node cpu load by names"
matchers:
- name: names
value:
- "cn-hangzhou.192.168.0.205"
- name: cpu-percent
value:
- "80"
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
如上所示,配置好文件后,保存为 chaosblade\_cpu\_load.yaml,使用以下命令执行实验场景:
```
kubectl apply -f chaosblade_cpu_load.yaml
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
可通过以下命令查看每个实验的执行状态:
```
kubectl get blade cpu-load -o json
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
查看[更多实验场景配置事例](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2Fchaosblade-io%2Fchaosblade-operator%2Ftree%2Fv0.0.1%2Fexamples)。
**blade 命令执行方式**
[下载 chaosblade 工具包](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2Fchaosblade-io%2Fchaosblade%2Freleases%2Ftag%2Fv0.4.0-alpha),解压即可使用。还是上述例子,使用 blade 命令执行如下:
```
blade create k8s node-cpu fullload --names cn-hangzhou.192.168.0.205 --cpu-percent 80 --kubeconfig ~/.kube/config
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
使用 blade 命令执行,会返回实验的执行结果。
#### 修改实验
yaml 配置文件的方式支持场景动态修改,比如将上述的 cpu 负载调整为 60%,则只需将上述 value 的值从 80 改为 60 即可,例如:
```
apiVersion: chaosblade.io/v1alpha1
kind: ChaosBlade
metadata:
name: cpu-load
spec:
experiments:
- scope: node
target: cpu
action: load
desc: "cpu load"
flags:
- name: cpu-percent
value: "60"
- name: ip
value: 192.168.0.34
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
然后使用 `kubeclt apply -f chaosblade_cpu_load.yaml` 命令执行更新即可。
#### 停止实验
可以通过以下三种方式停止实验:
**根据实验资源名停止**
比如上述 cpu-load 场景,可以执行以下命令停止实验:
```
kubectl delete chaosblade cpu-load
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
**通过 yaml 配置文件停止**
指定上述创建好的 yaml 文件进行删除,命令如下:
```
kubectl delete -f chaosblade_cpu_load.yaml
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
**通过 blade 命令停止**
此方式仅限使用 blade 创建的实验,使用以下命令停止:
```
blade destroy <UID>
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
是执行 blade create 命令返回的结果,如果忘记,可使用 blade status --type create 命令查询。
#### 卸载 chaosblade operator
执行 `helm del --purge chaosblade-operator` 卸载即可,将会停止全部实验,删除所有创建的资源。
总结
--
ChaosBlade 基于混沌实验模型,友好地将 Kubernetes 资源控制结合,部署简单而且使用简洁,实验可控。除此之外 ChaosBlade 基于实验模型实现了很多领域场景执行器,可以很方便的扩展实验场景,可详见附录中的项目列表。
社区共建
----
ChaosBlade 自开源以来,共有近 30 多位贡献者加入和很多企业的关注及使用,非常感谢各位。同时非常欢迎更多的人参与进来,使 ChaosBlade 变的更加强大,覆盖更多的场景,成为各个企业稳定的、通用的混沌工程工具。
贡献的形式可以是提 bug、提交代码、编写文档、补充单元测试、参与问题讨论等等。ChaosBlade 相信:开源世界中,任何帮助都是贡献。
[原文链接](https://yq.aliyun.com/articles/725935?utm_content=g_1000085381)
本文为云栖社区原创内容,未经允许不得转载。
分享到:
相关推荐
混沌工程与云原生应用 混沌工程是一门通过主动引入故障来增强系统鲁棒性的工程实践。随着分布式系统的日趋复杂性,故障的发生已经变得无法避免,而混沌工程的目的便是通过在可控环境中模拟故障,提早发现并修复潜在...
CNCF × Alibaba云原生技术公开课-基础-测试题及答案
《云原生微服务下混沌工程实践》 在云原生架构中,微服务成为构建复杂应用程序的首选方式,但同时也带来了新的稳定性挑战。混沌工程作为一种应对这些挑战的方法,正逐渐受到重视。混沌工程旨在通过在分布式系统上...
CNCF × Alibaba云原生技术公开课-进阶-测试题及答案
【阿里云原生实践15讲】是一份深入探讨云原生技术和阿里云实践的资料,涵盖的内容广泛且深入,旨在揭示云原生时代的技术趋势和阿里云在云原生领域的创新实践。以下是对其中主要知识点的详细说明: 1. **云原生应用...
云原生实战案例集-179.pdf展示了云原生技术在汽车、制造、零售、电商、本地生活、交通、物流、新东方、金融服务、医疗健康、landing zone/咨询等多个行业领域的应用实践,涵盖了云原生技术架构升级、阿里云ACK@Edge...
云原生稳定性工程能力实践之路 测试上云:既快又好地交付K8s应用 畅捷通微服务架构体系演进 云平台建设实践 后Kubernetes时代的云原生技术探索和实践 混沌工程平台能力要求 基于云原生架构的PaaS平台演进之路 金融业...
阿里云原生技术+云原生架构+云原生实践等资料合集,13份。 2021阿里巴巴DevOps实践手册 2021云原生开发者洞察白皮书 阿里巴巴-云原生大规模应用落地指南 阿里巴巴经济体-云原生实践 阿里巴巴云原生架构白皮书 阿里...
中间件云原生后的思考-我眼中云原生的未来
阿里混沌工程的技术演进路线延伸阅读《阿里电商故障治理和故障演练实践》,开源工具 ChaosBlade 是一款遵循混沌实验模型,提供丰富故障场景实现,帮助分布式系统提升容错性和可恢复性。 混沌工程的技术文化是面向...
内容主要讲述了云原生安全典型模型、DevSecOps 开发安全运营一体化模型、云原生安全防护体系、云原生基础架构安全、云原生应用安全、微服务架构下的应用安全、Serverless 安全、云原生研发运营安全、云原生数据安全...
Chaosblade-operator:面向云原生的混沌工程工具中文版介绍Chaosblade Operator是kubernetes平台上面向云原生的混沌实验注入工具。 通过定义Kubernetes CRD来管理混乱的实验,每个实验都有非常清晰的执行状态。 该...
云原生培训-openshift-ocp3红帽原厂培训ppt-完整版: 容器平台OPENSHIFT概览 部署容器应用
【云原生中间件与安全性】 云原生中间件是现代云计算环境中不可或缺的一部分,它在E2E(端到端)云原生纵深安全保障中扮演着重要角色。中间件作为连接应用程序、数据、运行时环境的核心,为操作系统、虚拟化、服务器...
混沌工程的实践包括使用各种混沌实验工具和平台,例如ChaosBlade(混沌之刃)。ChaosBlade是一款遵循混沌实验模型的工具,它具有丰富的场景模拟能力,使用简洁,易于理解,并且具有动态加载和无侵入的特点,场景扩展...
阿里巴巴在混沌工程方面有着深入的实践,包括混沌之刃(ChaosBlade)的开发,这是一个无侵入、扩展性强的混沌工程工具,提供了统一的实验模型,通过简单的命令行接口进行故障模拟。例如,可以模拟Dubbo服务延迟或CPU...
威睿-云原生基本概念手册-2020.rar
云原生平台与微服务-杨乐.pdf
数字政府云原生基础设施白皮书 随着数字政府建设的推进,云原生基础设施正成为下一代政务云建设的核心。华为和中国信通院发布的《数字政府云原生基础设施白皮书》对数字政府云原生基础设施的建设和发展进行了系统性...