十分钟上手你的首个混沌实验
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

混沌工程通过模拟异常或破坏性条件来测试生产软件系统的健壮性。然而对许多人来说,从学习混沌工程到在自有系统上实践这一步令人望而生畏。这听起来像是需要专业团队提前规划的大型工程。其实并非如此,开始混沌实验可能只差一个合适的平台。
Chaos Mesh 是一款简单易用的开源云原生混沌工程平台,可在 Kubernetes 环境中编排混沌实验。本十分钟教程将帮助你快速入门混沌工程,使用 Chaos Mesh 运行首个混沌实验。
更多 Chaos Mesh 信息请参考往期文章或 GitHub 上的 chaos-mesh 项目。
实验预览
混沌实验类似于科学课堂上的实验,在受控环境中制造混乱场景完全可行。这里我们将在一个名为 web-show 的小型 Web 应用上模拟网络混沌。为可视化混沌效果,web-show 每 10 秒记录其 Pod 到 kube-system 命名空间下 kube-controller Pod 的延迟。
以下动图展示了通过几条命令安装 Chaos Mesh、部署 web-show 及创建混沌实验的完整流程:

现在轮到你了!是时候动手实践了。
开始实践
本简单实验使用 Docker 中的 Kubernetes (Kind) 进行开发。你可自由选用 Minikube 或任何现有 Kubernetes 集群跟随操作。
环境准备
开始前请确保本地计算机已安装 Git 和 Docker 且 Docker 处于运行状态。macOS 用户建议为 Docker 分配至少 6 个 CPU 核心,详见 Mac 版 Docker 配置。
-
获取 Chaos Mesh:
git clone https://github.com/chaos-mesh/chaos-mesh.git
cd chaos-mesh/ -
通过
install.sh脚本安装 Chaos Mesh:./install.sh --local kindinstall.sh是自动化 shell 脚本,可检查环境、安装 Kind、在本地启动 Kubernetes 集群并部署 Chaos Mesh。要查看install.sh的详细说明,可使用--help选项。注意:
若本地无法从
docker.io或gcr.io拉取镜像,请使用本地 gcr.io 镜像并执行./install.sh --local kind --docker-mirror。 -
设置系统环境变量:
source ~/.bash_profile
注意:
根据网络状况,这些步骤可能需要几分钟时间。
若出现类似以下错误信息:
ERROR: failed to create cluster: failed to generate kubeadm config content: failed to get kubernetes version from node: failed to get file: command "docker exec --privileged kind-control-plane cat /kind/version" failed with error: exit status 1请增加本地 Docker 的资源分配并执行:
./install.sh --local kind --force-local-kube
安装完成后将显示 Chaos Mesh 成功部署的提示信息。
部署测试应用
接下来部署待测试应用。我们选择 web-show 因其能直观呈现网络混沌效果,您也可部署自己的应用进行测试。
-
使用
deploy.sh脚本部署 web-show:# Make sure you are in the Chaos Mesh directory
cd examples/web-show &&
./deploy.sh注意:
若本地无法拉取
docker.io镜像,请使用local gcr.io镜像执行./deploy.sh --docker-mirror。 -
访问 web-show 应用程序。在您的网络浏览器中,打开
http://localhost:8081。
创建混沌实验
环境就绪,现在开始运行您的首个混沌实验!
Chaos Mesh 采用 CustomResourceDefinitions (CRD) 定义实验。不同场景的 CRD 对象独立设计,大幅简化了定义流程。目前已实现的 CRD 对象包括 PodChaos、NetworkChaos、IOChaos、TimeChaos 和 KernelChaos,后续将支持更多故障注入类型。
本次实验使用 NetworkChaos 配置,其 YAML 文件如下:
apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:
name: network-delay-example
spec:
action: delay
mode: one
selector:
namespaces:
- default
labelSelectors:
"app": "web-show"
delay:
latency: "10ms"
correlation: "100"
jitter: "0ms"
duration: "30s"
scheduler:
cron: "@every 60s"
NetworkChaos 操作详解参见 Chaos Mesh 文档,此处配置可简述为:
-
目标应用:
web-show -
实验任务:每
60s注入10ms网络延迟 -
单次攻击时长:
30s
启动 NetworkChaos 实验:
-
运行
network-delay.yaml:# Make sure you are in the chaos-mesh/examples/web-show directory
kubectl apply -f network-delay.yaml -
访问 web-show 应用:在浏览器中打开
http://localhost:8081。折线图将清晰呈现每 60 秒出现的 10 毫秒网络延迟。

恭喜!您已成功制造了一次可控混沌。若想尝试更多实验,请参考 examples/web-show。
清理混沌实验
测试完成后请及时终止实验。
-
删除
network-delay.yaml:# Make sure you are in the chaos-mesh/examples/web-show directory
kubectl delete -f network-delay.yaml -
访问 web-show 应用程序。在您的网络浏览器中,打开
http://localhost:8081。
从折线图中可以看到,网络延迟水平已恢复正常。

删除 Kubernetes 集群
完成混沌实验后,执行以下命令删除 Kubernetes 集群:
kind delete cluster --name=kind
注意:
如果遇到
kind: command not found错误,请先执行source ~/.bash_profile命令,然后再删除 Kubernetes 集群。
太棒了!接下来呢?
恭喜您成功完成了混沌工程的首次探索!感觉如何?混沌工程其实很简单,对吧?不过您可能会觉得 Chaos Mesh 还不够易用:命令行操作不太方便?手动编写 YAML 文件略显繁琐?查看实验结果不够直观?别担心,Chaos Dashboard 已经在路上了!在网页上运行混沌实验绝对令人兴奋!如果您愿意帮助我们构建云平台测试标准或改进 Chaos Mesh,我们非常期待您的参与!
如果您发现任何 bug 或认为缺少某些功能,请随时提交 issue、创建拉取请求(PR),或加入 CNCF Slack 工作区 中的 #project-chaos-mesh 频道。