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