混沌测试平台 Chaos Mesh
时间:2022-07-22
本文章向大家介绍混沌测试平台 Chaos Mesh,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
混沌测试平台 Chaos Mesh
Chaos Mesh 是PingCap团队研发的一款用于测试kubernetes环境的工具。通过人为地在集群中注入故障来检测集群对故障的处理以及恢复能力。更详细信息可以查看这篇文章。混沌测试与针对某个应用测试的区别为:前者更倾向于在现有大规模集群中进行测试,影响因素可能来自集群中的方方面面;而后者更专注于对应用本身功能的测试。
GitHub上目前有两款star数高的混沌项目,litmus和chaos-mesh,这两款的功能和场景都基本类似,前者目前提供的混沌注入功能比较多,但后者提供了简单的UI界面。两者都可以扩展自定义的场景。
下面以chaos-mesh为例简单看下其提供的功能。
minikube下的安装可以参见官方文档
在安装完后可以看到如下pod,一个controller,一个daemonset以及一个dashboard
# kubectl get pod -n chaos-testing
NAME READY STATUS RESTARTS AGE
chaos-controller-manager-fd568948-hl8wv 1/1 Running 0 59m
chaos-daemon-5zfzh 1/1 Running 0 59m
chaos-dashboard-6d8466f445-2k8sl 1/1 Running 0 59m
dashboard示意图如下:
目前支持的混沌测试如下:
# kubectl get crd
NAME CREATED AT
iochaos.chaos-mesh.org 2020-07-29T08:18:55Z
kernelchaos.chaos-mesh.org 2020-07-29T08:18:55Z
networkchaos.chaos-mesh.org 2020-07-29T08:18:55Z
podchaos.chaos-mesh.org 2020-07-29T08:18:55Z
stresschaos.chaos-mesh.org 2020-07-29T08:18:55Z
timechaos.chaos-mesh.org 2020-07-29T08:18:55Z
其原理也比较简单,类似istio的网格方式,通过admission webhook给pod注入sidecar,然后通过该sidecar进行故障注入。其支持的webhook如下:
# kubectl get MutatingWebhookConfiguration chaos-mesh-sidecar-injector
NAME WEBHOOKS AGE
chaos-mesh-sidecar-injector 7 61m
# kubectl get ValidatingWebhookConfiguration
NAME WEBHOOKS AGE
chaos-mesh-validation 6 61m
使用起来也比较简单,以pod-failure
类型的故障为例,主要创建一个PodChaos
的crd对象,并将selector设置为pod的标签即可。
apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:
name: pod-failure-example
namespace: chaos-testing
spec:
action: pod-failure # the specific chaos action to inject; supported actions: pod-kill/pod-failure
mode: one # the mode to run chaos action; supported modes are one/all/fixed/fixed-percent/random-max-percent
duration: "60s" # duration for the injected chaos experiment
selector: # pods where to inject chaos actions
labelSelectors:
"app.kubernetes.io/component": "tikv" # the label of the pod for chaos injection
scheduler: # scheduler rules for the running time of the chaos experiments about pods.
cron: "@every 5m"
总体来说,混沌测试更像是集成验证的一部分,通过在现有运行环境中注入故障来发现系统或应用的兼容性问题,故障恢复能力问题等。典型的一个场景可以参考PingCap官方提供的Chaos Mesh 能做些什么?。
- 极速体验:Oracle 18c 下载和Scalable Sequence新特性
- springboot mybatis 事务管理
- Elasticsearch JAVA api轻松搞定groupBy聚合
- 微信加关注链接 一键关注公众号 解决用手机看网页无法扫二维码的烦恼
- springboot mybatis redis 二级缓存
- Elasticsearch强制重置未分配的分片(unassigned)
- 帝国cms调用缩略图和具体文章的方法
- python codis集群客户端(一) - 基于客户端daemon探活与服务列表维护
- python codis集群客户端(二) - 基于zookeeper对实例创建与摘除
- JavaScript replace() 方法
- 别让Open Sans字体拖慢wordpress后台速度
- Oracle 问题小结
- 为帝国cms模板添加站内搜索小教程
- 线程传参
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 利用织梦CMS0day注入漏洞渗透测试
- nodejs中追加内容到文件
- android实现滚动文本效果
- Android实现View的拖拽
- 诊断日志知多少 | DiagnosticSource 在.NET上的应用
- Android Studio 4.0新特性及升级异常问题的解决方案
- Android Studio 4.0 正式发布在Ubuntu 20.04中安装的方法
- Android Studio 4.0 新功能中的Live Layout Inspector详解
- Android实现滑动刻度尺效果
- Android 仿微信发动态九宫格拖拽、删除功能
- android自定义等级评分圆形进度条
- Android Fragment实现底部通知栏
- Flutter实现局部刷新
- Android自定义条形对比统计图
- Android底部菜单栏(RadioGroup+Fragment)美化