Categories
程式開發

Kubernetes上的混沌工程:Chaos Mesh 1.0 GA發布


Chaos Mesh 1.0於2020年7月成為CNCF沙箱項目,隨後,Chaos Mesh團隊宣布了其通用可用性(GA)。 Chaos Mesh是一個用於在Kubernetes應用程序上進行混沌工程實驗的工具。

Chaos Mesh使用標準的CDR進行對象定義,還提供了一個用於管理和監控混沌工程實驗的儀錶盤。儀錶盤可用於“定義混沌實驗的範圍、指定混沌注入的類型、定義調度規則,並觀察混沌實驗的結果”。 Chaos Mesh還提供了一個Grafana插件,可以查看混沌工程實驗的實時指標。這個工具涵蓋了“Pod、網絡、系統I/O和內核”的故障注入。

InfoQ採訪了Chaos Mesh的維護者和全職開發人員Keao Yang,了解更多的信息。

混沌實驗可以在Chaos Mesh中使用YAML來指定。可以注入的故障類型包括Pod故障、網絡分區故障、虛擬內存壓力源、通過系統調用修改系統時間以及I/O延遲。 Chaos Mesh還可以用於模擬跨多個數據中心的網絡延遲。 Chaos Mesh主要包含了兩個運行組件——一個中央控制器管理器和一個DaemonSet,它在每個節點上運行一個Pod,作為代理。為了限制測試中受影響的應用程序,並防止混沌實驗影響關鍵應用程序,它提供了名稱空間級別的權限和受保護的名稱空間。

Kubernetes上的混沌工程:Chaos Mesh 1.0 GA發布 1

圖像來源:https://raw.githubusercontent.com/chaos-mesh/chaos-mesh/master/static/chaos-mesh.svg

Chaos Mesh是從一個針對分佈式數據庫TiDB的測試框架發展而來的。 Yang解釋說:“我們相信我們以前的經驗(關於TiDB測試)不僅讓TiDB更加穩定,這也是我們創建Chaos Mesh的原因。Chaos Mesh生來就是通用的,被設計成可以在任何一個雲平台上運行,也可以用來測試雲端的任何一個軟件。”

Yang說,Chaos Mesh不依賴特定的雲特性。它“只使用了Kubernetes API和Linux內核的基本功能”,並補充道:

根據用戶的報告,Chaos Mesh可以很自然地在裸機集群和大多數雲平台上運行。但是,對於一些雲平台(如OpenShift),需要特殊的特權設置。我們正在編寫文檔來記錄這些配置。

在回答Chaos Mesh如何在內部注入故障時,Yang解釋說:

具體實現取決於“故障”類型。有一些很簡單,例如,Chaos Mesh使用Kubernetes API來殺死Pod並實現PodChaos。對於其他一些類型的故障,Chaos Mesh會向相關節點上的守護進程發送grpc請求,守護進程會進入相應的network/pid/mnt/…命名空間和cgroup,並運行一些命令(如iptables)來注入故障。

此外,Yang還說,“在運行時注入故障和限制混沌的範圍可能是一個挑戰。例如,在Linux 5.6之前沒有時間名稱空間這樣的東西,而且每個進程都共享同一個時鐘。對於這種混沌,實現並不是那麼簡單,而且真的很難用一句話說清楚”。另一篇文章描述了TimeChaos的實現——它模擬時鐘偏差。

關於Chaos Mesh的近期路線圖,Yang說:

我們正試圖將Chaos Mesh擴展為一個“平台”,這意味著它有望能夠編排混沌實驗,定義復雜的混沌場景,並為混沌生成報告。另一個重要的特性是支持儀錶盤的訪問控制。

Kubernetes上的其他混沌工程框架有石蕊屬格林姆林酷比侵略者。在寫這篇文章時,Chaos Mesh需要Kubernetes v 1.12或更高版本,可以使用提供的shell腳本或Helm Chart來安裝。 Chaos Mesh的源代碼可以在的GitHub上找到。

原文鏈接

Kubernetes上的混沌工程:v1.0中通常提供的混沌網格