ChaosBlade:从混沌工程实验工具到混沌工程平台
1
混沌实验模型
1、实验模型的推导
10.0.0.1 机器上挂载的 A 磁盘满造成了服务不可用;
所有节点上的 B dubbo 服务因为执行缓慢造成上游 A dubbo 服务调用延迟,从而造成用户访问缓慢;
Kubernetes A 集群中 B 节点上 CPU 所有核使用率满载,造成 A 集群中的 Pod 调度异常;
Kubernetes C 集群中 D Pod 网络异常,造成 D 相关的 Service 访问异常。
2、实验模型的介绍
Scope: 实验实施范围,指具体实施实验的机器、集群及其资源等。
Target: 实验靶点,指实验发生的组件。如基础资源场景中的 CPU、网络、磁盘等,Java 场景中的应用组件如 Dubbo、Redis、RocketMQ、JVM 等,容器场景中的 Node、Pod、Container自身等。
Matcher: 实验规则匹配器,根据所配置的 Target,定义相关的实验匹配规则,可以配置多个。由于每个 Target 可能有各自特殊的匹配条件,比如 RPC 领域的 Dubbo、gRPC 可以根据服务提供者提供的服务和服务消费者调用的服务进行匹配,缓存领域的 Redis,可以根据 set、get 操作进行匹配。还可以对 matcher 进行扩展,比如扩展实验场景执行策略,控制实验触发时间。
Action: 指实验模拟的具体场景,Target 不同,实施的场景也不一样,比如磁盘,可以演练磁盘满,磁盘 IO 读写高,磁盘硬件故障等。如果是应用,可以抽象出延迟、异常、返回指定值(错误码、大对象等)、参数篡改、重复调用等实验场景。如果是容器服务,可以模拟 Node、Pod、Container 资源异常或者其上的基础资源异常等。
混沌实验的实施范围是什么 实施混沌实验的对象是什么
实验对象触发实验的条件有哪些 具体实施什么实验场景
3、实验模型的意义
简洁:层次清晰,通俗易懂; 通用:覆盖目前所有的故障场景,包含基础资源、应用服务、容器服务、云资源等;
易实现:很方便的定义清晰的接口规范,实验场景扩展实现简单; 语言、领域无关:可以扩展多语言、多领域的模型实现。
更精准的描述混沌实验场景; 更好的理解混沌实验注入;
方便沉淀现有的实验场景; 依据模型发掘更多的场景;
混沌实验工具更加规范、简洁。
4、实验模型的应用
混沌实验模型使实验场景变量参数化,参数规范化; 可遵循模型实现实验场景领域化的水平扩展; 可将混沌实验模型和领域内标准化实现相结合,便捷实现领域内场景垂直扩展; 上层的领域场景可以复用遵循混沌实验模型定义的场景; 通过混沌实验模型声明的场景描述可以很好的接入到 ChaosBlade 中; 遵循实验模型可以很方便的构建上层混沌实验平台。
2
混沌工程实验工具:ChaosBlade
1、混沌实验场景
基础资源:比如 CPU、内存、网络、磁盘、进程、内核等
应用服务:比如数据库、缓存、消息、JVM 本身、微服务等,还可以指定任意类方法注入各种复杂的实验场景;指定任意方法或某行代码注入延迟、变量和返回值篡改等实验场景
Docker 容器:比如杀容器、容器内 CPU、内存、网络、磁盘、进程等实验场景
Kubernetes 平台:比如节点上 CPU、内存、网络、磁盘、进程实验场景,Pod 网络和 Pod 本身实验场景如杀 Pod,容器的实验场景如上述的 Docker 容器实验场景
云资源:比如阿里云 ECS 宕机等实验场景
2、工具使用方式
3、工具架构设计
chaosblade:混沌实验管理工具,包含创建实验、销毁实验、查询实验、实验环境准备、实验环境撤销等命令,是混沌实验的执行工具,执行方式包含 CLI 和 HTTP 两种。提供完善的命令、实验场景、场景参数说明,操作简洁清晰。
chaosblade-spec-go: 混沌实验模型 Golang 语言定义,便于使用 Golang 语言实现的场景都基于此规范便捷实现。
chaosblade-exec-os: 基础资源实验场景实现,如CPU、网络、内存、磁盘等。
chaosblade-exec-docker: Docker 容器实验场景实现,通过调用 Docker API 标准化实现。
chaosblade-operator: Kubernetes 平台实验场景实现,将混沌实验通过 Kubernetes 标准的 CRD 方式定义,很方便的使用 Kubernetes 资源操作的方式来创建、更新、删除实验场景,包括使用 kubectl、client-go 等方式执行,而且还可以使用上述的 chaosblade cli 工具执行。
chaosblade-exec-jvm: Java 应用实验场景实现,使用 Java Agent 技术动态挂载,无需任何接入,零成本使用,而且支持卸载,完全回收 Agent 创建的各种资源。
chaosblade-exec-cplus: C++ 应用实验场景实现,使用 GDB 技术实现方法、代码行级别的实验场景注入。
4、工具使用案例
3
混沌工程平台:chaosblade-box
1、平台功能特点
支持开源实验工具托管:平台可托管业界主流的实验工具,如自身的 chaosblade 和外部的 litmuschaos 等。后续也会托管 chaos mesh 实验工具。
具备丰富的实验场景:包含基础资源(CPU、内存、网络、磁盘、进程、内核、文件等)、多语言应用服务(Java、C++、NodeJS、Golang 等)、Kubernetes 平台(覆盖 Container、Pod、Node 资源场景,包含上述实验场景)。
实验工具自动化部署:无需手动部署实验工具,实现实验工具在主机或集群上自动化部署。
统一混沌实验用户界面:用户无需关心不同工具的使用方式,在统一用户界面进行混沌实验。
多维度实验方式:支持从主机到 Kubernetes 资源,再到应用维度进行实验编排。
集成云原生生态:采用 Helm 部署管理,集成 Prometheus 监控,支持云原生实验工具托管等。
2、平台架构设计
3、使用说明
4