Chaos Mesh 1.0 于 2020 年 7 月成为 CNCF 沙箱项目,随后,Chaos Mesh 团队宣布了其通用可用性(GA)。Chaos Mesh 是一个用于在 Kubernetes 应用程序上进行混沌工程实验的工具。
Chaos Mesh 使用标准的 CDR 进行对象定义,还提供了一个用于管理和监控混沌工程实验的仪表盘。仪表盘可用于“定义混沌实验的范围、指定混沌注入的类型、定义调度规则,并观察混沌实验的结果”。Chaos Mesh 还提供了一个 Grafana 插件,可以查看混沌工程实验的实时指标。这个工具涵盖了“Pod、网络、系统 I/O 和内核”的故障注入。
InfoQ 采访了 Chaos Mesh 的维护者和全职开发人员 Keao Yang,了解更多的信息。
混沌实验可以在 Chaos Mesh 中使用 YAML 来指定。可以注入的故障类型包括 Pod 故障、网络分区故障、虚拟内存压力源、通过系统调用修改系统时间以及 I/O 延迟。Chaos Mesh 还可以用于模拟跨多个数据中心的网络延迟。Chaos Mesh 主要包含了两个运行组件——一个中央控制器管理器和一个 DaemonSet,它在每个节点上运行一个 Pod,作为代理。为了限制测试中受影响的应用程序,并防止混沌实验影响关键应用程序,它提供了名称空间级别的权限和受保护的名称空间。
图像来源:https://raw.githubusercontent.com/chaos-mesh/chaos-mesh/master/static/chaos-mesh.svg
Chaos Mesh 是从一个针对分布式数据库TiDB的测试框架发展而来的。Yang 解释说:“我们相信我们以前的经验(关于 TiDB 测试)不仅让 TiDB 更加稳定,这也是我们创建 Chaos Mesh 的原因。Chaos Mesh 生来就是通用的,被设计成可以在任何一个云平台上运行,也可以用来测试云端的任何一个软件。”
Yang 说,Chaos Mesh 不依赖特定的云特性。它“只使用了 Kubernetes API 和 Linux 内核的基本功能”,并补充道:
根据用户的报告,Chaos Mesh 可以很自然地在裸机集群和大多数云平台上运行。但是,对于一些云平台(如 OpenShift),需要特殊的特权设置。我们正在编写文档来记录这些配置。
在回答 Chaos Mesh 如何在内部注入故障时,Yang 解释说:
具体实现取决于“故障”类型。有一些很简单,例如,Chaos Mesh 使用 Kubernetes API 来杀死 Pod 并实现 PodChaos。对于其他一些类型的故障,Chaos Mesh 会向相关节点上的守护进程发送 grpc 请求,守护进程会进入相应的 network/pid/mnt/…命名空间和 cgroup,并运行一些命令(如 iptables)来注入故障。
此外,Yang 还说,“在运行时注入故障和限制混沌的范围可能是一个挑战。例如,在 Linux 5.6 之前没有时间名称空间这样的东西,而且每个进程都共享同一个时钟。对于这种混沌,实现并不是那么简单,而且真的很难用一句话说清楚”。另一篇文章描述了 TimeChaos 的实现——它模拟时钟偏差。
关于 Chaos Mesh 的近期路线图,Yang 说:
我们正试图将 Chaos Mesh 扩展为一个“平台”,这意味着它有望能够编排混沌实验,定义复杂的混沌场景,并为混沌生成报告。另一个重要的特性是支持仪表盘的访问控制。
Kubernetes 上的其他混沌工程框架有Litmus、Gremlin和KubeInvaders。在写这篇文章时,Chaos Mesh 需要 Kubernetes v 1.12 或更高版本,可以使用提供的 shell 脚本或 Helm Chart 来安装。Chaos Mesh 的源代码可以在GitHub上找到。
原文链接:
Chaos Engineering on Kubernetes : Chaos Mesh Generally Available with v1.0
评论