本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
KubeInvaders - Kubernetes 的遊戲化混沌工程工具
幾個月前,我釋出了我的最新專案 KubeInvaders。我第一次與社群分享它是在 Openshift Commons 簡報會議上。KubeInvaders 是一款適用於 Kubernetes 和 Openshift 的遊戲化混沌工程工具,它以一種有趣的方式幫助測試您的 Kubernetes 叢集的彈性。
它就像《太空入侵者》,但外星人是 Pod。
在我2019年米蘭Codemotion的演講中,我一開始就說:“當然,你可以用幾行 Bash 程式碼來實現,但這很無聊。”
使用上述程式碼可以在 Kubernetes 叢集中殺死隨機的 Pod,但我認為用 KubeInvaders 的飛船來做會更有趣。
我已將程式碼釋出到 https://github.com/lucky-sideburn/KubeInvaders,並且有一個小社群正在逐漸壯大。有些人喜歡用它在大螢幕上演示殺死 Pod。
如何安裝 KubeInvaders
我定義了多種安裝模式
Helm Chart https://github.com/lucky-sideburn/KubeInvaders/tree/master/helm-charts/kubeinvaders
使用模板手動安裝 Openshift https://github.com/lucky-sideburn/KubeInvaders#install-kubeinvaders-on-openshift
手動安裝 Kubernetes https://github.com/lucky-sideburn/KubeInvaders#install-kubeinvaders-on-kubernetes
當然,首選方式是使用 Helm Chart
# Please set target_namespace to set your target namespace!
helm install --set-string target_namespace="namespace1,namespace2" \
--name kubeinvaders --namespace kubeinvaders ./helm-charts/kubeinvaders
如何使用 KubeInvaders
一旦安裝到您的叢集中,您就可以使用以下功能:
- 鍵 'a' — 切換到自動駕駛
- 鍵 'm' — 切換到手動駕駛
- 鍵 'i' — 顯示 Pod 名稱。將飛船移向一個外星人
- 鍵 'h' — 列印幫助資訊
- 鍵 'n' — 在不同名稱空間之間跳轉(我最喜歡的功能!)
調整 KubeInvaders
在2019年米蘭Codemotion大會上,我和我的同事們設立了一個帶遊戲站的展位,供大家玩KubeInvaders。人們需要與Kubernetes戰鬥才能贏得一件T恤。
如果您的 Pod 需要幾秒鐘才能啟動,您可能會輸。可以透過在 Kubernetes 部署中設定以下環境變數來調整遊戲的複雜性:
- ALIENPROXIMITY — 減小此值以增加外星人之間的距離;
- HITSLIMIT — 射擊前等待的 CPU 時間(秒);
- UPDATETIME — 更新 Pod 狀態前等待的秒數(您也可以設定 0.x,例如 0.5);
結果是與機器對抗的遊戲體驗更加困難。
使用場景
為生產環境採用混沌工程策略非常有用,因為這是測試系統是否支援意外破壞性事件的唯一方法。
KubeInvaders 是一款遊戲——所以請不要太認真!——但它展示了一些重要的用例:
- 測試 Kubernetes 叢集在意外 Pod 刪除下的彈性
- 收集 Pod 重啟時間等指標
- 調整就緒探針
後續步驟
我希望繼續新增一些很酷的功能並將其整合到 Kubernetes Dashboard 中,因為我正計劃將其轉變為“Kubernetes 遊戲化混沌工程和開發工具”,以幫助開發人員與 Kubernetes 環境中的部署進行互動。例如:
- 指向外星人以獲取 Pod 日誌
- 透過射擊特定物件來部署 Helm Chart
- 讀取儲存在部署中特定標籤內的訊息
歡迎為 https://github.com/lucky-sideburn/KubeInvaders 貢獻程式碼,並透過 Twitter 關注 #kubeinvaders 新聞以保持更新。