雲原生 | 混沌工程工具 ChaosBlade Operator Node 篇

做者:丁源 RadonDB 測試負責人node

負責 RadonDB 雲數據庫、容器化數據庫的質量性能測試,迭代驗證。對包括雲數據庫以及容器化數據庫性能和高可用方案有深刻研究。mysql

接上期《混沌工程工具 ChaosBlade Opeator 系列的入門篇》,本期將使用 ChaosBlade Opeator 工具,針對 Node 類資源的應用場景進行測試,測試場景包括:git

  1. CPU 負載場景
  2. 網絡延遲場景
  3. 網絡丟包場景
  4. kill 指定進程
  5. stop 指定進程

| 實驗環境

測試對象

基於 KubeSphere 平臺的 RadonDB MySQL 容器化數據庫進行測試。github

RadonDB MySQL 部署說明請參見 在 KubeSphere 中部署 RadonDB MySQL 集羣。sql

環境參數

集羣名稱 主機類型 CPU Memory
KubeSphere 高可用類型 8C 16G
RadonDB MySQL - 4C 16G

測試環境部署完成後,便可從如下五個針對節點的場景作相應驗證。數據庫

1. CPU 負載場景

1.1 測試目標

指定節點作 CPU 負載 80% 驗證。json

1.2 開始測試

配置 yaml 測試參數值。api

apiVersion: chaosblade.io/v1alpha1
kind: ChaosBlade
metadata:
  name: cpu-lode
spec:
  experiments:
  - scope: node
    target: cpu
    action: fulllode
    desc: "increase node cpu load by names"  #實驗模型名稱
    matchers:
    - name: names
      value:
      - "worker-s001"  #測試對象 node 名稱
    - name: cpu-percent
      value: "80"      #節點負載百分比
    - name: ip
      value:192.168.0.20      #節點負載百分比

選擇一個節點,修改 node_cpu_load.yaml 中的 names 值。
瀏覽器

1.3 測試驗證

在 Node 節點,使用 top 命令能夠看到節點 CPU 達到負載 80% 預期效果。微信

2. 網絡延遲場景

2.1 測試準備

登陸 Node 節點,使用 ifconfig 命令查看網卡信息,將系統默認的網卡名稱指定到 eth0

2.2 測試目標

指定節點 worker-s001 添加 3000 毫秒訪問延遲,延遲時間上下浮動 1000 毫秒。

2.3 開始測試

選擇一個節點,修改 delay_node_network_by_names.yaml 中的 names 值。對 worker-s001 節點訪問丟包率 100%。

開始測試。

kubectl apply -f delay_node_network_by_names.yaml

查看實驗狀態。

kubectl get blade delay-node-network-by-names -o json

2.4 測試驗證

從節點訪問 Guestbook。

$ time echo "" | telnet 192.168.0.18
echo ""  0.00s user 0.00s system 35% cpu 0.003 total
telnet 192.168.1.129 32436  0.01s user 0.00s system 0% cpu 3.248 total

中止測試。能夠刪除測試進程或者直接刪除 blade 資源。

kubectl delete -f delay_node_network_by_names.yaml

kubectl delete blade delay-node-network-by-names

3. 網絡丟包場景

3.1 測試目標

指定節點注入丟包率 100% 的故障。

3.2 開始測試

選擇一個節點,修改 loss_node_network_by_names.yaml 中的 names 值。

執行如下命令,開始測試。

$ kubectl apply -f loss_node_network_by_names.yaml

執行如下命令,查看實驗狀態。

kubectl get blade loss-node-network-by-names -o json

3.3 測試驗證

端口爲 Guestbook nodeport 端口,訪問實驗端口無響應,可是訪問未開啓實驗的端口能夠正常使用。

獲取節點 IP。

$ kubectl get node -o wide

從實驗節點訪問 Guestbook - 沒法訪問。

$ telnet 192.168.0.20

從非實驗節點訪問 Guestbook - 正常訪問。

$ telnet 192.168.0.18

此外還可直接從瀏覽器訪問地址,驗證測試結果。

中止測試。能夠刪除測試進程或者直接刪除 blade 資源。

kubectl delete -f delay_node_network_by_names.yaml

kubectl delete blade delay-node-network-by-names

4. kill 指定進程

4.1 測試目標

刪除指定節點上的 MySQL 進程。

4.2 開始測試

選擇一個節點,修改 kill_node_process_by_names.yaml 中的 names 值。

執行如下命令,開始測試。

$ kubectl apply -f kill_node_process_by_names.yaml

執行如下命令,查看實驗狀態。

kubectl get blade kill-node-process-by-names -o json

4.3 測試驗證

進入實驗 node。

$ ssh 192.168.0.18

查看 mysql 進程號。

$ ps -ef | grep mysql
root     10913 10040  0 14:10 pts/0    00:00:00 grep --color=auto mysql

能夠看到進程號發生了變化。

$ ps -ef | grep mysql

MySQL 的進程號發生改變,說明被殺掉後,又被從新拉起。

中止測試。能夠刪除測試進程或者直接刪除 blade 資源。

kubectl delete -f delay_node_network_by_names.yaml
kubectl delete blade delay-node-network-by-names

5. stop 指定進程

5.1 測試目標

掛起指定節點上的 MySQL 進程。

5.2 開始測試

選擇一個節點,修改 stop_node_process_by_names.yaml 中的 names 值。

執行如下命令,開始測試。

$ kubectl apply -f stop_node_process_by_names.yaml

執行如下命令,查看實驗狀態。

kubectl get blade stop-node-process-by-names -o json

5.3 測試驗證

進入實驗 node。

$ ssh 192.168.0.18

查看 mysql 進程號。

$ ps -ef | grep mysql
root     10913 10040  0 14:10 pts/0    00:00:00 grep --color=auto mysql

能夠看到進程號發生了變化。

$ ps -ef | grep mysql

MySQL 的進程號發生改變,說明被殺掉後,又被從新拉起。

中止測試。能夠刪除測試進程或者直接刪除 blade 資源。

kubectl delete -f delay_node_network_by_names.yaml
kubectl delete blade delay-node-network-by-names

| 結語

經過使用 ChaosBlade Operator 對 KubeSphere Node 資源進行混沌工程實驗,可得出以下結論:

對於 Node 節點,ChaosBlade 依舊有簡單的配置及操做來完成複雜的實驗,能夠經過自由組合,實現各類 Node 節點級別的複雜故障,驗證 Kubernetes 集羣的穩定性及可用性。同時當真正的故障來臨時,因爲早已模擬了各類故障狀況,能夠快速定位故障源,作處處變不驚,輕鬆處理故障。

下期預告

下一期將使用部署的 ChaosBlade Opeator 工具,針對 Pod 類資源各類場景進行測試驗證。

關於 RadonDB

RadonDB開源社區 是一個面向雲原生、容器化的數據庫開源社區。爲數據庫技術愛好者提供圍繞主流開源數據庫(MySQL、PostgreSQL、Redis、MongoDB、ClickHouse 等)的技術分享平臺,並提供企業級 RadonDB 開源產品及服務。

目前 RadonDB 開源數據庫系列產品已被 光大銀行、浦發硅谷銀行、哈密銀行、泰康保險、太平保險、安盛保險、陽光保險、百年人壽、安吉物流、安暢物流、藍月亮、天財商龍、羅克佳華、升哲科技、無錫匯跑體育、北京電信、江蘇交通控股、四川航空、昆明航空、國控生物 等上千家企業及社區用戶採用。

RadonDB 可基於雲平臺與 Kubernetes 容器平臺交付,不只提供覆蓋多場景的數據庫產品解決方案,並且提供專業的集羣管理和自動化運維能力,主要功能特性包括:高可用主從切換、數據強一致性、讀寫分離、一鍵安裝部署、多維指標監控&告警、彈性擴容&縮容、橫向自由擴展、自動備份&恢復、同城多活、異地災備 等。RadonDB 僅需企業及社區用戶專一於業務層邏輯開發,無需關注集羣高可用選型、管理和運維等複雜問題,幫助企業及社區用戶大幅度提高業務開發與價值創新的效率!

GitHub:https://github.com/radondb

微信羣: 請搜索添加羣助手微信號 radondb

相關文章
相關標籤/搜索