作者:丁源 RadonDB 測試負責人
負責 RadonDB 云數(shù)據(jù)庫、容器化數(shù)據(jù)庫的質(zhì)量性能測試,迭代驗證。對包括云數(shù)據(jù)庫以及容器化數(shù)據(jù)庫性能和高可用方案有深入研究。
近日,國內(nèi)多家網(wǎng)站同時發(fā)生短期服務不可用現(xiàn)象,一夜沖上圈內(nèi)熱搜。據(jù)官方答復,是由于部分服務器機房發(fā)生故障,導致網(wǎng)站無法訪問。為了避免這種情況,提高系統(tǒng)架構(gòu)的可靠性,保障業(yè)務的連續(xù)性,希望能在故障之前找到導致 “崩盤” 的缺口。
十多年前,國外的互聯(lián)網(wǎng)公司就已經(jīng)在云化、分布式、微服務等前沿技術(shù)的使用過程中,遇到了類似的問題,并由此誕生了混沌工程。
什么是混沌工程?
混沌工程即 Chaos Engineering[1],被定義為 在分布式系統(tǒng)上進行實驗的學科,目的是建立對系統(tǒng)抵御生產(chǎn)環(huán)境中失控條件的能力以及信心。混沌工程屬于一門新興的技術(shù)學科,是一種提高技術(shù)架構(gòu)彈性能力的復雜技術(shù)手段。最早由 Netflix 技術(shù)部門創(chuàng)建了名為 Chaos Monkey 的項目,通過隨機性測試,來檢測系統(tǒng)架構(gòu)的健康情況,并設計足夠的預案來應對可能到來的新一輪故障。

隨著云化技術(shù)的發(fā)展和云原生(Cloud Native)的概念的提出,混沌工程的反脆弱哲學思想,也引入了云原生體系,可簡單高效地為系統(tǒng)提高容錯能力。
什么是 ChaosBlade Operator?
ChaosBlade[2] 是阿里巴巴開源的一款遵循混沌工程原理和混沌實驗模型的實驗注入工具,幫助企業(yè)提升分布式系統(tǒng)的容錯能力,并且在企業(yè)上云或往云原生系統(tǒng)遷移過程中業(yè)務連續(xù)性保障。

而ChaosBlade Operator[3] 是 Kubernetes 平臺實驗場景的實現(xiàn),將混沌實驗通過 Kubernetes 標準的 CRD 方式定義,很方便的使用 Kubernetes 資源操作的方式來創(chuàng)建、更新、刪除實驗場景,包括使用 kubectl、client-go 等方式執(zhí)行,而且還可以使用上述的 chaosblade cli 工具執(zhí)行。

把實驗定義為 Kubernetes CRD 資源,將實驗模型中的四部分映射為 Kubernetes 資源屬性,完美將混沌實驗模型與 Kubernetes 聲明式設計結(jié)合在一起(依靠混沌實驗模型便捷開發(fā)場景,并結(jié)合 Kubernetes 設計理念)。
- 通過 kubectl 或者編寫代碼直接調(diào)用 Kubernetes API 來創(chuàng)建、更新、刪除混沌實驗,可清晰獲取資源模擬實驗的執(zhí)行狀態(tài),實現(xiàn) Kubernetes 故障注入的標準化。
- 通過 Chaosblade cli 方式 可非常方便的執(zhí)行 Kubernetes 實驗場景,查詢實驗狀態(tài)等。
- ChaosBlade 混沌實驗模型與 Kubernetes CRD 的結(jié)合,實現(xiàn) 基礎資源、應用服務、Docker 容器 等場景復用,方便 Kubernetes 場景的擴展。
支持的場景
目前支持的實驗場景由以下三大類(持續(xù)更新中):
|分類|資源種類|詳細場景|
|:----|:----|:----|:----|
|Node|CPU|指定 CPU 使用率|
| |網(wǎng)絡|指定網(wǎng)卡、端口、IP 包延遲、丟包、包阻塞、包重復、包亂序、包損壞等。|
| |進程|指定進程 Hang、強殺指定進程等|
| |磁盤|指定目錄磁盤填充、磁盤 IO 讀寫負載等|
| |內(nèi)存|指定內(nèi)存使用率|
|Pod|網(wǎng)絡|指定網(wǎng)卡、端口、IP 等包延遲、丟包、包阻塞、包重復、包亂序、包損壞等|
| |磁盤|指定目錄磁盤填充、磁盤 IO 讀寫負載等|
| |內(nèi)存|指定內(nèi)存使用率|
| |Pod|殺 Pod|
|Container|CPU|指定 CPU 使用率|
| |網(wǎng)絡|指定網(wǎng)卡、端口、IP 等包延遲、丟包、包阻塞、包重復、包亂序、包損壞等|
| |進程|指定進程 Hang、強殺指定進程等|
| |磁盤|指定目錄磁盤填充、磁盤 IO 讀寫負載等|
| |內(nèi)存|指定內(nèi)存使用率|
| |Container|殺 Container|
部署 ChaosBlade Operator
執(zhí)行 Kubernetes 實驗場景前,需提前部署ChaosBlade Operator。
Helm 包下載地址:
https://github.com/chaosblade-io/chaosblade-operator/releases
本系列文章默認 Helm v3 版本
注意:需要新建一個 namespace !
部署指令:
helm install kube-system/chaosblade-operator-1.2.0-v3.tgz
helm install chaosblade-operator chaosblade-operator-1.2.0-v3.tgz --namespace chaosblade
回顯示例:

ChaosBlade Operator 啟動后,將在每個節(jié)點分別部署 chaosblade-tool 和 chaosblade-operator Pod。通過如下指令查看部署結(jié)果,若 Pod 都處于 Running 狀態(tài),則部署成功。
kubectl get pod -n chaosblade -o wide | grep chaosblade
查詢部署結(jié)果示例:

關(guān)于部署失敗的常見原因,請關(guān)注后續(xù) 混沌工程工具系列 專題介紹。
實驗環(huán)境
本系列文章將使用在 KubeSphere 上安裝的 ChaosBlade Operator,對 RadonDB 系列容器化產(chǎn)品進行測試。
KubeSphere 環(huán)境參數(shù):
- 規(guī)格 8 核 16G
- 磁盤大小 500GB
- 節(jié)點數(shù) 4
在 KubeSphere 環(huán)境部署成功后,控制臺狀態(tài)如下圖所示。

下期預告
本篇為混沌工程工具 ChaosBlade Opeator 系列的入門篇,主要介紹混動工程以及實驗工具 ChaosBlade Operator。
下一期,我們將使用部署的 ChaosBlade Opeator 工具,針對 Node 類資源各種場景進行測試。同時也會介紹在不同場景下混沌工程是如何幫助開發(fā)者發(fā)現(xiàn)系統(tǒng)中的問題,并達到逐漸建設高可用的韌性系統(tǒng)的目的。
參考
[1]. 混沌工程原則:https://principlesofchaos.org
[2]. ChaosBlade:https://github.com/chaosblade-io/chaosblade
[3]. ChaosBlade Operator:https://github.com/chaosblade-io/chaosblade-operator
[4].Kubernetes中文文檔:https://chaosblade-io.gitbook.io/chaosblade-help-zh-cn/blade