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

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.local
  podSubnet: 10.244.0.0/16
  serviceSubnet: 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 inject
  mode: one # the mode to run chaos action; supported modes are one/all/fixed/fixed-percent/random-max-percent
  selector: # pods where to inject chaos actions
    namespaces:
      - default
    labelSelectors:
      "app": "web-show"  # the label of the pod for chaos injection
  delay:
    latency: "10ms"
  duration: "30s" # duration for the injected chaos experiment
  scheduler: # 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-example
  namespace: chaos-testing
spec:
  action: pod-failure
  mode: one
  value: ""
  duration: "30s"
  selector:
    labelSelectors:
      "name": "mysql-pod" #选择mysql pod
  scheduler:
    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-example
  namespace: chaos-testing
spec:
  action: partition
  mode: one
  selector:
    labelSelectors:
      "name": "mysql-pod" # 为mysql添加chaso测试
  direction: to
  target:
    selector:
      namespaces:
        - tidb-cluster-demo
      labelSelectors:
        "name": "mysql-pod"
    mode: one
  duration: "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: one
  selector:
    namespaces:
      - tidb-cluster-demo
  stressors:
    cpu:
      workers: 1
  duration: "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: redis
  name: redis
spec:
  replicas: 1
  selector:
    matchLabels:
      name: redis
  template:
    metadata:
      labels:
        name: redis
      name: redis
    spec:
      containers:
        - name: redis
          image: redis
          volumeMounts:
            - name: redis-data
              mountPath: "/data"
            - name: redis-config
              mountPath: "/usr/local/etc"
          command:
            - "redis-server"
          args:
            - "/usr/local/etc/redis.conf"
      volumes:
        - name: redis-data
          hostPath:
            path: /redis/data
        - name: redis-config
          hostPath:
            path: /redis/config

---
apiVersion: v1
kind: Service
metadata:
  name: redis-svc
  labels:
    app: bcia
    ms-name: redis
spec:
  selector:
    app: bcia
    ms-name: redis
  type: NodePort
  ports:
    - port: 6379
      targetPort: 6379
      nodePort: 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-example
  namespace: chaos-testing
spec:
  action: pod-failure
  mode: one
  value: ""
  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-example
  namespace: chaos-testing
spec:
  action: partition
  mode: one
  selector:
    labelSelectors:
      "name": "mysql-pod"
  direction: to
  target:
    selector:
      namespaces:
        - tidb-cluster-demo
      labelSelectors:
        "name": "redis" # 选择目标pod
    mode: one
  duration: "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: one
  selector:
    namespaces:
      - tidb-cluster-demo
  stressors:
    cpu:
      workers: 1
  duration: "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: 1
   selector:
     app: zookeeper-test
   template:
     metadata:
       labels:
         app: zookeeper-test
     spec:
       containers:
       - name: zookeeper-test
         image: zookeeper
         ports:
         - containerPort: 2181
         ports:
         - containerPort: 2888
-------
apiVersion: v1
kind: Service
metadata:
  name: zookeeper
spec:
  type: NodePort
  ports:
   - port: 2181
     nodePort: 30005
  selector:
    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-example
  namespace: chaos-testing
spec:
  action: pod-failure
  mode: one
  value: ""
  duration: "30s"
  selector:
    labelSelectors:
      "app": "zookeeper-test"# 选择目标pod
  scheduler:
    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-example
  namespace: chaos-testing
spec:
  action: partition
  mode: one
  selector:
    labelSelectors:
      "name": "mysql-pod"
  direction: to
  target:
    selector:
      namespaces:
        - tidb-cluster-demo
      labelSelectors:
        "app": "zookeeper-test" # 选择目标pod
    mode: one
  duration: "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-cpu
  namespace: chaos-testing
spec:
  mode: one
  selector:
    namespaces:
      - tidb-cluster-demo
  stressors:
    cpu:
      workers: 1
  duration: "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是对分布式系统生态的补充和完善。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值