面向云原生的混沌工程工具-ChaosBlade

作者 | 肖长军(穹谷)阿里云智能事业群技术专家  

导读:随着云原生系统的演进,如何保障系统的稳定性受到很大的挑战,混沌工程通过反脆弱思想,对系统注入故障,提前发现系统问题,提升系统的容错能力。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: nodetarget: cpuaction: fullloaddesc: "increase node cpu load by names"matchers:- name: namesvalue:- "cn-hangzhou.192.168.0.205"- name: cpu-percentvalue:- "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: nodetarget: cpuaction: loaddesc: "cpu load"flags:- name: cpu-percentvalue: "60"- name: ipvalue: 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 基于实验模型实现了很多领域场景执行器,可以很方便的扩展实验场景,可详见附录中的项目列表。


双11福利来了!先来康康#怎么买云服务器最便宜# [并不简单]参团购买指定配置云服务器仅86元/年,开团拉新享三重礼:1111红包+瓜分百万现金+31%返现,爆款必买清单,还有iPhone 11 Pro、卫衣、T恤等你来抽,马上来试试手气👉  https://www.aliyun.com/1111/2019/home?utm_content=g_1000083110

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517526.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centOS docker容器的安装

文章目录一、docker安装步骤1.卸载旧版本2.安装依赖3.添加镜像源4.查看仓库中的所有docker版本5.安装docker6.启动docker7.设置开机自启动docker8.查看docker是否安装成功9.卸载docker一、docker安装步骤 提示&#xff1a;安装之前可以使用命令&#xff1a;yum check-update检查…

泡着枸杞写bug的三流程序员凭什么逆袭到一线大厂?

大多数互联网的从业者都有一个梦想&#xff1a;进大厂。因为不仅可以享受较好的福利待遇&#xff0c;也能与更优秀的人一起共事&#xff0c;获得更专业、更快速的成长。最近经常有朋友提及想要入门编程学习&#xff0c;该如何学习&#xff1f;关于编程学习&#xff0c;各种语言…

哪种人是软件设计中的稀缺型人才?

阿里妹导读&#xff1a;好的系统架构离不开好的接口设计&#xff0c;因此&#xff0c;真正懂接口设计的人往往是软件设计队伍中的稀缺型人才。 为什么在接口制定标准中说&#xff1a;一流的企业做标准&#xff0c;二流的企业做品牌&#xff0c;三流的企业做产品&#xff1f;依赖…

快速Ubuntu的配置(以ubuntu 20.04桌面版为例)

文章目录一、&#x1f496;更换镜像源二、&#x1f496;安装VMware Tools工具三、&#x1f496;安装Google浏览器四、&#x1f496;安装搜狗输入法五、&#x1f496;安装C/C开发工具Clion&#x1f340;1.安装编译环境&#x1f340;2.安装开发环境一、&#x1f496;更换镜像源 …

阿里工程师太凶残了,竟把服务器泡在“水里”!

万众瞩目的第11个双11要来了&#xff01;这次天猫说要帮大家省500亿&#xff0c;身边加购物车、组队盖楼的同学数不胜数&#xff0c;热闹非凡。 但在阿里&#xff0c;有一位低调的“高冷男”&#xff0c;丝毫不为红红火火的双11所动&#xff0c;依然稳如磐石、淡定自若。 他的…

“我今年 31 岁,工作 7 年,明年退休...”

凌晨 1:30 的北京&#xff0c;商务楼静静地伫立着&#xff0c;街道上的车水马龙&#xff0c;慢慢地停歇了&#xff0c;只有他的工作台灯还没有休息&#xff0c;台灯忽明忽暗地坚持着。凌晨 2:00 的闹钟忍不住提醒他&#xff0c;电脑也偷偷跳出窗口&#xff1a;“主人&#xff0…

据说这是双11前互联网人的一天~

双11前&#xff0c;据说互联网人的一天是这样度过.... 6段故事&#xff0c;6个黑话关键词&#xff0c;生动刻画了双11前互联网人的一天&#xff01; 上午9点&#xff0c;运营找老板汇报双11方案。 运营说&#xff1a;老板&#xff0c;本次营销方案你看需要一些预算资源支持&a…

快速入门docker容器

文章目录&#x1f332;1.拉取一个镜像&#x1f332;2. 在docker里启动一个镜像&#x1f332;3.查看所有的镜像列表&#x1f332;4.删除镜像&#x1f332;5.删除全部image镜像&#x1f332;6.运行tomcat&#x1f332;7.删除所有未运行的容器&#x1f332;8.以守护态运行容器&…

不会玩游戏的程序员不是好作家,《深入理解Java虚拟机》周志明来了!

嘉宾&#xff1a;周志明、杨福川采访、撰文&#xff1a;Satoh_AI这次采访起源来自于我和豆瓣的一位读者有同样的好奇心&#xff0c;为什么网上搜不到周志明老师的更多信息&#xff1f;为什么“80后玩家”可以把本本书都维持在9.0分左右&#xff1f;他的“社恐”到底有多严重?所…

当手机淘宝遇见折叠屏,让购物更随心

华为 5G 新品发布会上&#xff0c;Mate X 正式亮相&#xff0c;淘宝也作为重点展示应用出现在发布会的 PPT 上&#xff0c;同时也成为折叠屏生态联盟应用矩阵的第一位。 现场华为折叠屏上的淘宝多任务演示 伴随手淘技术团队对华为折叠屏适配工作的展开。半年前还只是概念方案的…

SpringBoot2.x 整合 Ueditor

文章目录一、基础准备1. 创建项目并引入依赖2. 下载Ueditor源码3. Java代码整合4. 静态文件整合二、静态页面控制层2.1. index.html2.2. demo1.html2.3. demo2.html2.4. demo3.html2.5. Controller三、配置调整3.1. 图片大小3.2. 修改ueditor.config.js3.3. 修改config.json文件…

无线路由攻击和WiFi密码破解实战[渗透技术]

文章目录一、准备阶段二、攻击阶段1.停止&#x1f6d1;网络管理员2.开启网卡监听模式3. 捕获数据包4.获取数据包5.注入数据包&#xff08;DeAuth洪水攻击&#xff09;5.WiFi密码破解一、准备阶段 攻击主机&#xff1a;kali Linux攻击工具&#xff1a;aircrack-ng、airodump-ng…

支付宝双11狂欢幕后的女程序员:服务全球12亿人,每天和不法分子打攻防战

再过3天&#xff0c;全球最大的购物狂欢节就开始了。 在这个睡不着的午夜&#xff0c;无数男男女女会在闪烁的屏幕前滑屏、抢购、享受秒级付款带来的快感。整个过程大脑分泌的多巴胺&#xff0c;又驱使他们以更快的速度重新填满购物车。 2018年天猫双11成交额2135亿元&#x…

技术直播:程序员副业的修炼指南!(限免报名)

面试造飞机&#xff0c;上班拧螺丝&#xff0c;每天想辞职&#xff0c;但无奈副业还“大器晚成”的样子&#xff01;那可能是你还没有选对副业&#xff01;滴滴 ~福利卡&#xff01;&#xff01;&#xff01;CSDN学院邀请汤小洋老师开设技术直播课《程序员副业之路-三大终极秘籍…

轻松解决Android gradle太慢问题

夫陶公清风千古&#xff0c;余又何人&#xff0c;敢称庶几 一、解决方案 从网上下载对应版本的gradle,然后把gradle压缩包复制到C:\Users\liuxin\.gradle\wrapper\dists\gradle-6.5-all\2oz4ud9k3tuxjg84bbf55q0tn目录下&#xff0c;重新build工程就搞定了。 安卓开发者平台官…

持续交付体系在高德的实践历程

1. 前序 对于工程团队来说&#xff0c;构建一套具有可持续性的、多方面质量保证的交付体系建设&#xff0c;能够为业务价值的快速交付搭建起高速公路&#xff0c;也能为交付过程中的质量起到保驾护航的作用。本文为大家介绍持续交付体系在高德的演进与落地。 2. 持续交付 正…

RuoYi-Cloud 部署篇_01(windows环境 mysql +nginx版本)

文章目录一、基础准备1. 技术选型2. 源码克隆3. 安装依赖4. 将 RuoYi-Cloud 项目导入到 IDEA5. 安装启动Mysql6. 安装启动Redis7. 创建数据库&#xff0c;执行 SQL脚本文件二、安装与配置 nacos2.1. 下载nacos2.2. 安装 nacos2.3. nacos持久化配置2.4. 执行脚本文件2.5. nacos连…

趣头条基于 Flink 的实时平台建设实践

本文由趣头条实时平台负责人席建刚分享趣头条实时平台的建设&#xff0c;整理者叶里君。文章将从平台的架构、Flink 现状&#xff0c;Flink 应用以及未来计划四部分分享。 一&#xff0e;平台架构 1.Flink 应用时间线 首先是平台的架构&#xff0c;2018 年 3 月之前基本都是基…

我!程序猿!被银行套路了!

作者 | 程序猿石头责编 | Carol封图 | CSDN 付费下载自视觉中国话说&#xff0c;你肯定也经常收到各个银行电话推销&#xff0c;可以办理小额贷款/信用卡账单分期/万用金&#xff0c;或者其他乱七八糟的名字的产品。又或者接到电话说&#xff0c;“石头先生&#xff0c;我们有留…

巧妙地在Windows搭建node服务器

夫陶公清风千古&#xff0c;余又何人&#xff0c;敢称庶几 文章目录一、 安装node1. 官网下载node.js2. 测试npm是否成功安装3. 配置npm模块和缓存的存放路径4. 安装express5. 配置npm环境变量二、安装cnpm1.执行安装2. 配置cnpm环境变量一、 安装node 1. 官网下载node.js 官…