混沌測試平台 Chaos Mesh


混沌測試平台 Chaos Mesh

Chaos Mesh 是PingCap團隊研發的一款用於測試kubernetes環境的工具。通過人為地在集群中注入故障來檢測集群對故障的處理以及恢復能力。更詳細信息可以查看這篇文章。混沌測試與針對某個應用測試的區別為:前者更傾向於在現有大規模集群中進行測試,影響因素可能來自集群中的方方面面;而后者更專注於對應用本身功能的測試。

GitHub上目前有兩款star數高的混沌項目,litmuschaos-mesh,這兩款的功能和場景都基本類似,前者目前提供的混沌注入功能比較多,但后者提供了簡單的UI界面。兩者都可以擴展自定義的場景。

下面以chaos-mesh為例簡單看下其提供的功能。

minikube下的安裝可以參見官方文檔

在安裝完后可以看到如下pod,一個controller,一個daemonset以及一個dashboard

# kubectl get pod -n chaos-testing
NAME                                      READY   STATUS    RESTARTS   AGE
chaos-controller-manager-fd568948-hl8wv   1/1     Running   0          59m
chaos-daemon-5zfzh                        1/1     Running   0          59m
chaos-dashboard-6d8466f445-2k8sl          1/1     Running   0          59m

dashboard示意圖如下:

目前支持的混沌測試如下:

# kubectl get crd
NAME                          CREATED AT
iochaos.chaos-mesh.org        2020-07-29T08:18:55Z
kernelchaos.chaos-mesh.org    2020-07-29T08:18:55Z
networkchaos.chaos-mesh.org   2020-07-29T08:18:55Z
podchaos.chaos-mesh.org       2020-07-29T08:18:55Z
stresschaos.chaos-mesh.org    2020-07-29T08:18:55Z
timechaos.chaos-mesh.org      2020-07-29T08:18:55Z

其原理也比較簡單,類似istio的網格方式,通過admission webhook給pod注入sidecar,然后通過該sidecar進行故障注入。其支持的webhook如下:

# kubectl get MutatingWebhookConfiguration chaos-mesh-sidecar-injector
NAME                          WEBHOOKS   AGE
chaos-mesh-sidecar-injector   7          61m
# kubectl get ValidatingWebhookConfiguration
NAME                    WEBHOOKS   AGE
chaos-mesh-validation   6          61m

使用起來也比較簡單,以pod-failure類型的故障為例,主要創建一個PodChaos的crd對象,並將selector設置為pod的標簽即可。

apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:
  name: pod-failure-example
  namespace: chaos-testing
spec:
  action: pod-failure # 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.kubernetes.io/component": "tikv" # the label of the pod for chaos injection
  scheduler: # scheduler rules for the running time of the chaos experiments about pods.
    cron: "@every 5m"

總體來說,混沌測試更像是集成驗證的一部分,通過在現有運行環境中注入故障來發現系統或應用的兼容性問題,故障恢復能力問題等。典型的一個場景可以參考PingCap官方提供的Chaos Mesh 能做些什么?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM