Chaos mesh使用指南

2020-07-01  本文已影响0人  蒙浩

在云系统越来越普遍的今天,越来越多的公司开始把自己的服务做成微服务部署到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访问了。

上一篇下一篇

猜你喜欢

热点阅读