1 Chaos Mesh 简介
参考地址:https://chaos-mesh.org/zh/docs/
Chaos Mesh 是一个开源的云原生混沌工程平台,提供丰富的故障模拟类型,具有强大的故障场景编排能力,方便用户在开发测试中以及生产环境中模拟现实世界中可能出现的各类异常,帮助用户发现系统潜在的问题。
2 Chaos Mesh 的核心优势
- 核心能力稳固:Chaos Mesh 起源于 TiDB 的核心测试平台,发布初期即继承了大量 TiDB 已有的测试经验。
- 被充分验证:Chaos Mesh 被众多公司以及组织所使用,例如腾讯和美团等;同时被用于众多知名分布式系统的测试体系中,例如 Apache
APISIX 和 RabbitMQ 等。 - 系统易用性强:图形化操作和基于 Kubernetes 的使用方式,充分利用了自动化能力。
- 云原生:Chaos Mesh 原生支持 Kubernetes 环境,提供了强悍的自动化能力。
- 丰富的故障模拟场景:Chaos Mesh 几乎涵盖了分布式测试体系中基础故障模拟的绝大多数场景。
- 灵活的实验编排能力:用户可以通过平台设计自己的混沌实验场景,场景可包含多个混沌实验编排,以及应用状态检查等。
- 安全性高:Chaos Mesh 具有多层次安全控制设计,提供高安全性。
- 活跃的社区:Chaos Mesh 为全球知名开源混沌测试平台,CNCF 开源基金会孵化项目。
- 强大的扩展能力:Chaos Mesh 为故障测试类型扩展和功能扩展提供了充分的扩展能力。
3 Chaos Mesh架构
- Chaos Dashboard:Chaos Mesh 的可视化组件,提供了一套用户友好的 Web
界面,用户可通过该界面对混沌实验进行操作和观测。同时,Chaos Dashboard 还提供了 RBAC 权限管理机制。 - Chaos Controller Manager:Chaos Mesh 的核心逻辑组件,主要负责混沌实验的调度与管理。该组件包含多个
CRD Controller,例如 Workflow Controller、Scheduler Controller 以及各类故障类型的
Controller。 - Chaos Daemon:Chaos Mesh 的主要执行组件。Chaos Daemon 以 DaemonSet 的方式运行,默认拥有
Privileged 权限(可以关闭)。该组件主要通过侵入目标 Pod Namespace 的方式干扰具体的网络设备、文件系统、内核等。
4 故障注入类型
- 基础资源类型故障:
- PodChaos:模拟 Pod 故障,例如 Pod 节点重启、Pod 持续不可用,以及特定 Pod 中的某些容器故障。
- NetworkChaos:模拟网络故障,例如网络延迟、网络丢包、包乱序、各类网络分区。
- DNSChaos:模拟 DNS 故障,例如 DNS 域名解析失败、返回错误 IP 地址。
- HTTPChaos:模拟 HTTP 通信故障,例如 HTTP 通信延迟。
- StressChaos:模拟 CPU 抢占或内存抢占场景。
- IOChaos:模拟具体某个应用的文件 I/O 故障,例如 I/O 延迟、读写失败。
- TimeChaos:模拟时间跳动异常。
- KernelChaos:模拟内核故障,例如应用内存分配异常。
- 平台类型故障:
- AWSChaos:模拟 AWS 平台故障,例如 AWS 节点重启。
- GCPChaos:模拟 GCP 平台故障,例如 GCP 节点重启。
- 应用层故障:
- JVMChaos:模拟 JVM 应用故障,例如函数调用延迟。
5 混沌实验场景
- 编排串行混沌实验
- 编排并行混沌实验
- 支持状态检查步骤
- 支持中途暂停混沌实验
- 支持使用 YAML 文件定义和管理混沌实验场景
- 支持通过Web UI 定义和管理混沌实验场景
6 安全
Chaos Mesh 通过 Kubernetes 原生的 RBAC(基于角色的权限控制)功能对权限进行管理。
用户可以根据实际的权限需求自由地创建多种 Role,然后绑定到用户名 Service Account 上,最后生成 Service Account 对应的 Token。用户使用该 Token 登陆 Dashboard,只能在该 Service Account 允许的权限范围内进行 Chaos 实验。