面向云原生的混沌工程工具-ChaosBlade

  

面向云原生的混沌工程工具-ChaosBlade

  

作者|肖长军(穹谷)阿里云智能事业群技术专家

  
  

<>强导读:随着云原生系统的演进,如何保障系统的稳定性受到很大的挑战,混沌工程通过反脆弱思想,对系统注入故障,提前发现系统问题,提升系统的容错能力.ChaosBlade工具可以通过声明式配置执行混沌实验,简单高效。本文将会重点介绍ChaosBlade以及云原生相关的实验场景实践。

     

ChaosBlade介绍

  

ChaosBlade是阿里巴巴开源的一款遵循混沌实验模型的混沌实验执行工具,具有场景丰富度高,简单易用等特点,而且可以很方便的扩展实验场景,开源后不久就被加入到CNCF Landspace中,成为主流的一款混沌工具。

  

实验场景

  

目前支持的实验场景如下:

  
      <李>   

    基础资源场景:CPU负载,内存占用,磁盘IO负载,磁盘占用,网络延迟,网络丢包,网络屏蔽,域名不可访问,shell脚本篡改,杀进程,进程挂,机器重启等;

      李   <李>   

    应用服务场景:支持Java应用c++和应用内的实验场景. Java的场景组件丰富,例如支持达博,RocketMQ, HttpClient, Servlet,德鲁伊等,而且支持编写Java或Groovy脚本实现复杂的实验场景;

      李   <李>容器服务场景:支持Kubernetes和码头工人服务,包含节点,pod和容器三种资源的实验场景,例如豆荚网络延迟,丢包等。   
  

混沌实验模型

  

面向云原生的混沌工程工具-ChaosBlade

  

以上所有的实验场景都遵循混沌实验模型,此模型共分为四层,包含:

  
      <李>目标:实验靶点。指实验发生的组件,如容器,应用框架(达博,复述)等;李   <李>范围:实验实施的范围。指具体触发实验的机器或者集群等;李   <李>匹配器:实验规则匹配器。根据所配置的目标,定义相关的实验匹配规则,可以配置多个。由于每个目标可能有各自特殊的匹配条件,比如RPC领域的达博,可以根据服务提供者提供的服务和服务消费者调用的服务进行匹配,缓存领域的复述,可以根据集,得到了操作进行匹配。   <李>行动:指实验模拟的具体场景,目标不同,实施的场景也不一样,比如磁盘,可以演练磁盘满,磁盘IO读写高等。如果是应用,可以抽象出延迟,异常,返回指定值(错误码,大对象等),参数篡改,重复调用等实验场景。   
  

比如一台IP是10.0.0.1机表示器上的应用,调用com.example.HelloService(@1.0.0)()达博服务延迟3 s,基于此模型可以描述为对达博组件(目标)进行实验,实验实施的范围是10.0.0.1主表示机(范围),调用com.example.HelloService(@1.0.0)()(匹配器)服务延迟3 s(行动),对应的chaosblade命令为:

  
 <代码>叶片创建com . example。达博延迟——3000年时间——服务 
  

所以此模型很简单清晰的表达出实验场景,易于理解。下文中的云原生实验场景也基于此模型定义。

  

面向云原生的实验场景

  

实现方案

  

面向云原生的混沌工程工具-ChaosBlade

  

将混沌实验场景按照上述的实验模型,定义为Kubernetes中的资源,并通过自定义控制器来管理,可以通过Yaml配置或者直接执行叶片命令执行。

  

ChaosBlade运营商定义了资源控制器,并且会以daemonset的方式,在每个节点上部署一个chaosblade-tool豆荚来执行混沌实验。不同的实验场景内部实现方式不同,比如节点实验场景,其上面部署的chaosblade-tool内部执行即可,而容器内的实验场景,控制器会将ChaosBlade包拷贝到目标容器中执行。

  

使用方式

  
安装必要组件
  

安装ChaosBlade算子,可通过地址下载chaosblade-operator-0.0.1.tgz,使用以下命令安装:

  
 <代码>舵安装——名称空间kube-system名字chaosblade-operator chaosblade-operator-0.0.1.tgz  
  

安装在kube-system命令空间下.ChaosBlade运营商启动后会在每个节点部署chaosblade-tool Pod和一个chaosblade-operator豆荚。可通过以下命令查看安装结果:

  
 <代码> kubectl得到pod - n kube-system - o宽| grep chaosblade  
  

面向云原生的混沌工程工具-ChaosBlade

面向云原生的混沌工程工具-ChaosBlade