关于ChaosMesh
Chaos Mesh 是一个开源的云原生混沌工程平台,提供丰富的故障模拟类型,具有强大的故障场景编排能力,方便用户在开发测试中以及生产环境中模拟现实世界中可能出现的各类异常,帮助用户发现系统潜在的问题。Chaos Mesh 提供完善的可视化操作,旨在降低用户进行混沌工程的门槛。用户可以方便地在 Web UI 界面上设计自己的混沌场景,以及监控混沌实验的运行状态。
chaosmesh.png
基础资源类型故障:
- 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 应用故障,例如函数调用延迟。
chaosd
chaosd是chaos mesh提供的一款混沌工程测试工具(需单独下载和部署),用于在物理机环境注入故障,并提供故障恢复功能。
chaosd支持故障类型
- 进程:对进程进行故障注入,支持进程的 kill、stop 等操作。
- 网络:对物理机的网络进行故障注入,支持增加网络延迟、丢包、损坏包等操作。
- 压力:对物理机的 CPU 或内存注入压力。
- 磁盘:对物理机的磁盘进行故障注入,支持增加读写磁盘负载、填充磁盘等操作。
- 主机:对物理机本身进行故障注入,支持关机等操作。
离线部署
※chaos mesh需要在K8S环境中进行部署。
- 准备相关部署文件
需要的部署文件清单:
- chaos-mesh-2.6.2.zip:chaos安装包
- chaosd-v1.4.0-linux-amd64.tar.gz:chaosd安装包
- ghcr.io/chaos-mesh/chaos-mesh镜像
- ghcr.io/chaos-mesh/chaos-daemon镜像
- ghcr.io/chaos-mesh/chaos-dashboard镜像
- helm-v2.16.9-linux-amd64.tar.gz:helm安装包
# 指定版本号
export CHAOS_MESH_VERSION=v2.6.2
# 下载镜像
docker pull ghcr.io/chaos-mesh/chaos-mesh:${CHAOS_MESH_VERSION}
docker pull ghcr.io/chaos-mesh/chaos-daemon:${CHAOS_MESH_VERSION}
docker pull ghcr.io/chaos-mesh/chaos-dashboard:${CHAOS_MESH_VERSION}
# 将镜像保存为tar包,把tar包拷贝到内网、加载镜像、改tag、上传到内网仓库
docker save ghcr.io/chaos-mesh/chaos-mesh:${CHAOS_MESH_VERSION} > image-chaos-mesh.tar
docker save ghcr.io/chaos-mesh/chaos-daemon:${CHAOS_MESH_VERSION} > image-chaos-daemon.tar
docker save ghcr.io/chaos-mesh/chaos-dashboard:${CHAOS_MESH_VERSION} > image-chaos-dashboard.tar
# 下载chaos mesh zip包
curl -fsSL -o chaos-mesh.zip https://github.com/chaos-mesh/chaos-mesh/archive/refs/heads/master.zip
# 下载chaosd
curl -fsSLO https://mirrors.chaos-mesh.org/chaosd-$CHAOSD_VERSION-linux-amd64.tar.gz
- 内网环境部署chaos mesh
# 安装helm
tar xvf helm-v2.16.9-linux-amd64.tar.gz
cp -a linux-amd64/helm /usr/bin/helm
# 使用helm安装chaos mesh
unzip chaos-mesh.zip -d chaos-mesh && cd chaos-mesh
kubectl create ns chaos-mesh
helm install chaos-mesh helm/chaos-mesh --namespace=chaos-mesh --set images.registry=$DOCKER_REGISTRY,dashboard.securityMode=false,controllerManager.chaosdSecurityMode=false
- images.registry:指定仓库
- dashboard.securityMode:可视化安全面板安全模式
- controllerManager.chaosdSecurityMode:chaosd连接安全模式
- 内网环境部署chaosd
# 解压chaosd
tar zxvf chaosd-$CHAOSD_VERSION-linux-amd64.tar.gz && sudo mv chaosd-$CHAOSD_VERSION-linux-amd64 /usr/local/
# 加入环境变量
export PATH=/usr/local/chaosd-$CHAOSD_VERSION-linux-amd64:$PATH
# 启动
chaosd server --port 31767
混沌测试实践
- 设计测试方案
包括测试环境、工具、测试范围、测试策略、测试场景等,此处略。
- 设计测试用例
异常类型 | 异常子类 | 场景描述 | 观测指标 |
---|---|---|---|
操作系统异常 | IO异常 | 模拟es服务器磁盘占用100% | 成功率、响应时间、TPS、数据恢复 |
- 搭建测试环境
用途 | 工具 |
---|---|
XX系统高可用测试环境 | / |
模拟异常注入 | chaos mesh+chaosd |
监控K8S/节点资源 | prometheus+node exporter+grafana |
jmeter测试结果 | jmeter+influxdb+grafana |
- 执行实验
1、以小并发(20线程)持续调用XX接口,观测、记录系统在稳定状态下的资源指标
2、进入chaos mesh-实验-新建实验,配置物理机-磁盘故障-fill故障,并执行实验
-
观测监控指标,得到结果
jmeter压测tps趋势.png
物理机监控.png
注入异常使es1虚拟机磁盘占用达到100%,其他es集群所在虚拟机资源使用无明显变化,接口访问TPS无明显变化。停止异常注入,es1虚拟机资源使用恢复到异常发生前的状态。当es集群某节点磁盘占用率达到100%时,对业务请求无明显影响。
网友评论