關(guān)于ChaosMesh
Chaos Mesh 是一個開源的云原生混沌工程平臺,提供豐富的故障模擬類型,具有強大的故障場景編排能力,方便用戶在開發(fā)測試中以及生產(chǎn)環(huán)境中模擬現(xiàn)實世界中可能出現(xiàn)的各類異常,幫助用戶發(fā)現(xiàn)系統(tǒng)潛在的問題。Chaos Mesh 提供完善的可視化操作,旨在降低用戶進行混沌工程的門檻。用戶可以方便地在 Web UI 界面上設(shè)計自己的混沌場景,以及監(jiān)控混沌實驗的運行狀態(tài)。

chaosmesh.png
基礎(chǔ)資源類型故障:
- PodChaos:模擬 Pod 故障,例如 Pod 節(jié)點重啟、Pod 持續(xù)不可用,以及特定 Pod 中的某些容器故障。
- NetworkChaos:模擬網(wǎng)絡(luò)故障,例如網(wǎng)絡(luò)延遲、網(wǎng)絡(luò)丟包、包亂序、各類網(wǎng)絡(luò)分區(qū)。
- DNSChaos:模擬 DNS 故障,例如 DNS 域名解析失敗、返回錯誤 IP 地址。
- HTTPChaos:模擬 HTTP 通信故障,例如 HTTP 通信延遲。
- StressChaos:模擬 CPU 搶占或內(nèi)存搶占場景。
- IOChaos:模擬具體某個應用的文件 I/O 故障,例如 I/O 延遲、讀寫失敗。
- TimeChaos:模擬時間跳動異常。
- KernelChaos:模擬內(nèi)核故障,例如應用內(nèi)存分配異常。
平臺類型故障:
- AWSChaos:模擬 AWS 平臺故障,例如 AWS 節(jié)點重啟。
- GCPChaos:模擬 GCP 平臺故障,例如 GCP 節(jié)點重啟。
應用層故障:
- JVMChaos:模擬 JVM 應用故障,例如函數(shù)調(diào)用延遲。
chaosd
chaosd是chaos mesh提供的一款混沌工程測試工具(需單獨下載和部署),用于在物理機環(huán)境注入故障,并提供故障恢復功能。
chaosd支持故障類型
- 進程:對進程進行故障注入,支持進程的 kill、stop 等操作。
- 網(wǎng)絡(luò):對物理機的網(wǎng)絡(luò)進行故障注入,支持增加網(wǎng)絡(luò)延遲、丟包、損壞包等操作。
- 壓力:對物理機的 CPU 或內(nèi)存注入壓力。
- 磁盤:對物理機的磁盤進行故障注入,支持增加讀寫磁盤負載、填充磁盤等操作。
- 主機:對物理機本身進行故障注入,支持關(guān)機等操作。
離線部署
※chaos mesh需要在K8S環(huán)境中進行部署。
- 準備相關(guān)部署文件
需要的部署文件清單:
- 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包拷貝到內(nèi)網(wǎng)、加載鏡像、改tag、上傳到內(nèi)網(wǎng)倉庫
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
- 內(nèi)網(wǎng)環(huán)境部署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連接安全模式
- 內(nèi)網(wǎng)環(huán)境部署chaosd
# 解壓chaosd
tar zxvf chaosd-$CHAOSD_VERSION-linux-amd64.tar.gz && sudo mv chaosd-$CHAOSD_VERSION-linux-amd64 /usr/local/
# 加入環(huán)境變量
export PATH=/usr/local/chaosd-$CHAOSD_VERSION-linux-amd64:$PATH
# 啟動
chaosd server --port 31767
混沌測試實踐
- 設(shè)計測試方案
包括測試環(huán)境、工具、測試范圍、測試策略、測試場景等,此處略。
- 設(shè)計測試用例
| 異常類型 | 異常子類 | 場景描述 | 觀測指標 |
|---|---|---|---|
| 操作系統(tǒng)異常 | IO異常 | 模擬es服務(wù)器磁盤占用100% | 成功率、響應時間、TPS、數(shù)據(jù)恢復 |
- 搭建測試環(huán)境
| 用途 | 工具 |
|---|---|
| XX系統(tǒng)高可用測試環(huán)境 | / |
| 模擬異常注入 | chaos mesh+chaosd |
| 監(jiān)控K8S/節(jié)點資源 | prometheus+node exporter+grafana |
| jmeter測試結(jié)果 | jmeter+influxdb+grafana |
- 執(zhí)行實驗
1、以小并發(fā)(20線程)持續(xù)調(diào)用XX接口,觀測、記錄系統(tǒng)在穩(wěn)定狀態(tài)下的資源指標
2、進入chaos mesh-實驗-新建實驗,配置物理機-磁盤故障-fill故障,并執(zhí)行實驗
-
觀測監(jiān)控指標,得到結(jié)果
jmeter壓測tps趨勢.png
物理機監(jiān)控.png
注入異常使es1虛擬機磁盤占用達到100%,其他es集群所在虛擬機資源使用無明顯變化,接口訪問TPS無明顯變化。停止異常注入,es1虛擬機資源使用恢復到異常發(fā)生前的狀態(tài)。當es集群某節(jié)點磁盤占用率達到100%時,對業(yè)務(wù)請求無明顯影響。

