Chaos-mesh
在 Kubernetes 裡放個破壞小精靈,檢視你系統的韌性以及看你能不能抓到他
安裝 chaos-mesh
增加 helm repo
helm repo add chaos-mesh https://charts.chaos-mesh.org
新增 namespaces
kubectl create ns chaos-mesh
下載 helm values.yaml 檔案
wget https://github.com/chaos-mesh/chaos-mesh/blob/master/helm/chaos-mesh/values.yaml
編輯values.yaml,根據 K8S 使用的container runtime 做設定 此範例使用的是 docker
runtime: docker
socketPath: /var/run/docker.sock
透過 helm 安裝
helm install chaos-mesh chaos-mesh/chaos-mesh -n=chaos-mesh -f values.yaml
透過 NodePort 進入 dashboard
kubectl get svc -n chaos-mesh | grep dashboard
chaos-dashboard NodePort 10.43.147.66 <none> 2333:31252/TCP,2334:30208/TCP
進入 dashboard 需要透過 token,可以透過 Click here 取得建立token 步驟
根據所需權限,選擇namespace或是整個 Cluster,並按照步驟建立rbac 和 token
取得token後輸入,即可登入
建立測試程式
建立名為 web-show 的測試程式,此程式可以在網頁上看到 ping kube-system pod 的結果圖表
到 chaos-mesh 的 github 取得範例
https://github.com/chaos-mesh/chaos-mesh/tree/master/examples/web-show
執行 deploy.sh
建立完成後,從 NodePort 進入web-show
建立網路延遲實驗
建立一個實驗,類型為網路攻擊的延遲,設為 10ms
目標設定為 web-show pod,持續 10s,然後建立
查看web-show 發現 ping 的封包確實有持續10s延遲
回到實驗頁面,看到實驗已執行完成
建立網路封包遺失實驗
建立一個實驗,類型為網路封包遺失,遺失率為 100%
目標設定為 web-show pod,持續 10s,然後建立
查看 web-show,確定封包有遺失
建立 Pod Failure 實驗
建立 Pod Fault 類型的 pod Failure 實驗
選定 web-show pod,持續時間為永久,送出實驗
查看 pod 狀態
查看實驗狀態
停止實驗,確認 pod 恢復正常
建立 Pod CPU Memory 壓力測試實驗
建立 Stress Test 實驗,讓 Pod CPU 和 Memory 滿載
選定 web-show pod,持續時間為永久,送出實驗
此範例程式的資源 limit 為 cpu 0.3 core memort 20Mi
查看pod監控值,CPU Memory都滿載
建立多個混沌實驗(workflow)
除了建立單一實驗外,還可以建立多個實驗,多個實驗可以同時進行,或是依序進行,接下來範例建立一個workflow,內容為執行
network delay 10ms 持續20s -> 暫停 5s -> network loss 100% 持續20s
可以透過 UI 來制定 workflow
不過以下範例是透過 yaml 來制定
1.建立workflow yaml 檔
apiVersion: chaos-mesh.org/v1alpha1
kind: Workflow
metadata:
name: network-workflow-serial
spec:
entry: network-entry
templates:
- name: network-entry
templateType: Serial
deadline: 240s
children:
- workflow-network-delay-chaos
- suffix-suspending
- workflow-network-loss-chaos
- name: workflow-network-delay-chaos
templateType: NetworkChaos
deadline: 20s
networkChaos:
direction: to
action: delay
mode: all
selector:
labelSelectors:
"app": "web-show"
delay:
latency: "10ms"
correlation: "100"
jitter: "0ms"
- name: workflow-network-loss-chaos
templateType: NetworkChaos
deadline: 20s
networkChaos:
direction: to
action: loss
mode: all
selector:
labelSelectors:
"app": "web-show"
loss:
loss: '100'
correlation: "100"
- name: suffix-suspending
templateType: Suspend
deadline: 5s
使用 kubectl apply 建立 workflow
查看 web-show 結果,確實先 delay,暫停,再 loss
查看 workflow 頁面的實驗拓墣圖
總結
透過chaos-mesh,可以直接對pod 注入網路問題,或是壓力測試等等,其實還有很多種類的錯誤可以來玩,像是時間錯誤和 http request 的問題,透過問題的注入,來檢視系統服務的韌性以及目前的告警機制和log系統是否能察覺問題發生的原因,持續更新告警機制,從而讓平台跟系統變得越來越強大
Last updated
Was this helpful?