Chaos mesh使用指南
在云系统越来越普遍的今天,越来越多的公司开始把自己的服务做成微服务部署到kubernetes上,并托管到云供应商。
微服务带来的好处自不必说,服务更好的隔离性,服务之间的依赖度下降,微服务的复杂度下降方便维护等等。但是微服务也带来了很大的问题,比如我们之前把所有服务放到一起,做到服务的可用性为97%,而换做微服务,就算只有两个微服务,每个稳定性到98%,总体系统的稳定性也只有96.04%,反而比之前做一个统一的服务器的稳定性差了。
那么,如何让微服务也能有较高的稳定性呢?
今天我们就来介绍一种方法,就是chaos mesh这种针对微服务的混沌测试系统。
Chaos mesh 安装
这部分官方提供的安装教程很详细,本人也在本地亲测过,可以完美运行[https://chaos-mesh.org/docs/installation/installation]
Chaos mesh 使用
这个地方有点小问题,chaos mesh提供的测试文件,labelSelectors使用的是"app.kubernetes.io/component": "tikv"。这个地方要根据你自己创建的pod的label来填写,如果lable里面没有使用app.kubernetes.io里面的字段,只使用了app或者其他字段,你就使用app或者其他字段,这个地方需要注意,不要硬套官方的yaml。
所以我就用我本地已有的服务做了一个实验,本地服务brokerclinet:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: brokerclinet
spec:
selector:
matchLabels:
app: brokerclinet
replicas: 1 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: brokerclinet
spec:
containers:
- name: brokerclinet
image: brokerclient:1.0.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5000
---
apiVersion: v1
kind: Service
metadata:
name: brokerclinet
namespace: default
spec:
externalTrafficPolicy: Cluster
ports:
- nodePort: 32100
port: 5000
protocol: TCP
targetPort: 5000
selector:
app: brokerclinet
sessionAffinity: None
type: NodePort
部署成功后,可以部署podschaos了:
apiVersion: pingcap.com/v1alpha1
kind: PodChaos
metadata:
name: podk
spec:
action: pod-kill # the specific chaos action to inject; supported actions: pod-kill/pod-failure
mode: one # the mode to run chaos action; supported modes are one/all/fixed/fixed-percent/random-max-percent
duration: "60s" # duration for the injected chaos experiment
selector: # pods where to inject chaos actions
labelSelectors:
app: brokerclinet # the label of the pod for chaos injection
scheduler: # scheduler rules for the running time of the chaos experiments about pods.
cron: "@every 5m"
这里要注意,官方给出的metadata里面会有namespace字段,但是如果要管理的pod不是该namesapce的话,就使用你pod所属的namespace。因为我的服务的namespace是default,所以我部署这个PodChaos时就没有填写namespace。
这个地方如果你使用官方提供的chaos-testing,你可能就会发现你的chaos的controller manager,dashbord或者deamon的pod被删了。。。。。别问我怎么知道的。
chaos mesh这个工具提供了dashbord,方便大家通过网页查看当前生效的chaos任务。要想访问该网页,可以使用:
kubectl port-forward -n chaos-testing svc/chaos-dashboard 2333:2333
你可以通过127.0.0.1:2333来访问,界面如下图:
image.png
如果你已经执行了上面的yaml文件,那么在Experiments栏就会出现你配置的chaos任务:
image.png
敲黑板了,这里要用chrome浏览器访问dashbord,要不会出现Experiments,Events,Archives界面无法正常显示,我用的是FireFox,最后只能用chrome访问了。