跳至主内容

十分钟上手你的首个混沌实验

· 1 分钟阅读
Cwen Yin
Maintainer of Chaos Mesh
非官方测试版翻译

本页面由 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 集群跟随操作。

环境准备

开始前请确保本地计算机已安装 GitDocker 且 Docker 处于运行状态。macOS 用户建议为 Docker 分配至少 6 个 CPU 核心,详见 Mac 版 Docker 配置

  1. 获取 Chaos Mesh:

    git clone https://github.com/chaos-mesh/chaos-mesh.git
    cd chaos-mesh/
  2. 通过 install.sh 脚本安装 Chaos Mesh:

    ./install.sh --local kind

    install.sh 是自动化 shell 脚本,可检查环境、安装 Kind、在本地启动 Kubernetes 集群并部署 Chaos Mesh。要查看 install.sh 的详细说明,可使用 --help 选项。

    注意:

    若本地无法从 docker.iogcr.io 拉取镜像,请使用本地 gcr.io 镜像并执行 ./install.sh --local kind --docker-mirror

  3. 设置系统环境变量:

    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 因其能直观呈现网络混沌效果,您也可部署自己的应用进行测试。

  1. 使用 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

  2. 访问 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 实验:

  1. 运行 network-delay.yaml

    # Make sure you are in the chaos-mesh/examples/web-show directory
    kubectl apply -f network-delay.yaml
  2. 访问 web-show 应用:在浏览器中打开 http://localhost:8081

    折线图将清晰呈现每 60 秒出现的 10 毫秒网络延迟。

Chaos Mesh 在 web-show 中注入延迟
Chaos Mesh 在 web-show 中注入延迟

恭喜!您已成功制造了一次可控混沌。若想尝试更多实验,请参考 examples/web-show

清理混沌实验

测试完成后请及时终止实验。

  1. 删除 network-delay.yaml

    # Make sure you are in the chaos-mesh/examples/web-show directory
    kubectl delete -f network-delay.yaml
  2. 访问 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 频道。

GitHub: https://github.com/chaos-mesh/chaos-mesh