本文将介绍如何使用混沌工具对 Pod/Node 进行 CPU 负载故障注入,以达到指定的 CPU 负载百分比。 2. 参数 在进行 CPU 负载故障注入时,我们可以通过以下参数来控制: nice:指定 CPU 负载进程的 nice 值(静态优先级),取值范围为[-20, 19]。 实现原理 混沌工具在进行 CPU 负载故障注入时,主要通过以下方式实现: 启动 chaos_burncpu 进程,空跑 for 循环来消耗 CPU 时间片。 通过以上方法,我们可以轻松地对 Pod/Node 进行 CPU 负载故障注入,从而验证系统在不同负载下的表现,以及监控告警、流量调度、弹性伸缩等能力。 使用腾讯云混沌演练平台实施 CPU 高负载。 故障实现原理是预先在混沌演练平台探针管理处安装腾讯自研 Agent 探针。
本文将介绍如何使用混沌工具对 Pod/Node 进行内存负载故障注入,以达到指定的内存占用百分比。腾讯云混沌演练平台故障动作:标准集群 Pod/普通节点-内存利用率高。 2. 参数 在进行内存负载故障注入时,我们可以通过以下参数来控制: percent:内存使用率,取值是 0 到 100 的整数,默认值为 100。此参数为可选。 实现原理 混沌工具在进行内存负载故障注入时,主要通过以下方式实现: ram 模式:启动进程 chaos_burnmem 不断申请内存,模拟主机/容器内存负载升高。 为了保护该进程在故障注入期间一直存在,不被杀死,可以打开 oomGuard 保护,降低该进程 oom-kill 权重,优先杀死其他进程。 设置高负载的内存故障注入后,可能会使得机器无法登入与控制,请谨慎使用。 cache 模式:通过挂载 tmpfs 来实现内存占用。
实验工作流 实验工作流,包括编排顺序或并行执行的故障注入实验,查看实验状态和结果,暂停实验,支持用YAML或Web UI定义和管理实验。 可视化操作 可视化操作,包括可以在Web UI上点击鼠标,定义实验的范围、故障注入类型和调度规则,最后能展示实验结果。 安全控制 安全控制,包括使用K8S原生提供的基于角色的访问控制功能,来管理故障注入的使用权限。还可以通过设置命名空间注解,来指定允许进行混沌实验的命名空间,进一步保障对混沌实验的控制。 使用K8S原生提供的基于角色的访问控制功能,来管理故障注入的使用权限。 劣势 只能在K8S集群上使用。否则,就只能使用针对节点进行故障注入实验的附带工具chaosd。 临时执行的实验会无限期地运行。 你还希望我聊有关混沌工程的其他什么新话题?欢迎在评论区留言。我会仔细阅读每一条留言。期待听到你的声音。 企业生意好,系统运行稳。你所阅读的文章,来自“吾真本说混沌工程”专栏。
Chaos Mesh 是针对K8S的云原生混沌工程开源平台。 可以用它方便地模拟开发、测试、生产环境中可能出现的各种异常情况,发现系统中潜在的问题。 实验工作流 实验工作流,包括编排顺序或并行执行的故障注入实验,查看实验状态和结果,暂停实验,支持用YAML或Web UI定义和管理实验。 可视化操作 可视化操作,包括可以在Web UI上点击鼠标,定义实验的范围、故障注入类型和调度规则,最后能展示实验结果。 安全控制 安全控制,包括使用K8S原生提供的基于角色的访问控制功能,来管理故障注入的使用权限。还可以通过设置命名空间注解,来指定允许进行混沌实验的命名空间,进一步保障对混沌实验的控制。 使用K8S原生提供的基于角色的访问控制功能,来管理故障注入的使用权限。 劣势 只能在K8S集群上使用。否则,就只能使用针对节点进行故障注入实验的附带工具chaosd。 临时执行的实验会无限期地运行。
腾讯云云顾问混沌演练平台应运而生,通过精准的负载类故障注入,帮助企业提前发现并解决问题,提升系统稳定性。1. 什么是负载类故障注入? 云顾问混沌演练平台如何精准实现负载类故障注入?腾讯云云顾问混沌演练平台利用创新的技术,通过创建稳定的辅助执行环境(称为chaos-helper-pod),实现容器故障的精准注入。 具体步骤如下:动态部署混沌辅助执行Pod: 混沌工程控制平台接收到用户的故障注入请求后,会在目标业务容器所在的节点动态启动一个chaos-helper-pod,这个Pod内置了各种故障注入工具,如CPU 注入前云顾问混沌演练平台容器监控注入后云顾问混沌演练平台容器监控4. 对操作系统的要求腾讯云云顾问混沌演练平台在执行此类故障注入时并不直接依赖目标容器内的操作系统环境,因此对操作系统本身无特殊要求。 小结腾讯云云顾问混沌演练平台通过其创新的PID迁移机制和独立的辅助执行环境,实现了容器负载类故障注入的精确控制,确保故障注入的效果真实、准确,同时保障了混沌平台自身运行的稳定性,成为企业提升容器应用弹性和可靠性的重要利器
背景 前面几篇文章,从两个开源程序chaos-mesh、chaosblade入手,分析混沌工程的原理;然后讲混沌工程实施的完整过程及混沌原则梳理,本文主要是记录之前的知识,用一个例子说明混沌工程是怎么设计的 混沌工程工具系列传送门: 1、 混沌演练工具Chaos-mesh与Chaosblade技术实现与原理分析(1)-腾讯云开发者社区-腾讯云 2、 混沌工程工具:chaos-mesh注入项原理分析( 5、 混沌工程工具:Chaosblade Java业务代码注入原理(5)-腾讯云开发者社区-腾讯云 6、 混沌工程工具:混沌工程实施过程及持久价值(7)-腾讯云开发者社区-腾讯云 7、 混沌工程工具 :混沌工程定位及原则梳理(8)-腾讯云开发者社区-腾讯云 8、 混沌工程工具:一个混沌工程设计的例子(9)-腾讯云开发者社区-腾讯云 初版设计 设计原则 我们面对的系统十分庞大,微服务是数以千计,底层硬件也是数以千计 爆炸半径控制方案,特别是生产环境有损的故障注入,要考虑注入时爆炸半径及恢复时爆炸半径(根据 混沌工程原则 -- 最小化爆炸半径) 5、 补偿能力,如果实验过程中对用户数据有影响,如何在结束时进行补偿
ChaosBlade可针对多达7个场景开展故障注入实验,但网上官方的中英文文档质量欠佳,内容缺失,真心没有站在一般用户的角度来写,只能通过运行blade命令的help了解究竟有什么功能。 图片 一句话介绍 ChaosBlade是阿里巴巴开源的针对7个检验软件系统稳定性场景的混沌工程故障注入开源工具:主机基础资源、CRI容器、K8S平台、Java应用、C++应用、阿里云平台、其他服务。 优势 支持多达7个故障注入场景。 劣势 网上的中英文文档描述过于简略。每个功能往往就一句话。只能把工具装上,运行起来,通过help参数,逆向工程来发现有什么功能。 案例 国内有金融行业的用户,已经基于ChaosBlade开发了混沌工程工具平台,在测试环境注入故障,检验基础设施和容器平台的稳定性。 你所阅读的文章,来自“吾真本说混沌工程”知乎专栏。
1627964088;1627971288&q-key-time=1627964088;1627971288&q-header-list=&q-url-param-list=&q-signature=aa201eb9ef44072c7ab9b834e58235b4ba27211c [3fee80cc9cfda9e6a46d0f937868cd19.jpeg] 对于定义的更新我们提供了迁移工具,帮助用户迁移升级,也会随 release 发布。 更多的故障类型 Chaos Mesh 已经支持了如 NetworkChaos,IOChaos,StressChaos 等系统层面的故障注入,也支持了如 AWSChaos,GCPChaos 这种云服务类型的故障注入 我们在 Chaos Mesh 2.0 中也加入了应用层的故障注入功能。 支持在物理机上进行进程,网络,JVM,压力,磁盘等不同类型的故障注入。
,帮助大家了解混沌工程故障注入的流程,以及在开源框架上的选型策略。 那业界混沌工程实施的工具这么多,那在工行进行混沌工程故障演练平台建设的时候,就要思考是选择自研故障注入工具,还是直接引用开源的故障注入工具。如果引用开源的故障注入工具,引入哪款开源工具。 2019 年 3 月阿里开源混沌工程工具 ChaosBlade,同年 9 月,工商银行完成基于 ChaosBlade 的混沌工程故障演练平台建设,并在开发中心,业务研发中心对行内重点敏感业务线进行试点, 最终,混沌工程故障注入介质将会安装在这些基础设施上实施各类的故障。 在基础实施层之上,基于 ChaosBlade 进行二次开发的混沌工具故障注入介质。 所以可以在电票前置、票据服务、电票业务、数据库这四个子节点内部以及节点之间的联系共 9 处地方实施故障注入。
具体来说,根据我在之前所参与的相关咨询项目中的观察,大部分企业实践混沌工程,主要集中在两个方面。第一,构建工具平台。包括工具平台的建设过程,以及相关的系统架构。第二,故障注入实验。 如果是甲方购买了乙方的虚拟机和容器平台,然后再在上面做相关的故障注入实验,本质上是甲方再次花钱为乙方做回归测试。企业一旦在上面两个方面开展混沌工程应用工作,过程就相对固化下来。 2 你们所实践的混沌工程应用,与传统的测试团队的软件测试,以及与运维部门的传统故障演练,有什么区别?差异化优势在哪里?3 如何保障故障注入后的最小化爆炸半径? 4 你们所开展的故障注入实验,是否主要针对基础设施层或容器平台层?是否有针对应用服务层做故障注入实验? 5 你们向领导汇报混沌工程成效时,具体使用了哪些指标?成效数据前后是如何对比的?你可以思考上面这9组问题。选出一个能启发你把混沌工程和软件系统稳定性工程实践做得有意思的,并尝试解决该问题。
包括故障库、故障注入编排和故障注入演练。其中故障库中的原子故障,主要是针对基础设施层和容器平台层的虚拟机、容器、pod和node。 如果是甲方购买了乙方的虚拟机和容器平台,然后再在上面做相关的故障注入实验,本质上是甲方再次花钱为乙方做回归测试。 企业一旦在上面两个方面开展混沌工程应用工作,过程就相对固化下来。 2 你们所实践的混沌工程应用,与传统的测试团队的软件测试,以及与运维部门的传统故障演练,有什么区别?差异化优势在哪里? 3 如何保障故障注入后的最小化爆炸半径? 4 你们所开展的故障注入实验,是否主要针对基础设施层或容器平台层?是否有针对应用服务层做故障注入实验? 5 你们向领导汇报混沌工程成效时,具体使用了哪些指标?成效数据前后是如何对比的? 你可以思考上面这9组问题。选出一个能启发你把混沌工程和软件系统稳定性工程实践做得有意思的,并尝试解决该问题。
注:它们Pod标签都有app: nginx,service服务发现根据这个标签选择,version是为后面定义版本设置的
在SLA中常用几个9来衡量提供服务的稳定性,9越多就代表团队提供的服务稳定性越高,故障时间越短。 下面举例说明。如果某团队提供的服务满足4个9,那么一年发生故障的时间可以通过以下方式计算。 365天×24小时/天×0.0001 = 0.876小时=52.56分钟 当前很多公司的服务要求满足5个9的要求,这时故障时间的计算方式如下。 如果要将混沌工程落地实践,首先要有一个快速、方便的故障注入工具,然后结合混沌工程的理论进行故障演练,从而提高系统的稳定性。 用于混沌工程的开源工具有很多,站在团队的角度,要选取平台化工具,作为故障演练的统一入口,需要提供方便、易用的交互方式,以自动完成故障注入。 提供多样化、可视化的故障注入自动化平台,作为各种演练和故障测试及验证的统一入口。 故障注入平台能够帮助业务人员发现更多影响业务稳定性的未知问题,验证警告的有效性和完整性,以及业务的故障预案是否有效。
什么是混沌工程? 2. 混沌工程的实践原则 3. 混沌工程的好处 4. 基于上述原则如何落地? 4.1 故障注入能力 4.2 平台化建设 4.3 应用推广 5. 以下是两个 star 较多、开源社区较为活跃的混沌工程项目。故障注入都做到了开箱即用、业务无感知,不需要业务配合写一些混沌工程相关的代码,也不需要更改系统的部署逻辑。 4.2 平台化建设 基于故障注入的能力,将混沌实验的流程平台化,让用户更方便的使用。如下图: ? (1)平台产品层 基于上文「3. 、串行/并行、手动/自动的执行「故障注入、稳态验证、故障清除」等动作 观测大盘:混沌实验期间,实时清晰的观测「稳态指标、故障指标、止损指标」。 混沌工程的迭代方向 混动工程实验可以简单如在测试环境中某个实例运行 kill -9 来模拟一个服务节点的突然宕机,也可以复杂到在线上挑选一小部分流量,按一定规律或频率自动运行一系列实验。
bf06d3d2-b21c-4684-9b00-4b51ff62fb0b.png 腾讯云混沌演练平台(CFG)提供便捷、灵活、安全的混沌工程故障演习服务,除自动化故障注入外,还提供了观测指标 目前腾讯云混沌演练平台已提供服务器(CVM)、Kubernetes(TKE)、Mysql(CDB)、Redis(CRS)、负载均衡(CLB)等多款云产品的故障注入场景。 image.png 混沌工程作为保障分布式系统稳定性的重要技术,成为推动企业IT韧性系统建设的强大助力。 2021 年,中国信通院以混沌工程为切入点开展了一系列工作,对国内一批成熟度高、具有示范标杆作用的优秀混沌工程实践案例进行了调研和评选。 在会上,首届“混沌工程先锋实践者”优秀案例评选结果正式揭晓,腾讯云混沌工程对于云计算服务应用案例顺利入选。 989439f2-0f9e-49fb-a850-49e4bebda458.jpg
在这篇博文中,我将带领大家探索如何在服务网格中进行故障注入实验,分享Chaos Engineering的最佳实践,并深入研究服务网格如Istio中的故障注入功能。 对于关心系统健壮性、微服务稳定性和混沌工程 的读者,这篇文章将为你提供丰富的实践知识! 引言 混沌工程不仅仅是故意制造故障,而是一种科学的方法,通过故障注入来发现系统中的潜在问题,并验证系统的弹性。 服务网格,作为微服务架构的通信层,为我们提供了强大的故障注入工具,帮助我们更好地进行混沌实验。 正文 1. 什么是混沌工程? 混沌工程是一种通过主动注入故障来验证系统健壮性的方法。 2.1 Istio的故障注入功能 Istio允许我们在服务间的通信中注入故障,如延迟、错误等。 总结 混沌工程为我们提供了一种验证系统健壮性的强大工具。通过服务网格,我们可以更加方便地进行故障注入实验,验证微服务架构的弹性。正如混沌工程的创始人所说,要“通过混沌来建立信心”。
调查数据显示,近 20% 的受访用户所负责的产品可用性低于 2 个 9(意味着用户每个月要忍受超过 7.3 小时的服务故障),超过 4 成产品的可用性低于 3 个 9(意味着用户每个月要忍受超过 44 混沌工程使用工具分布-供给侧 故障类型:故障注入类型以基础资源故障为主。 1)故障注入类型聚焦于基础资源层面,应用层及容器关注度偏低:网络资源故障和计算资源故障是最通常采用的故障注入类型,而应用类和容器类故障注入的关注度相对较低。 图6. 图9. 实施混沌工程的最大障碍 图10. 用户对演习的认识 第二部分【系统稳定性现状】 可用性:企业产品可用性仍有提升空间 1)调查数据显示,近 20% 的受访用户所负责的产品可用性低于 2 个 9,近半数产品的可用性能低于 3 个 9。
与运维团队一起实践了近一年的混沌工程后,获得了以下启发: 混沌工程的价值,就是要提升应对云生产环境线上事故的时效性和有效性 混沌工程实验与故障注入测试相辅相成,在证实稳态假说后,前者可以转化为后者 稳态行为假说 但有些企业的运维部门在实践混沌工程时,主要是用工具厂商所提供的工具,或使用自研的工具,进行故障注入探索性测试。其间缺乏针对该企业以前所发生的生产环境线上事故设计混沌工程实验。 说到了测试,那么混沌工程实验与故障注入测试的区别是什么? 混沌工程实验与故障注入测试相辅相成 混沌工程实验是要证实或证伪复杂云系统在故障注入后的稳态假说是否成立,并研究其间系统的运行模式、未知的失效模式以及监控告警的有效性,以便增强系统稳定性设计。 当然,这里说到的“覆盖”,发生在我们已经修复了混沌工程实验所发现的漏洞之后。只有在此时,度量成效才有意义。 可以使用下面公式来计算混沌工程实验与故障注入测试的成效。
本节分析Chaosblade的几个经典注入项Servelet、Redis Jedis库、MySQL JDBC库故障注入的原理。 混沌工程工具系列传送门: 1、 混沌工程工具:Chaos-mesh与Chaosblade技术实现与原理分析(1)-腾讯云开发者社区-腾讯云 2、 混沌工程工具:chaos-mesh注入项原理分析 混沌工程工具:混沌工程定位及原则梳理(8)-腾讯云开发者社区-腾讯云 8、 混沌工程工具:一个混沌工程设计的例子(9)-腾讯云开发者社区-腾讯云 Servlet delay工作流程展示 对/login Redis-Jedis库注入原理 原理:通过jedis连接库,进行故障注入 注入点匹配 注入class是redis.clients.jedis.Protocol,注入method是sendCommand MySQL注入原理 原理:通过jdbc连接库,进行故障注入。
所以构建稳定性系统很重要的一环是混沌工程,在可控范围或环境下,通过故障注入,来持续提升系统的稳定性和高可用能力。 本文会着重介绍什么是混沌工程,为什么需要混沌工程以及混沌工程相关工具与实践。 最后一个,混沌工程很重要的一点是控制爆炸半径,也就是试验影响面,防止预期外的资损发生,可以通过环境隔离或者故障注入工具提供的配置粒度来控制。 命令的书写遵循阿里巴巴集团内多年故障测试和演练实践抽象出的故障注入模型,层次清晰,易于阅读和理解,降低了混沌工程实施的门槛。 动态加载,无侵入ChaosBlade 采用动态故障注入的方式,执行混沌实验时用户系统不需要做任何系统改造或发布,开箱即用。 : https://github.com/chaosblade-io/chaosblade/wiki/%E6%B7%B7%E6%B2%8C%E5%AE%9E%E9%AA%8C%E6%A8%A1%E5%9E