ChaosBlade 是阿里巴巴開源的一款遵循混沌工程原理和混沌實驗模型的實驗注入工具,幫助企業提升分布式系統的容錯能力,並且在企業上雲或往雲原生系統遷移過程中業務連續性保障。
ChaosBlade 不僅使用簡單,而且支持豐富的實驗場景,場景包括:
- 基礎資源:比如 CPU、內存、網絡、磁盤、進程等實驗場景;
- Java 應用:比如數據庫、緩存、消息、JVM 本身、微服務等,還可以指定任意類方法注入各種復雜的實驗場景;
- C++ 應用:比如指定任意方法或某行代碼注入延遲、變量和返回值篡改等實驗場景;
- Docker 容器:比如殺容器、容器內 CPU、內存、網絡、磁盤、進程等實驗場景;
- 雲原生平台:比如 Kubernetes 平台節點上 CPU、內存、網絡、磁盤、進程實驗場景,Pod 網絡和 Pod 本身實驗場景如殺 Pod,容器的實驗場景如上述的 Docker 容器實驗場景;
可以從 Releases 地址下載最新的 chaosblade 工具包,解壓即用。如果想注入 Kubernetes 相關故障場景,需要安裝 chaosblade-operator,詳細的中文使用文檔請查看 chaosblade-help-zh-cn
總結基礎資源和雲原生平台的環境搭建:
一、基礎資源
訪問https://github.com/chaosblade-io/chaosblade/releases頁面,下載chaosblade工具包,
解壓后后直接使用blade命令往基礎資源中注入故障。
二、雲原生平台(k8s)
訪問https://github.com/chaosblade-io/chaosblade-operator/releases地址下載chaosblade-operator安裝包。
1、安裝chaosblade-operator:
(1)helm v2版本
helm install --namespace chaosblade --name chaosblade-operator chaosblade-operator-VERSION-v2.tgz
(2)helm v3版本
helm install chaosblade-operator chaosblade-operator-VERSION-v3.tgz --namespace chaosblade
注意:如果mac本未安裝helm命令,使用brew install kubectl-helm命令進行安裝;如果已安裝helm命令,使用helm version查看helm版本是2版本還是3版本。我個人為:
所以使用的安裝命令為:helm install --namespace kube-system chaosblade-operator chaosblade-operator-1.3.0-v3.tgz
安裝在 kube-system 命令空間下后,ChaosBlade Operator 啟動后會在每個節點部署 chaosblade-tool Pod 和一個chaosblade-operator Pod。可通過以下命令查看安裝結果
2、安裝metrics-server
metrics-server是用來擴展k8s的第三方apiserver,其主要作用是收集pod或node上的cpu,內存,磁盤等指標數據,並提供一個api接口供kubectl top命令訪問;默認情況kubectl top 命令是沒 法正常使用,其原因是默認apiserver上沒有對應的接口提供收集pod或node的cpu,內存,磁盤等核心指標數據;kubectl top命令主要用來顯示pod/node資源的cpu,內存,磁盤的占用比例;該 命 令能夠正常使用必須依賴Metrics API;
(1)下載metric-server的yaml文件
wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.4.1/components.yaml
(2)修改components.yaml文件
增加:- --kubelet-insecure-tls
修改鏡像:image: phperall/metrics-server:v0.4.1
(3)拉取metric-server鏡像
docker pull phperall/metrics-server:v0.4.1 (預先配置dockerhub倉庫)
(4)啟動metrics-server服務:
kubectl apply -f components.yaml
(5)檢查服務是否啟動成功
(6)注入故障,故障注入實例:
給node節點注入cpu為60%的故障:kubectl apply -f chaosblade_cpu_load.yaml
給pod注入cpu為60%的故障:kubectl apply -f pod-cpu-load-by-names.yaml
查看故障注入結果命令:
kubectl top node [-n default]
kubectl top pod [-n default]
查看啟動的blade:
kubectl get blade
刪除注入的故障:
kubectl delete blade cpu-load (cpu-load實際為故障yaml文件中的name)
更多故障注入實例參考: https://github.com/chaosblade-io/chaosblade-operator/tree/v1.3.0/examples
參考鏈接:
https://developer.aliyun.com/article/725935
https://gitee.com/baigogogo/chaosblade
https://github.com/chaosblade-io/chaosblade-operator