本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

KubeInvaders - Kubernetes 的遊戲化混沌工程工具

幾個月前,我釋出了我的最新專案 KubeInvaders。我第一次與社群分享它是在 Openshift Commons 簡報會議上。KubeInvaders 是一款適用於 Kubernetes 和 Openshift 的遊戲化混沌工程工具,它以一種有趣的方式幫助測試您的 Kubernetes 叢集的彈性。

它就像《太空入侵者》,但外星人是 Pod。

在我2019年米蘭Codemotion的演講中,我一開始就說:“當然,你可以用幾行 Bash 程式碼來實現,但這很無聊。”

使用上述程式碼可以在 Kubernetes 叢集中殺死隨機的 Pod,但我認為用 KubeInvaders 的飛船來做會更有趣。

我已將程式碼釋出到 https://github.com/lucky-sideburn/KubeInvaders,並且有一個小社群正在逐漸壯大。有些人喜歡用它在大螢幕上演示殺死 Pod。

如何安裝 KubeInvaders

我定義了多種安裝模式

  1. Helm Chart https://github.com/lucky-sideburn/KubeInvaders/tree/master/helm-charts/kubeinvaders

  2. 使用模板手動安裝 Openshift https://github.com/lucky-sideburn/KubeInvaders#install-kubeinvaders-on-openshift

  3. 手動安裝 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 新聞以保持更新。