作者:丁源 RadonDB 测试负责人
负责 RadonDB 云数据库、容器化数据库的品质性能测试,迭代验证。对包含云数据库以及容器化数据库性能和高可用计划有深入研究。
近日,国内多家网站同时产生短期服务不可用景象,一夜冲上圈内热搜。据官网回答,是因为局部服务器机房产生故障,导致网站无法访问。为了防止这种状况,进步零碎架构的可靠性,保障业务的连续性,心愿能在故障之前找到导致“崩盘”的缺口。
十多年前,国外的互联网公司就曾经在云化、分布式、微服务等前沿技术的应用过程中,遇到了相似的问题,并由此诞生了 混沌工程。
什么是混沌工程?
混沌工程即 Chaos Engineering[1],被定义为 在分布式系统上进行试验的学科,目标是建设对系统抵挡生产环境中失控条件的能力以及信念。混沌工程属于一门新兴的技术学科,是一种进步技术架构弹性能力的简单技术手段。最早由 Netflix 技术部门创立了名为 Chaos Monkey 的我的项目,通过随机性测试,来检测零碎架构的衰弱状况,并设计足够的预案来应答可能到来的新一轮故障。
随着云化技术的倒退和云原生 (Cloud Native) 的概念的提出,混沌工程的反软弱哲学思想,也引入了云原生体系,可简略高效地为零碎进步容错能力。
什么是 ChaosBlade Operator?
ChaosBlade[2] 是阿里巴巴开源的一款遵循混沌工程原理和混沌试验模型的试验注入工具,帮忙企业晋升分布式系统的容错能力,并且在企业上云或往云原生零碎迁徙过程中业务连续性保障。
而 ChaosBlade Operator[3] 是 Kubernetes 平台试验场景的实现,将混沌试验通过 Kubernetes 规范的 CRD 形式定义,很不便的应用 Kubernetes 资源操作的形式来创立、更新、删除试验场景,包含应用 kubectl、client-go 等形式执行,而且还能够应用上述的 chaosblade cli 工具执行。
把试验定义为 Kubernetes CRD 资源,将试验模型中的四局部映射为 Kubernetes 资源属性,完满将混沌试验模型与 Kubernetes 申明式设计联合在一起(依附混沌试验模型便捷开发场景,并联合 Kubernetes 设计理念)。
- 通过 kubectl 或者编写代码间接调用 Kubernetes API 来创立、更新、删除混沌试验,可清晰获取资源模拟实验的执行状态,实现 Kubernetes 故障注入的标准化。
- 通过 Chaosblade cli 形式 可十分不便的执行 Kubernetes 试验场景,查问试验状态等。
- ChaosBlade 混沌试验模型与 Kubernetes CRD 的联合,实现 根底资源、应用服务、Docker 容器 等场景复用,不便 Kubernetes 场景的扩大。
反对的场景
目前反对的试验场景由以下三大类(继续更新中):
分类 | 资源品种 | 具体场景 |
---|---|---|
Node | CPU | 指定 CPU 使用率 |
网络 | 指定网卡、端口、IP 包提早、丢包、包阻塞、包反复、包乱序、包损坏等。 | |
过程 | 指定过程 Hang、强杀指定过程等 | |
磁盘 | 指定目录磁盘填充、磁盘 IO 读写负载等 | |
内存 | 指定内存使用率 | |
Pod | 网络 | 指定网卡、端口、IP 等包提早、丢包、包阻塞、包反复、包乱序、包损坏等 |
磁盘 | 指定目录磁盘填充、磁盘 IO 读写负载等 | |
内存 | 指定内存使用率 | |
Pod | 杀 Pod | |
Container | CPU | 指定 CPU 使用率 |
网络 | 指定网卡、端口、IP 等包提早、丢包、包阻塞、包反复、包乱序、包损坏等 | |
过程 | 指定过程 Hang、强杀指定过程等 | |
磁盘 | 指定目录磁盘填充、磁盘 IO 读写负载等 | |
内存 | 指定内存使用率 | |
Container | 杀 Container |
部署 ChaosBlade Operator
执行 Kubernetes 试验场景前,需 提前部署ChaosBlade Operator。
Helm 包下载地址:
https://github.com/chaosblade-io/chaosblade-operator/releases
本系列文章默认 Helm v3 版本
留神:须要新建一个 namespace!
部署指令:
helm install kube-system/chaosblade-operator-1.2.0-v3.tgz
helm install chaosblade-operator chaosblade-operator-1.2.0-v3.tgz --namespace chaosblade
回显示例:
ChaosBlade Operator 启动后,将在每个节点别离部署 chaosblade-tool
和 chaosblade-operator
Pod。通过如下指令查看部署后果,若 Pod 都处于 Running 状态,则部署胜利。
kubectl get pod -n chaosblade -o wide | grep chaosblade
查问部署后果示例:
对于部署失败的常见起因,请关注后续 混沌工程工具系列 专题介绍。
试验环境
本系列文章将应用在 KubeSphere 上装置的 ChaosBlade Operator,对 RadonDB 系列容器化产品进行测试。
KubeSphere 环境参数:
- 规格 8 核 16G
- 磁盘大小 500GB
- 节点数 4
在 KubeSphere 环境部署胜利后,控制台状态如下图所示。
下期预报
本篇为混沌工程工具 ChaosBlade Opeator 系列的入门篇,次要介绍混动工程以及试验工具 ChaosBlade Operator。
下一期,咱们将应用部署的 ChaosBlade Opeator 工具,针对 Node 类资源各种场景进行测试。同时也会介绍在不同场景下混沌工程是如何帮忙开发者发现零碎中的问题,并达到逐步建设高可用的韧性零碎的目标。
参考
[1]. 混沌工程准则:https://principlesofchaos.org
[2]. ChaosBlade:https://github.com/chaosblade-io/chaosblade
[3]. ChaosBlade Operator:https://github.com/chaosblade-io/chaosblade-operator
[4].Kubernetes 中文文档:https://chaosblade-io.gitbook.io/chaosblade-help-zh-cn/blade