面向云原生的浑沌工程东西-ChaosBlade
2019-11-18杂谈搜奇网46°c
A+ A-作者 | 肖长军(穹谷)阿里云智能奇迹群手艺专家
导读:跟着云原生体系的演进,怎样保障体系的稳固性遭到很大的应战,浑沌工程经由过程反软弱头脑,对体系注入毛病,提早发明体系题目,提拔体系的容错才能。ChaosBlade 东西能够经由过程声明式设置实行浑沌试验,简朴高效。本文将会重点引见 ChaosBlade 以及云原生相干的试验场景实践。
ChaosBlade 引见
ChaosBlade 是阿里巴巴开源的一款遵照浑沌试验模子的浑沌试验实行东西,具有场景雄厚度高、简朴易用等特性,而且能够很轻易的扩大试验场景,开源后不久就被到场到 CNCF Landspace 中,成为主流的一款浑沌东西。
试验场景
现在支撑的试验场景以下:
基本资本场景:CPU 负载、内存占用、磁盘 IO 负载、磁盘占用、收集耽误、收集丢包、收集屏障、域名不可接见、shell 剧本改动、杀历程、历程 Hang、机械重启等;
运用效劳场景:支撑 Java 运用和 C++ 运用内的试验场景。Java 的场景组件雄厚,比方支撑 Dubbo、RocketMQ、HttpClient、Servlet、Druid等,而且支撑编写 Java 或 Groovy 剧本完成庞杂的试验场景;
容器效劳场景:支撑 Kubernetes 和 Docker 效劳,包括 node、pod 和 container 三种资本的试验场景,比方 Pod 收集耽误、丢包等。
浑沌试验模子
以上一切的试验场景都遵照浑沌试验模子,此模子共分为四层,包括:
- Target:试验靶点。指试验发作的组件,如容器、运用框架(Dubbo、Redis)等;
- Scope:试验实行的局限。指详细触发试验的机械或许集群等;
- Matcher:试验划定规矩婚配器。依据所设置的 Target,定义相干的试验婚配划定规矩,能够设置多个。因为每一个 Target 可能有各自特别的婚配前提,比方 RPC 范畴的 Dubbo,能够依据效劳供应者供应的效劳和效劳消费者挪用的效劳举行婚配,缓存范畴的 Redis,能够依据 set、get 操纵举行婚配;
- Action:指试验模仿的详细场景,Target 差别,实行的场景也不一样,比方磁盘,能够练习训练磁盘满,磁盘 IO 读写高级。假如是运用,能够笼统出耽误、异常、返回指定值(错误码、大对象等)、参数改动、反复挪用等试验场景。
比方一台 IP 是 10.0.0.1 机械上的运用,挪用 com.example.HelloService@1.0.0 Dubbo 效劳耽误 3s,基于此模子能够形貌为对 Dubbo 组件(Target)举行试验,试验实行的局限是 10.0.0.1 主机(Scope),挪用 com.example.HelloService@1.0.0 (Matcher)效劳耽误 3s(Action),对应的 chaosblade 敕令为:
blade create dubbo delay --time 3000 --service com.example.HelloService --version 1.0.0
所以此模子很简朴清楚的表达出试验场景,易于明白。下文中的云原生试验场景也基于此模子定义。
面向云原生的试验场景
完成计划
将浑沌试验场景根据上述的试验模子,定义为 Kubernetes 中的资本,并经由过程自定义掌握器来治理,能够经由过程 Yaml 设置或许直接实行 blade 敕令实行。
ChaosBlade Operator 定义了资本掌握器,并且会以 daemonset 的体式格局,在每一个节点上布置一个 chaosblade-tool pod 来实行浑沌试验。差别的试验场景内部完成体式格局差别,比方 Node 试验场景,其上面布置的 chaosblade-tool 内部实行即可,而 Container 内的试验场景,掌握器会将 chaosblade 包拷贝到目的 Container 中实行。
运用体式格局
装置必要组件
装置 ChaosBlade Operator,可经由过程地点下载 chaosblade-operator-0.0.1.tgz,运用以下敕令装置:
helm install --namespace kube-system --name chaosblade-operator chaosblade-operator-0.0.1.tgz
装置在 kube-system 敕令空间下。ChaosBlade Operator 启动后会在每一个节点布置 chaosblade-tool Pod 和一个 chaosblade-operator Pod。可经由过程以下敕令检察装置效果:
kubectl get pod -n kube-system -o wide | grep chaosblade
实行试验
实行体式格局有两种:
- 一种是经由过程设置 yaml 体式格局,运用 kubectl 实行;
- 另一种是直接运用 chaosblade 包中的 blade 敕令实行。
下面以指定一台节点,做 CPU 负载 80% 试验举例。
yaml 设置体式格局
apiVersion: chaosblade.io/v1alpha1
kind: ChaosBlade
metadata:
name: cpu-load
spec:
experiments:
- scope: node
target: cpu
action: fullload
desc: "increase node cpu load by names"
matchers:
- name: names
value:
- "cn-hangzhou.192.168.0.205"
- name: cpu-percent
value:
- "80"
如上所示,设置好文件后,保存为 chaosblade_cpu_load.yaml,运用以下敕令实行试验场景:
kubectl apply -f chaosblade_cpu_load.yaml
可经由过程以下敕令检察每一个试验的实行状况:
kubectl get blade cpu-load -o json
检察更多试验场景设置事例。
blade 敕令实行体式格局
下载 chaosblade 东西包,解压即可运用。照样上述例子,运用 blade 敕令实行以下:
blade create k8s node-cpu fullload --names cn-hangzhou.192.168.0.205 --cpu-percent 80 --kubeconfig ~/.kube/config
运用 blade 敕令实行,会返回试验的实行效果。
修正试验
yaml 设置文件的体式格局支撑场景动态修正,比方将上述的 cpu 负载调解为 60%,则只需将上述 value 的值从 80 改成 60 即可,比方:
apiVersion: chaosblade.io/v1alpha1
kind: ChaosBlade
metadata:
name: cpu-load
spec:
experiments:
- scope: node
target: cpu
action: load
desc: "cpu load"
flags:
- name: cpu-percent
value: "60"
- name: ip
value: 192.168.0.34
然后运用 kubeclt apply -f chaosblade_cpu_load.yaml
敕令实行更新即可。
住手试验
能够经由过程以下三种体式格局住手试验:
依据试验资本名住手
比方上述 cpu-load 场景,能够实行以下敕令住手试验:
kubectl delete chaosblade cpu-load
经由过程 yaml 设置文件住手
指定上述建立好的 yaml 文件举行删除,敕令以下:
kubectl delete -f chaosblade_cpu_load.yaml
经由过程 blade 敕令住手
此体式格局仅限运用 blade 建立的试验,运用以下敕令住手:
blade destroy <UID>
是实行 blade create 敕令返回的效果,假如遗忘,可运用 blade status --type create 敕令查询。
卸载 chaosblade operator
实行 helm del --purge chaosblade-operator
卸载即可,将会住手悉数试验,删除一切建立的资本。
总结
ChaosBlade 基于浑沌试验模子,友爱地将 Kubernetes 资本掌握连系,布置简朴而且运用简约,试验可控。除此之外 ChaosBlade 基于试验模子完成了许多范畴场景实行器,能够很轻易的扩大试验场景,可详见附录中的项目列表。
社区共建
ChaosBlade 自开源以来,共有近 30 多位孝敬者到场和许多企业的关注及运用,异常感谢列位。同时异常迎接更多的人介入进来,使 ChaosBlade 变的越发壮大,掩盖更多的场景,成为各个企业稳固的、通用的浑沌工程东西。
孝敬的情势能够是提 bug、提交代码、编写文档、补充单元测试、介入题目议论等等。ChaosBlade 置信:开源天下中,任何协助都是孝敬。
附录
项目列表以下:
- ChaosBlade CLI(挪用进口)
- ChaosBlade 试验模子定义
- 基本资本场景实行器
- Docker 场景实行器
- Kubernetes 场景实行器
- Java 运用场景实行器
- C++ 运用场景实行器
“ 阿里巴巴云原生微信民众号(ID:Alicloudnative)关注微效劳、Serverless、容器、Service Mesh等手艺范畴、聚焦云原生盛行手艺趋向、云原生大规模的落地实践,做最懂云原生开发者的手艺民众号。”