{
    "componentChunkName": "component---src-templates-blog-blog-detail-tsx",
    "path": "/blog/cannot-use-chaosmesh-without-k8s-then-try-chaosd",
    "result": {"pageContext":{"blog":{"id":"Blogs_300","title":"没 K8s 用不了 Chaos Mesh？试试 Chaosd","tags":["Chaos Mesh"],"category":{"name":"案例实践"},"summary":"本文描述了 Chaosd 作为 Chaos Mesh 提供的一款混沌工程测试工具，用于在物理机环境上注入故障，并提供故障恢复功能。","body":"## Chaosd 是什么？\n\n相信大家对 Chaos Mesh 已经比较了解了：支持多种类型的混沌实验，有 Dashboard web 界面直接管理实验，TiDB 使用它保障产品质量，还有小鹏汽车、网易、某银行等众多用户。这么好的工具当然想亲手试一试，动手的时候发现：没有 K8s 环境用不了！\n\n这是因为 Chaos Mesh 是云原生的混沌工程测试平台，专门为 K8s 设计的。然而你的应用还是用物理机环境部署的，太遗憾了，有故障的时候看告警邮件吧。\n\n请留步，试试 Chaosd？\n\n可能你还是第一次听说 Chaosd，它是 Chaos Mesh 提供的一款混沌工程测试工具，用于在物理机环境上注入故障，并提供故障恢复功能。看它的名子是不是和 Chaos Mesh 中的组件 chaos-daemon 比较相似？是的，它正是由 chaos-daemon 演化而来，并针对物理机的特点增加了一些专门的混沌实验功能。\n\n## Chaosd 有什么优势\n\nChaosd 具有以下这些优点：\n\n- 易用性强：输入简单的 Chaosd 命令即可创建混沌实验，并对实验进行管理。\n\n- 故障类型丰富：在物理机的不同层次、不同类型上都提供了故障注入的功能，包括进程、网络、JVM、压力、磁盘、主机等，且更多的功能在不断扩展中。\n\n- 支持多种模式：Chaosd 既可作为命令行工具使用，也可以作为服务使用，满足不同场景的使用需求。\n\n说了这么多，让我们来试一试。最近我们刚发布了 [v1.0.1](https://github.com/chaos-mesh/chaosd/releases/tag/v1.0.1) 版本，就用这个版本来简单演示一下。\n\n## Chaosd 的使用\n\n### 1. 下载\n\n首先要下载 Chaosd，执行以下命令：\n\ncurl -fsSL -o chaosd-v1.0.1-linux-amd64.tar.gz [https://mirrors.chaos-mesh.org/chaosd-v1.0.1-linux-amd64.tar.gz](https://mirrors.chaos-mesh.org/chaosd-v1.0.1-linux-amd64.tar.gz)\n\n解压这个文件，可以看到它包含一个 chaosd 文件和一个 tools 文件夹。chaosd 是工具的入口；tools 文件夹下面包含执行混沌实验所需要的一些工具，包括 stress-ng（压力场景）、byteman（JVM 故障）、PortOccupyTool（网络故障占用端口）等。\n \n### 2. 创建实验\n\n我们以创建一个网络类型的混沌实验为例，注入故障，使服务器无法访问 chaos-mesh.org，执行以下命令：\n\nsudo ./chaosd attack network loss --percent 100 --hostname chaos-mesh.org --device ens33\n\nAttack network successfully, uid: c55a84c5-c181-426b-ae31-99c8d4615dbe\n\n简单来说，这个命令的作用是：通过 ens33 网卡向 chaos-mesh.org 发送或者接收的网络包会 100% 丢失。使用 sudo 是因为该实验会修改网络规则， 需要 root 权限。\n\n此外，别忘了保存好这个实验的 uid，用于后续的实验恢复。\n \n### 3. 检查实验效果\n\n让我们通过 ping 命令来检查是否可以正常访问 chaos-mesh.org：\n\nping chaos-mesh.org\n\nPING chaos-mesh.org (185.199.109.153) 56(84) bytes of data.\n\n^C\n\n--- chaos-mesh.org ping statistics ---\n\n2 packets transmitted, 0 received, 100% packet loss, time 1021ms\n\n执行命令后会卡住，迟迟得不到响应，按 CTRL C 退出后可以看到 ping 的统计信息：100% packet loss。说明我们的实验确实生效了。\n\n### 4. 恢复实验\n\n运行以下命令恢复实验：\n\nsudo ./chaosd recover c55a84c5-c181-426b-ae31-99c8d4615dbe\n\nRecover c55a84c5-c181-426b-ae31-99c8d4615dbe successfully\n\n恢复实验时也会修改网络规则，因此也需要使用 sudo。在执行完成后，可以再 ping chaos-mesh.org 确认网络已经恢复。 \n \n## 后续的规划\n\n### 提高易用性 & 平台化\n\n从上面的使用示例中可以看到，Chaosd 用起来还是挺简单的，通过命令行就可以创建实验。但是肯定有些人还不太满意：有 Dashboard web 界面能用吗？ 答案是：目前还没有，但是已经在着手开发了。\n\n我们会继续加强它的易用性，提供 Dashboard web 管理功能，不仅可以管理物理机上 Chaosd 的实验，还可以管理 Chaos Mesh 上的实验，这样就把物理机环境和 K8s 环境的混沌实验统一管理起来。在去年的 TiDB Hackathon 中我们简单做了一个 demo，架构如下：\n![chaosmesh.png](https://img1.www.pingcap.com/prod/chaosmesh_577379581b.png)\n\n详细介绍可以参考 [Chaos Mesh® 的 Chaos Engineering as a Service 探索之路](https://pingcap.com/blog-cn/chaos-engineering-as-a-service/)。\n \n### 更多的故障注入功能\n\n目前 Chaosd 提供了进程、网络、JVM、压力、磁盘、主机总共六大故障注入功能，但是仍然需要继续拓展。后续我们计划将 Chaos Mesh 在 K8s 环境支持的一些故障注入功能在 Chaosd 中实现，包括 HTTP、IO 等。\n\n大家可以通过 Chaosd 的[使用文档](https://chaos-mesh.org/website-zh/docs/chaosd-overview)，尝试创建一些混沌实验来体验一下。在使用过程中遇到什么问题，或者有新的需求，都可以提 [issue](https://github.com/chaos-mesh/chaosd/issues) 来反馈。","date":"2021-08-11","author":"王相","fillInMethod":"writeDirectly","customUrl":"cannot-use-chaosmesh-without-k8s-then-try-chaosd","file":null,"relatedBlogs":[]}}},
    "staticQueryHashes": ["1327623483","1820662718","3081853212","3430003955","3649515864","4265596160","63159454"]}