githu地址 https://github.com/zhuxiatong/chaos-mesh-test
Index
Chaos Mesh Test
Kubernetes 环境准备
 Kubernetes项目节点硬件配置
 Kubernetes项目节点软件配置
  Kubernetes项目节点系统安装步骤
    Kubernetes 选择安装语言
    Kubernetes 选择是否更新系统
    Kubernetes 硬盘选择
    Kubernetes 网络配置
    Kubernetes 代理配置
    Kubernetes 安装ssh
    Kubernetes 系统安装总览
  Kubernetes项目部署
   虚拟机内部安装docker
   Kubernetes项目部署
    修改Hosts
    关闭基础配置
    配置master节点
    配置flannel网络
    配置node节点
    Kubernetes部署成功
Choas Mesh
 混沌测试
 安装Choas Mesh
 测试Choas Mesh
 进行混沌测试
  web show显示
  定义实验配置文件
  创建chaos 实例
  观察结果
  删除chaos 实例
  系统恢复到正常状态
  Chaos Dashboard 配置
Mysql集群 chaos测试
 部署mysql集群
  创建存储目录
  创建PV
  创建master server 与slave server
  创建mysql实例
 chaos测试
  PodChaos测试
   测试之前的图像变化
   创建PodChaos实例
   测试结果
  NetworkChaos 测试
   测试之前的图像变化
   创建NetworkChaos实例
   测试结果
  StressChaos 测试
   测试之前的图像变化
   创建StressChaos实例
   测试结果

Redis集群 chaos测试
 部署Redis集群
  创建NFS存储
  创建PV
  创建Configmap
  创建headless服务
  创建Redis StatefluSet
 chaos测试
  PodChaos测试
   测试之前的图像变化
   创建PodChaos实例
   测试结果
  NetworkChaos 测试
   测试之前的图像变化
   创建NetworkChaos实例
   测试结果
  StressChaos 测试
   测试之前的图像变化
   创建StressChaos实例
   测试结果

Zookeeper集群 chaos测试
 部署Zookeeper集群
  安装NFS
  创建PV
  创建Zookeeper集群
  创建服务
 chaos测试
  PodChaos测试
   测试之前的图像变化
   创建PodChaos实例
   测试结果
  NetworkChaos 测试
   测试之前的图像变化
   创建NetworkChaos实例
   测试结果
  StressChaos 测试
   测试之前的图像变化
   创建StressChaos实例
   测试结果

测试总结

Chaos Mesh Test[Top]

本项目会使用Chaos Mesh对三个分布式系统进行Chaos测试。三个分布式系统分别为Mysql(sql数据库)集群,Redis(nosql数据库)集群和ZooKeeper(分布式协调器)集群。

本项目会采用两种Kubernetes项目来整合Chaos Mesh 来进行测试; 两个节点 的Kubernetes项目。

Kubernetes 环境准备 [Top]

Kubernetes项目节点硬件配置 [Top]

Kubernetes项目的节点采用的是VMware Workstation虚拟机虚拟出来的虚拟机。
内存为4GB

处理器为Intel® Core™ i5-7300HQ cpu @2.5Ghz中的2个处理器,每个处理器有一个内核

网络连接选择桥接网络(为了虚拟机有自己的ip地址)

I/O控制器为LSI logic.

虚拟磁盘类型为 SCSI(S) 大小为30G.

两个节点的Kubernetes项目采用的配置和上面单个节点的配置是一样的。只不过变成了两个虚拟机构成的Kubernetes项目。

以上的所有的虚拟机均为一台真实的物理机虚拟出来的,不存在性能差别。

Kubernetes项目节点软件配置[Top]

本实验采用的镜像均为:ubuntu-18.04.4-live-server-amd64.iso(Ubuntu 服务器镜像版)

Kubernetes项目节点系统安装步骤[Top]

Kubernetes 选择安装语言[Top]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CVACNYkH-1597478565471)(https://note.youdao.com/yws/api/personal/file/FBC3688E05D54EB6BC5DBD89C10375C1?method=download&shareKey=9673e092913a58aedafa91ef722fd9dd)]

Kubernetes 选择是否更新系统[Top]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vtp50YR9-1597478565474)(https://note.youdao.com/yws/api/personal/file/1BC1690DC2BD43028DDD79D005297ADC?method=download&shareKey=9673e092913a58aedafa91ef722fd9dd)]

Kubernetes 硬盘选择[Top]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vWr9TXHT-1597478565476)(https://note.youdao.com/yws/api/personal/file/46FE572FE95A4FC4BF8DFDF33B86151F?method=download&shareKey=9673e092913a58aedafa91ef722fd9dd)]

Kubernetes 网络配置[Top]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JE4VE2a5-1597478565479)(https://note.youdao.com/yws/api/personal/file/14331651283C442A917B8D2A1469E0EC?method=download&shareKey=9673e092913a58aedafa91ef722fd9dd)]

Kubernetes 代理配置[Top]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ltxxxNFZ-1597478565483)(https://note.youdao.com/yws/api/personal/file/B4EE7275393E4E9E9F3B62775FB47498?method=download&shareKey=9673e092913a58aedafa91ef722fd9dd)]

Kubernetes 安装ssh[Top]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NBjhCENn-1597478565485)(https://note.youdao.com/yws/api/personal/file/BFFBFCC64568498AB3A5213FF2B561FD?method=download&shareKey=9673e092913a58aedafa91ef722fd9dd)]

Kubernetes 系统安装总览[Top]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bol3TvjA-1597478565486)(https://note.youdao.com/yws/api/personal/file/A7A391D9C8D044519D2C908E504209A7?method=download&shareKey=9673e092913a58aedafa91ef722fd9dd)]

Kubernetes项目部署[Top]

虚拟机内部安装docker[Top]

两个节点上的docker安装版本是19.03.12

截图如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MVwo3d2A-1597478565488)(https://note.youdao.com/yws/api/personal/file/E6FB712FDF2E420F90E6ED576951C746?method=download&shareKey=5ba8b915721dc096ea46346397cd7bc7)]

Kubernetes项目部署[Top]

修改Hosts [Top]

修改Hosts 配置文件让集群内部可以通过别名访问别的主机
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0p9TiSl3-1597478565491)(https://note.youdao.com/yws/api/personal/file/A3D9A22811FA4C8191F977177AA6231D?method=download&shareKey=5ba8b915721dc096ea46346397cd7bc7)]

关闭基础配置[Top]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AAq1erBp-1597478565492)(https://note.youdao.com/yws/api/personal/file/6B6C9D81F08A4A4B9DCA5B1FF08AC644?method=download&shareKey=5ba8b915721dc096ea46346397cd7bc7)]

配置master节点[Top]

创建工作目录

mkdir  /home/zxt/working
cd /home/zxt/working

创建kubeadm.conf配置文件

  1. 创建Kubernetes的管理工具kubeadm对应的配置文件.生成配置文件的命令如下:

kubeadm config print init-defaults ClusterConfiguration > kubeadm.conf

使用配置文件,可以指定docker镜像仓库,便于内网快速部署。

2.修改kubeadm.conf中的

-imageRepository

-kubernetesVersion

命令如下:

 #修改 imageRepository: k8s.gcr.io#改为 registry.cn-beijing.aliyuncs.com/imcto
imageRepository: registry.aliyuncs.com/google_container#修改kubernetes版本kubernetesVersion: v1.13.0#改为kubernetesVersion: v1.13.1
kubernetesVersion: v1.13.1

3.修改api服务器地址

localAPIEndpoint:advertiseAddress: 192.168.80.144 ## 这个ip地址是master主机的IP地址bindPort: 6443

4.配置子网网路

networking:dnsDomain: cluster.localpodSubnet: 10.244.0.0/16serviceSubnet: 10.96.0.0/12
scheduler: {}

5.拉去Kubernetes所需要的镜像

#查看所需要的镜像
$ kubeadm config images list --config kubeadm.conf
registry.cn-beijing.aliyuncs.com/imcto/kube-apiserver:v1.13.1
registry.cn-beijing.aliyuncs.com/imcto/kube-controller-manager:v1.13.1
registry.cn-beijing.aliyuncs.com/imcto/kube-scheduler:v1.13.1
registry.cn-beijing.aliyuncs.com/imcto/kube-proxy:v1.13.1
registry.cn-beijing.aliyuncs.com/imcto/pause:3.1
registry.cn-beijing.aliyuncs.com/imcto/etcd:3.2.24
registry.cn-beijing.aliyuncs.com/imcto/coredns:1.2.6
#下载全部当前版本的k8s所关联的镜像
kubeadm config images pull --config ./kubeadm.conf

6.初始化Kubernetes环境
初始化并启动

$ sudo kubeadm init --config ./kubeadm.conf

k8s启动成功输出内容较多,但是记住末尾的内容非常重要。
截图如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l2Fc8EEQ-1597478565495)(https://note.youdao.com/yws/api/personal/file/3FFC3628CFA7447099200F9BCA492DB7?method=download&shareKey=5ba8b915721dc096ea46346397cd7bc7)]
7.执行如下命令

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

8.创建系统服务并启动
启动Kubelet 设置为开机自启动
启动Kubelet服务

$ sudo systemctl enable kubelet
$ sudo systemctl start kubelet

9.验证msater主节点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QBGQLv30-1597478565496)(https://note.youdao.com/yws/api/personal/file/1A2B2167B1094436AFC0FBEEDA869CE5?method=download&shareKey=5ba8b915721dc096ea46346397cd7bc7)]

配置flannel网络[Top]

获取flannel.yml
在该项目的 \src\yaml中有该配置文件
将配置文件运行就获取了网络插件

kubectl apply -f kube-flannel.yml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-84cyHURC-1597478565498)(https://note.youdao.com/yws/api/personal/file/C35DE440B0D040B1BBCB1DD3B8644AA0?method=download&shareKey=5ba8b915721dc096ea46346397cd7bc7)]

配置node节点[Top]

确认主机基础环境

1.确认关闭 swap
apt install -y selinux-utils
swapoff -a
2. 禁止selinux
setenforce 0
3.确认关闭防火墙
ufw disable

1.启动Kubernetes Node主机环境

  #启动kubelet 设置为开机自启动
$ sudo systemctl enable kubelet#启动k8s服务程序
$ sudo systemctl start kubelet

2.将master机器的/etc/kubernetes/admin.conf传到到node
3.登录node终端,创建基础kube配置文件环境

$ mkdir -p $HOME/.kube
$ sudo cp -i $HOME/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

4.将node节点加入master集群

kubeadm join 192.168.1.113:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:3ebd15dea5e361af3c221dd71ec732c963d22cc59d5c8514c1b401b611d85f06

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cZn7DZiM-1597478565501)(https://note.youdao.com/yws/api/personal/file/BC98FA75D0E947CB87371BF0934A8762?method=download&shareKey=5ba8b915721dc096ea46346397cd7bc7)]
5. 在子节点上运行flannel网络插件

kubectl apply -f kube-flannel.yml

最后配置的Kubernetes的版本是 v1.13.1 而dockers是19.03.12的差距太多。怕版本差距太大,对测试引起不必要的影响。

就把Kubernetes的版本变成 V1.17.0

Kubernetes部署成功[Top]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dDwvK46r-1597478565502)(https://note.youdao.com/yws/api/personal/file/A1754A52170A427F87D32AD9AF50E4C2?method=download&shareKey=5ba8b915721dc096ea46346397cd7bc7)]

Choas Mesh[Top]

混沌测试[Top]

为了专门解决大规模分布式系统的不确定性,可以将混沌工程学视为发现系统弱点的实验的促进。
这些实验遵循四个步骤:

1. 首先将“稳定状态”定义为指示正常行为系统的某些可测量输出。
2. 假设在对照组和实验组中这种稳态都将持续。
3.引入反应现实世界的变量,例如崩溃的服务器,发生故障的硬盘驱动器,断开的网络连接等。
4.试图通过寻找对照组和实验组之间的稳态差异来反映这一假设。

破环稳态越难,对系统行为的信心越大。如果发现了一个弱点,就有一个改进的目标,那就是在给行为在整个系统中显现出来。

安装Choas Mesh[Top]

执行脚本

curl -sSL https://raw.githubusercontent.com/chaos-mesh/chaos-mesh/master/install.sh | bash

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qnvkvBD6-1597478565504)(https://note.youdao.com/yws/api/personal/file/ABF83F2342624706B393A3E124730D7B?method=download&shareKey=ee1a1c3ac12896c767ccc33bec8849d6)]

测试Choas Mesh [Top]

kubectl get pod -n chaos-testing

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-83q6jqPp-1597478565507)(https://note.youdao.com/yws/api/personal/file/824601F8E8504F36829F680CB4BF08B7?method=download&shareKey=ee1a1c3ac12896c767ccc33bec8849d6)]

进行混沌测试[Top]

curl -sSl https://raw.githubusercontent.com/pingcap/chaos-mesh/master/examples/web-show/deploy.sh | sh
##上面这条代码会在ubuntu上提示shell环境不同
curl -sSl https://raw.githubusercontent.com/pingcap/chaos-mesh/master/examples/web-show/deploy.sh | bash
##改成bash就正常运行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P0fr2kf9-1597478565509)(https://note.youdao.com/yws/api/personal/file/97DA5616DAF34E6B8698E2888B2D67EC?method=download&shareKey=ee1a1c3ac12896c767ccc33bec8849d6)]

web show显示[Top]

可以通过master主机节点的8081端口查看混沌集群的情况。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GCFD6jOC-1597478565510)(https://note.youdao.com/yws/api/personal/file/2EBDCEB9D5E2459E9D67FDACD91A3CBE?method=download&shareKey=ee1a1c3ac12896c767ccc33bec8849d6)]

定义实验配置文件[Top]

定义混乱实验配置yaml

apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:name: web-show-network-delay
spec:action: delay # the specific chaos action to injectmode: one # the mode to run chaos action; supported modes are one/all/fixed/fixed-percent/random-max-percentselector: # pods where to inject chaos actionsnamespaces:- defaultlabelSelectors:"app": "web-show"  # the label of the pod for chaos injectiondelay:latency: "10ms"duration: "30s" # duration for the injected chaos experimentscheduler: # scheduler rules for the running time of the chaos experiments about pods.cron: "@every 60s"

创建chaos 实例[Top]

kubectl apply -f network-delay.yaml

观察结果[Top]

结果如图所示
每60秒就会有10毫秒的延迟。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nkOOrkuZ-1597478565512)(https://note.youdao.com/yws/api/personal/file/9073655EFD6C4F17973366E886B06DFA?method=download&shareKey=ee1a1c3ac12896c767ccc33bec8849d6)]

删除chaos 实例[Top]

kubectl delete -f network-delay.yaml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5vbwyglB-1597478565516)(https://note.youdao.com/yws/api/personal/file/9AC0750614A64459B6E28A9CE708DBC7?method=download&shareKey=ee1a1c3ac12896c767ccc33bec8849d6)]

系统恢复到正常状态[Top]

在删除chaos实例后,整个系统恢复到正常状态。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OROBxq9a-1597478565517)(https://note.youdao.com/yws/api/personal/file/A2951A73534F4020B9F76985803C7F3C?method=download&shareKey=ee1a1c3ac12896c767ccc33bec8849d6)]

Chaos Dashboard 配置[Top]

Chaos Dashboard是用于管理,设计,监视Chaos实验的Web UI。
将端口转发到2333

kubectl port-forward -n chaos-testing svc/chaos-dashboard 2333:2333

但是,转发之后.访问同样的访问在8081端口的web-show项目可以访问。但是端口转发之后,无法访问Chaos Dashboard项目。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1gcOX2uM-1597478565519)(https://note.youdao.com/yws/api/personal/file/7206721DE4634CD0930971DA51F6FA32?method=download&shareKey=ee1a1c3ac12896c767ccc33bec8849d6)]
由于只能在本机访问,而其他机器不能访问。而本项目的测试的虚拟机安装的是服务器镜像没有KDE桌面环境。就不在使用 Chaos Dashboard 来进行chaos实验。
会使用 web-show 和命令行来进行chaos实验。

但是,转发之后.访问同样的访问在8081端口的web-show项目可以访问。但是端口转发之后,无法访问Chaos Dashboard项目。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RZdSIwR9-1597478565520)(https://note.youdao.com/yws/api/personal/file/5C2A34493F7548D4A22E24807F1353C9?method=download&shareKey=ee1a1c3ac12896c767ccc33bec8849d6)]

下面的截图,利用别的机器访问,可以看到在8081端口的web-show的项目正常访问,而在2333端口的项目不能访问。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dPIU45Hz-1597478565522)(https://note.youdao.com/yws/api/personal/file/40893EEA932544B780248A8B8B0DA1F3?method=download&shareKey=ee1a1c3ac12896c767ccc33bec8849d6)]

Mysql集群 chaos测试[Top]

部署mysql集群[Top]

创建存储目录[Top]

mkdir -p /server/yaml/app/mysql
cd /server/yaml/app/mysql

创建PV[Top]

集群部署

详细的yaml文件 请看src/yaml/mysql/集群/mysql.pv.yaml

创建master server 与slave server[Top]

详细的yaml文件 请看src/yaml/mysql/集群/mysql.statefulset.yaml

创建mysql实例[Top]

详细的yaml文件 请看src/yaml/mysql/集群/mysql_configmap.yaml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gHYKyz2i-1597478565525)(https://note.youdao.com/yws/api/personal/file/88CEFB065CA148D989B613B9529846B0?method=download&shareKey=82c7ed3ce6b1f080dda6c23324fe88ac)]
由于虚拟机的性能问题,在创建第二个Pod的时候始终在初始化阶段CrashLoopBackOff.
所以mysql只能部署单节点的,进行测试。

单节点的mysql的yaml配置  请看src/yaml/mysql/单节点/mysql-rc.yaml
src/yaml/单节点/mysqlsvc.ymal

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5aZ9LKDK-1597478565526)(https://note.youdao.com/yws/api/personal/file/6A698FC13AB8489290ECAFA804861D0D?method=download&shareKey=82c7ed3ce6b1f080dda6c23324fe88ac)]

chaos测试[Top]

PodChaos测试[Top]

PodChaos测试有两种模拟Pod故障,一种是pod failure 另一种是pod kill .

pod failure 用于模拟pod 掉落的情况
pod kill 用于模拟pod 被杀死的情况。

由于机器性能不太好,在开启Kubernete集群之后,就会出现卡顿情况。以下测试就不会使用占用过大资源的操作。

(笔记本的风扇响个不停,电脑一卡一开的,把很多没有必要应用都删了,但是还是卡顿不行。可能是硬件的问题吧。8g内存运行了两个虚拟机和idea卡因该也是正常的。)
所以,像IOChaos KernelChaos这类需要到系统资源的chaos测试没有办法测试。

测试之前的图像变化[Top]

在进行整个实验之前 Kube-system Pod 的图像如图所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z9xkwZHh-1597478565528)(https://note.youdao.com/yws/api/personal/file/922A37B1BC874D93A822BFD9D6A43A32?method=download&shareKey=82c7ed3ce6b1f080dda6c23324fe88ac)]

创建PodChaos实例[Top]

测试pod failure情况

apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:name: pod-failure-examplenamespace: chaos-testing
spec:action: pod-failuremode: onevalue: ""duration: "30s"selector:labelSelectors:"name": "mysql-pod" #选择mysql podscheduler:cron: "@every 2m"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TPvAzuNH-1597478565531)(https://note.youdao.com/yws/api/personal/file/0E95FB8A3627449EAFBDE8C022A38472?method=download&shareKey=82c7ed3ce6b1f080dda6c23324fe88ac)]

测试结果[Top]

在运行20分钟后,发现Kube-system pod的相应时间会有所提高。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qQFq0zzb-1597478565533)(https://note.youdao.com/yws/api/personal/file/42E179F603834AFAB09662D0CCD70EBC?method=download&shareKey=82c7ed3ce6b1f080dda6c23324fe88ac)]

NetworkChaos 测试[Top]

Network chaos 操作分为两类:
1.网络分区操作通过阻止Pod之间的通信将Pod划分为几个独立的子网。
2.网络防战混乱操作涵盖常规的网络故障,例如网络延迟,重复,丢失和损坏。

测试之前的图像变化 [Top]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-70MMyfh8-1597478565535)(https://note.youdao.com/yws/api/personal/file/5AFE43868E614D3F884DDF4B3F7D8400?method=download&shareKey=82c7ed3ce6b1f080dda6c23324fe88ac)]

创建NetworkChaos实例[Top]

测试Partition

apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:name: network-partition-examplenamespace: chaos-testing
spec:action: partitionmode: oneselector:labelSelectors:"name": "mysql-pod" # 为mysql添加chaso测试direction: totarget:selector:namespaces:- tidb-cluster-demolabelSelectors:"name": "mysql-pod"mode: oneduration: "10s"scheduler:cron: "@every 15s"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MgSn1Uf9-1597478565536)(https://note.youdao.com/yws/api/personal/file/32DADB1A2D86491F842E989492D863FD?method=download&shareKey=82c7ed3ce6b1f080dda6c23324fe88ac)]

测试结果[Top]

在运行十分钟之后,测试图像如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qLT3w2Zg-1597478565539)(https://note.youdao.com/yws/api/personal/file/EA8519DDBEE44905BC76DA6CB36794D8?method=download&shareKey=82c7ed3ce6b1f080dda6c23324fe88ac)]
可以看穿 network chaos 测试对mysql单节点对Kubernetes集群的稳定会造成影响。

StressChaos 测试[Top]

StressChaos会在Pod上产生大量压力。StressChaos通过chaos-daemon内部注入到目标pod中。

测试之前的图像变化[Top]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wwOprAkv-1597478565540)(https://note.youdao.com/yws/api/personal/file/417B810E2F6A4B0D82665BD3DBE5E97B?method=download&shareKey=82c7ed3ce6b1f080dda6c23324fe88ac)]

创建StressChaos实例[Top]

apiVersion: chaos-mesh.org/v1alpha1
kind: StressChaos
metadata:name: burn-cpu
spec:mode: oneselector:namespaces:- tidb-cluster-demostressors:cpu:workers: 1duration: "30s"scheduler:cron: "@every 2m"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zjPRv7f5-1597478565541)(https://note.youdao.com/yws/api/personal/file/7D05058342C84DEB87CC1C7131F558B8?method=download&shareKey=82c7ed3ce6b1f080dda6c23324fe88ac)]

测试结果[Top]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j860J2Rt-1597478565543)(https://note.youdao.com/yws/api/personal/file/AFABB7FD30184EA989E44E1BD66A21FE?method=download&shareKey=82c7ed3ce6b1f080dda6c23324fe88ac)]

Redis集群 chaos测试[Top]

部署Redis集群[Top]

创建NFS存储[Top]

# 安装提供文件系统
sudo apt install nfs-utils
# 安装rpc
sudo apt install rpcbind
# 新增/etc/exports文件,用于设置需要共享的路径
/usr/local/k8s/redis/pv1 192.168.0.0/24(rw,sync,no_root_squash)
/usr/local/k8s/redis/pv2 192.168.0.0/24(rw,sync,no_root_squash)
/usr/local/k8s/redis/pv3 192.168.0.0/24(rw,sync,no_root_squash)
/usr/local/k8s/redis/pv4 192.168.0.0/24(rw,sync,no_root_squash)
/usr/local/k8s/redis/pv5 192.168.0.0/24(rw,sync,no_root_squash)
/usr/local/k8s/redis/pv6 192.168.0.0/24(rw,sync,no_root_squash)
# 创建对象目录
mkdir -p /usr/local/k8s/redis/pv{1..6}
# 启动NFS和rpcbind服务
sudo systemctl restart rpcbind
sudo systemctl restart nfs
sudo  systemctl enable nfs

创建PV[Top]

pv 详细可见 项目src/ymal/redis/redis.pv.ymal

创建Configmap[Top]

# 将redis的配置文件转化为Configmap
Configmap的详细可见 项目src/yaml/redis/redis.configmap.yaml

创建headless服务[Top]

# 详细配置 在项目 src/yaml/redis/redis.headless-service.yaml

创建Redis StatefluSet[Top]

#创建StatefluSet
#详细配置 在项目 src/yaml/redis/redis.stateflueSet.yaml
# 由于本次测试的机器性能有限,就在k8s部署redis单节点------
apiVersion: apps/v1
kind: Deployment
metadata:labels:name: redisname: redis
spec:replicas: 1selector:matchLabels:name: redistemplate:metadata:labels:name: redisname: redisspec:containers:- name: redisimage: redisvolumeMounts:- name: redis-datamountPath: "/data"- name: redis-configmountPath: "/usr/local/etc"command:- "redis-server"args:- "/usr/local/etc/redis.conf"volumes:- name: redis-datahostPath:path: /redis/data- name: redis-confighostPath:path: /redis/config---
apiVersion: v1
kind: Service
metadata:name: redis-svclabels:app: bciams-name: redis
spec:selector:app: bciams-name: redistype: NodePortports:- port: 6379targetPort: 6379nodePort: 30009---
requirepass 123
bind 0.0.0.0
save 900 1
save 300 10
save 60 10000

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ECEGwVKL-1597478565546)(https://note.youdao.com/yws/api/personal/file/E4E663EF748349DE9137A50CCD3AF0E1?method=download&shareKey=9c549b2914755a1db9d45e2a9c7530dd)]
查看pod确定redis正确运行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bpwclkUV-1597478565547)(https://note.youdao.com/yws/api/personal/file/1FA0BDD15D044B9DB1ADA5C4703C392E?method=download&shareKey=9c549b2914755a1db9d45e2a9c7530dd)]

chaos测试[Top]

PodChaos测试[Top]

测试之前的图像变化[Top]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zaun9cB7-1597478565551)(https://note.youdao.com/yws/api/personal/file/E7B38C8A9CB44D769998709D6333F38B?method=download&shareKey=9c549b2914755a1db9d45e2a9c7530dd)]

创建PodChaos实例[Top]

apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:name: pod-failure-examplenamespace: chaos-testing
spec:action: pod-failuremode: onevalue: ""duration: "30s"selector:labelSelectors:"name": "redis"scheduler:cron: "@every 2m"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qWUedOqL-1597478565561)(https://note.youdao.com/yws/api/personal/file/A3F5960597C44DDBB12D03FB17EEC35E?method=download&shareKey=9c549b2914755a1db9d45e2a9c7530dd)]

测试结果[Top]

在运行chaos测试十分钟之后的,图形如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-twN9ttiv-1597478565562)(https://note.youdao.com/yws/api/personal/file/DF2824C50FA2449C91366608F4D826DA?method=download&shareKey=9c549b2914755a1db9d45e2a9c7530dd)]

NetworkChaos 测试[Top]

测试之前的图像变化 [Top]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6nMKAxys-1597478565563)(https://note.youdao.com/yws/api/personal/file/F415B719530846D5B4DF804ADD9B736E?method=download&shareKey=9c549b2914755a1db9d45e2a9c7530dd)]

创建NetworkChaos实例[Top]

apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:name: network-partition-examplenamespace: chaos-testing
spec:action: partitionmode: oneselector:labelSelectors:"name": "mysql-pod"direction: totarget:selector:namespaces:- tidb-cluster-demolabelSelectors:"name": "redis" # 选择目标podmode: oneduration: "10s"scheduler:cron: "@every 15s"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3ZcU7K4h-1597478565566)(https://note.youdao.com/yws/api/personal/file/F785EED592FE4CA9AB7D03F8B20FD7E7?method=download&shareKey=9c549b2914755a1db9d45e2a9c7530dd)]

测试结果[Top]

在运行chaso测试十分钟之后,图形如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4g6ARIyj-1597478565567)(https://note.youdao.com/yws/api/personal/file/4B8B9F51938449678D3490E877F1ADD7?method=download&shareKey=9c549b2914755a1db9d45e2a9c7530dd)]

StressChaos 测试[Top]

测试之前的图像变化[Top]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Miugz02m-1597478565568)(https://note.youdao.com/yws/api/personal/file/E77ABAF00FFF4BB0B22583462F4808F5?method=download&shareKey=9c549b2914755a1db9d45e2a9c7530dd)]

创建StressChaos实例[Top]

apiVersion: chaos-mesh.org/v1alpha1
kind: StressChaos
metadata:name: burn-cpu
spec:mode: oneselector:namespaces:- tidb-cluster-demostressors:cpu:workers: 1duration: "30s"scheduler:cron: "@every 2m"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8fgY6Ism-1597478565571)(https://note.youdao.com/yws/api/personal/file/0342B7D48475498E8F3AE13115289343?method=download&shareKey=9c549b2914755a1db9d45e2a9c7530dd)]

测试结果[Top]

在运行chaos测试十分钟之后,图形如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QKBUGlKK-1597478565573)(https://note.youdao.com/yws/api/personal/file/65442C8433134DC8AEF7325F97300006?method=download&shareKey=9c549b2914755a1db9d45e2a9c7530dd)]

Zookeeper集群 chaos测试[Top]

部署Zookeeper集群[Top]

安装NFS[Top]

# 安装提供文件系统
sudo apt install nfs-utils
# 安装rpc
sudo apt install rpcbind
# 新增/etc/exports文件,用于设置需要共享的路径
/usr/local/k8s/redis/pv1 192.168.0.0/24(rw,sync,no_root_squash)
/usr/local/k8s/redis/pv2 192.168.0.0/24(rw,sync,no_root_squash)
/usr/local/k8s/redis/pv3 192.168.0.0/24(rw,sync,no_root_squash)
/usr/local/k8s/redis/pv4 192.168.0.0/24(rw,sync,no_root_squash)
/usr/local/k8s/redis/pv5 192.168.0.0/24(rw,sync,no_root_squash)
/usr/local/k8s/redis/pv6 192.168.0.0/24(rw,sync,no_root_squash)
# 创建对象目录
mkdir -p /usr/local/k8s/redis/pv{1..6}
# 启动NFS和rpcbind服务
sudo systemctl restart rpcbind
sudo systemctl restart nfs
sudo  systemctl enable nfs

创建PV[Top]

PV配置文件 详情请看src/yaml/zookeeper/zookeeper.pv.yaml

创建Zookeeper集群[Top]

statefulset 的详细配置 请看src/yaml/zookeeper/zookeeper.statefulset.yaml

创建服务[Top]

service的详细配置请看 项目的src/yaml/zookeeper/zookeeper.service.yaml
#由于本项目测试机器的硬件不足,就部署了一个一个单节点的zookeeper来进行测试
#zookeeper.rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:name: zookeeper-test
spec:replicas: 1selector:app: zookeeper-testtemplate:metadata:labels:app: zookeeper-testspec:containers:- name: zookeeper-testimage: zookeeperports:- containerPort: 2181ports:- containerPort: 2888
-------
apiVersion: v1
kind: Service
metadata:name: zookeeper
spec:type: NodePortports:- port: 2181nodePort: 30005selector:app: zookeeper

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FMx0pSCq-1597478565576)(https://note.youdao.com/yws/api/personal/file/CCBA84873AB34AF1B26959B1BBEC48B9?method=download&shareKey=92f6f8b71b21108b72b560628af62a02)]

chaos测试[Top]

PodChaos测试[Top]

测试之前的图像变化[Top]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jpcZkWzd-1597478565577)(https://note.youdao.com/yws/api/personal/file/E5DE7DFEE47B4048A20D6A3F557591E1?method=download&shareKey=92f6f8b71b21108b72b560628af62a02)]

创建PodChaos实例[Top]

apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:name: pod-failure-examplenamespace: chaos-testing
spec:action: pod-failuremode: onevalue: ""duration: "30s"selector:labelSelectors:"app": "zookeeper-test"# 选择目标podscheduler:cron: "@every 2m"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WLNIWfVs-1597478565579)(https://note.youdao.com/yws/api/personal/file/47C118513ADA4F6183821C01FF473E64?method=download&shareKey=92f6f8b71b21108b72b560628af62a02)]

测试结果[Top]

在运行十分钟之后的图像如图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nViHCixT-1597478565580)(https://note.youdao.com/yws/api/personal/file/C9C64524B68B49E3B26DD86E01760DBF?method=download&shareKey=92f6f8b71b21108b72b560628af62a02)]

NetworkChaos 测试[Top]

测试之前的图像变化 [Top]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RtPSIF7r-1597478565582)(https://note.youdao.com/yws/api/personal/file/32E7D135C5314A75AD474585B5AB1CB8?method=download&shareKey=92f6f8b71b21108b72b560628af62a02)]

创建NetworkChaos实例[Top]

apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:name: network-partition-examplenamespace: chaos-testing
spec:action: partitionmode: oneselector:labelSelectors:"name": "mysql-pod"direction: totarget:selector:namespaces:- tidb-cluster-demolabelSelectors:"app": "zookeeper-test" # 选择目标podmode: oneduration: "10s"scheduler:cron: "@every 15s"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J3nZlxjB-1597478565583)(https://note.youdao.com/yws/api/personal/file/B3913E3E4419469DA5096B72DDC84FF3?method=download&shareKey=92f6f8b71b21108b72b560628af62a02)]

测试结果[Top]

运行十分钟之后的测试结果如图所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ly9MFZ6T-1597478565586)(https://note.youdao.com/yws/api/personal/file/83B59AF20F4749F180317F4D4695C6A7?method=download&shareKey=92f6f8b71b21108b72b560628af62a02)]

StressChaos 测试[Top]

测试之前的图像变化[Top]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1B3gPvhz-1597478565587)(https://note.youdao.com/yws/api/personal/file/6A3175B678CA4D44A8301FB4C5B743C4?method=download&shareKey=92f6f8b71b21108b72b560628af62a02)]

创建StressChaos实例[Top]

apiVersion: chaos-mesh.org/v1alpha1
kind: StressChaos
metadata:name: burn-cpunamespace: chaos-testing
spec:mode: oneselector:namespaces:- tidb-cluster-demostressors:cpu:workers: 1duration: "30s"scheduler:cron: "@every 2m"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FIvz0n7M-1597478565590)(https://note.youdao.com/yws/api/personal/file/BF1D34BC5444483E8F5352B87857BD69?method=download&shareKey=92f6f8b71b21108b72b560628af62a02)]

测试结果[Top]

在运行二十分钟之后,图像如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O4fV5Iqd-1597478565591)(https://note.youdao.com/yws/api/personal/file/E32F4B7C3A8F49549F83D710EF890A19?method=download&shareKey=92f6f8b71b21108b72b560628af62a02)]

测试总结[Top]

经过了这么这些测试,对Chaos Mesh测试有了一定的了解。Chaos Mesh的目标是提前人为的制造出一些可能会发生的故障来测试运行在Kubernetes的系统的容错性。

分布式系统的单个模块由docker管理。 这个分布式单个模块的组合和聚合都是由Kubernetes对Docker进行编排的。

Docker里面的单个模块的生命周期(或者说是故障维护)是由Docker维护的。

Docker对单个项目进行了抽象,提取Docker Image(单个项目的组成形式的抽象),Container(单个项目的具体实现)Repository(存放各种项目的容器)
而docker的实现基于Linux的命名空间(实现容器的隔离性)控制组(实现资源的审计和限制)内核能力机制(更细粒度的权限控制)Linux虚拟网络(实现了容器之间的通信)

分布式系统的整体的生命周期是由Kubernetes维护的。

Kubernetes对分布式整个系统进行抽象,提取出来Pod(容器组)
RC(Replication Controller pod的生命周期)Deployment(对RC的进一步封装 连续变化的“部署过程”导致的最终状态)Service(外界与容器交互的通道)
数据卷(分布式系统的持久化)Namespace(分布式子系统之间的隔离) 等来维护整个分布式系统。

但是一旦Kubeenetes出现故障,排查起来就会很困难,所以增加了Chaos Mesh 看看单个的Pod或者是整体硬件的能否对Kubernetes造成什么影响。

早发现早解决问题。这个Chaos Mesh是对分布式系统生态的补充和完善。

Chaos Mesh Test(在k8s对mysql,redis zookeeper 进行chaos 测试)相关推荐

  1. 混沌网格(Chaos Mesh)的设计和工作原理

    原文发表于kubernetes中文社区,为作者原创翻译 ,原文地址 更多kubernetes文章,请多关注kubernetes中文社区 目录 为什么选择混沌网格(Chaos Mesh)? 混沌网格(C ...

  2. 「我的工作是制造混沌」,我与 Chaos Mesh® 的故事

    作者:殷成文,Maintainer of Chaos Mesh 这段时间北京真是冷得可怕,朋友圈晒出各种零下 20 度的照片,在这样一个寒冷的时候,总是想给自己找点温暖的事情去做.这几天闲时就回顾起自 ...

  3. Chaos Mesh 实战分享丨通过混沌工程验证 GreatDB 分布式部署模式的稳定性

    Chaos Mesh 最初作为开源分布式数据库 TiDB 的测试平台而创建,是一个多功能混沌工程平台,通过混沌测试验证分布式系统的稳定性.本文以万里安全数据库软件 GreatDB 分布式部署模式为例, ...

  4. 技术分享 | 在GreatDB分布式部署模式中使用Chaos Mesh做混沌测试

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 1. 需求背景与万里安全数据库软件GreatDB分布式部署模式介绍 1.1 需求背景 混沌测试是检测分布式系统不确定性.建 ...

  5. 在 Kubernetes 实施混沌工程—— Chaos Mesh® 原理分析与控制面开发

    Chaos Mesh® 是由 TiDB 背后的 PingCAP 公司开发,运行在 Kubernetes 上的混沌工程(Chaos Engineering)系统.简而言之,Chaos Mesh® 通过运 ...

  6. Chaos Mesh 实践

    介绍 Chaos mesh 是云原生时代的系统高可用演练平台,基于 Chaos mesh 可以无缝衔接 K8S,精准全面的覆盖问题场景,发现问题,为业务系统高可用保驾护航. 环境准备 操作系统:Mac ...

  7. 【Chaos Mesh官方文档】Quick Start

    Quick Start (Test Recommended) 快速开始(建议用于测试) This document describes how to quickly start Chaos Mesh ...

  8. 【Chaos Mesh官方文档】Chaosd Introduction

    总目录 读我 关于CM CM介绍:这篇文档介绍ChaosMesh的概念,用例,核心优势和架构 基本功能:这篇文档描述了CM的基本特性,包括错误注入,混沌工作流,可视化操作和安全保证 安装&部署 ...

  9. Java项目:网上图书商城系统(java+SSM+Jsp+MySQL+Redis+JWT+Shiro+RabbitMQ+EasyUI)

    源码获取:博客首页 "资源" 里下载! 这个项目涉及到Shiro整合JWT.秒杀功能所具备的基本要求(限流.乐观锁.接口隐藏.JMeter高并发测试等等).消息中间件RabbitM ...

最新文章

  1. IDEA设置运行tomcat即生成war包
  2. 网络模型 - 随机网络,无标度网络,分层网络
  3. express项目创建步骤
  4. 15款帮助你实现响应式导航的 jQuery 插件
  5. 九. Python基础(9)--命名空间, 作用域
  6. Spring AOP原理及拦截器
  7. 网易云信集成视频教程(六):如何快速实现iOS下IM自定义消息收发?
  8. java使用dom4j读取xml的例子
  9. mysql通过data目录恢复数据库
  10. python scratch unity_Unity3D研究院之2D游戏开发制作原理(二十一)
  11. 2010 Stanford Local ACM Programming Contest-H解题报告
  12. C语言中你可能会用到的字符串函数的代码
  13. hibernate 调用存储过程
  14. java课设模板_java课程设计模板
  15. jlink接口定义接stm32_图解Stm32使用jlink程序时jtag接口(SW和JTAG模式)的简化方法
  16. 黑苹果音频卡顿_DXOMARK 公布无线音箱音质基准:苹果华为 Sonos 上榜
  17. 清明祭曾祖@20130402
  18. HALO博客配置华为云OSS上传附件
  19. 移动端SEO的一些疑问
  20. JS判断客户端是Android还是iOS

热门文章

  1. 破解TCP为Windows7下的迅雷提速(驱动方式修改)
  2. 10个常用的软件测试工具,你不容错过
  3. 个性化鼠标指针·光标
  4. 马云背后的计算机天才,马云背后的女强人,仅用1年时间身价就高达百亿,网友:跟对了人...
  5. 从“老婆”到“俞渝”,李国庆5377条微博透露出了多少秘密?
  6. Java语言brea使用方法
  7. 为精简成本 诺基亚将在芬兰本土进行裁员
  8. Google电话面试都问什么问题?
  9. 把一元钱兑换成1分,2分,5分的硬币,有多少种对法,编程输出所有方法
  10. Batch Momentum