本文發布已超過一年。較舊的文章可能包含過時的內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
Qbox 如何透過使用 Kubernetes 和 Supergiant 每月節省 50% 的 AWS 帳單
編者註:今天的文章由託管 Elasticsearch 供應商 Qbox 團隊撰寫,分享他們使用 Kubernetes 的經驗,以及 Kubernetes 如何幫助他們節省了百分之五十的雲端帳單。
大約一年前,Qbox 面臨著一個生存危機。幾乎所有主要的 IaaS 供應商都推出或收購了直接與我們的 託管 Elasticsearch 服務競爭的服務,而且許多供應商開始免費提供。除非我們能夠重新設計我們的基礎架構,使其比我們以前使用的 VM 方法,以及我們的 IaaS 同行正在使用的方法更高效能、更穩定且更便宜,否則零利潤競賽即將開始。在 Kubernetes、Docker 和 Supergiant(我們自己開發的用於管理分散式和有狀態資料的層)的幫助下,我們成功實現了 50% 的節省,達到五位數中等的金額。同時,支援工單數量驟降。我們對結果非常滿意,因此決定將 Supergiant 開源,作為其獨立產品。這篇文章將展示我們是如何實現這一目標的。
早在 2013 年,當時甚至沒有多少人熟悉 Elasticsearch,我們就以專用的直接 VM 模型推出了我們的即服務產品。我們手工選擇了針對 Elasticsearch 優化的特定實例類型,使用者可以在任何區域的隔離虛擬機器上配置單租戶、多節點叢集。我們在每計算小時的價格上增加了 DevOps 支援和監控的加價,隨著 Elasticsearch 成為今天的全球現象,一切都在一段時間內都很順利。
背景
隨著我們成長到數千個叢集,以及更多數千個節點,不僅僅是我們的 AWS 帳單失控。我們有 4 位工程師每天 24 小時都在更換死節點和回覆支援工單。更糟糕的是,與使用量相比,資源分配量過大。我們有數千台伺服器,總體 CPU 使用率低於 5%。我們在實際上什麼都沒做的處理器上花費了太多。
我們如何走到這一步並不是什麼大秘密。VM 是一種有限的資源,對於像 Elasticsearch 這樣計算密集型、可突發的應用程式,我們必須應對那些為了省錢而縮小叢集規模的使用者,或者那些過度配置和過度支出的使用者。當上述競爭壓力迫使我們做出改變時,我們不得不重新評估一切。
採用 Docker 和 Kubernetes
我們的團隊有一段時間避開了 Docker,可能是因為模糊地認為我們使用 VM 獲得的網路和磁碟效能在使用容器時是不可能的。事實證明,這種假設完全是錯誤的。
為了運行效能測試,我們必須找到一個可以管理聯網容器和磁碟區的系統。那時我們發現了 Kubernetes。起初它對我們來說很陌生,但當我們熟悉了它並建構了一個效能測試工具後,我們就被它征服了。它不僅和以前一樣好,而且更好。
我們觀察到的效能改進是因為我們可以在單一機器上「打包」的容器數量。具有諷刺意味的是,我們開始 Docker 實驗是為了避免「嘈雜的鄰居」,我們認為當多個容器共享同一個 VM 時,這是不可避免的。然而,這種隔離也成為效能和成本方面的瓶頸。舉一個真實世界的例子,如果一台機器有 2 個核心,而您需要 3 個核心,您就有麻煩了。很少遇到具有 3 個核心的公有雲 VM,因此典型的解決方案是購買 4 個核心,但沒有充分利用它們。
這正是 Kubernetes 真正開始發光的地方。它具有 請求和限制 的概念,這提供了對資源共享的精細控制。多個容器可以共享底層主機 VM,而無需擔心「嘈雜的鄰居」。例如,它們可以請求對一定數量的 RAM 的獨佔控制權,並且可以定義一個限制以預期溢出。這是一種實用、高效能且經濟高效的多租戶模式。我們能夠提供單租戶和多租戶世界的最佳體驗。
Kubernetes + Supergiant
我們最初為我們自己的 Elasticsearch 客戶建構了 Supergiant。Supergiant 透過允許預先封裝和可重新部署的應用程式拓撲來解決 Kubernetes 的複雜性。更具體地說,Supergiant 讓您可以使用組件 (Components),這些組件有點類似於微服務。組件代表幾乎統一的一組軟體實例(例如,Elasticsearch、MongoDB、您的 Web 應用程式等)。它們將部署複雜拓撲所需的所有各種 Kubernetes 和雲端操作整合到一個易於管理的緊湊實體中。
對於 Qbox,我們從需要 1:1 的節點變為大約 1:11 的節點。當然,節點更大,但利用率產生了顯著差異。如下圖所示,我們可以將一大堆小實例塞到一個大實例上,而不會損失任何效能。較小的使用者將受益於更大的資源帶來的更高網路吞吐量,並且他們還將獲得更大的 CPU 和 RAM 突發能力。
成本節省總計
Supergiant 中的 封裝演算法,憑藉其提高的利用率,使我們的基礎架構足跡立即減少了 25%。請記住,這是以更好的效能和更少的支援工單為代價的。我們可以調高封裝演算法,並可能節省更多資金。同時,由於我們的節點更大且更可預測,我們可以更充分地利用 AWS 預留執行個體的經濟效益。我們採用了 1 年的部分 RI,這將剩餘成本削減了 40%,上下浮動。我們的客戶仍然可以靈活地啟動、關閉和擴展他們的 Elasticsearch 節點,而無需我們不斷地調整、組合、拆分和重新組合我們的預留。最終,我們節省了 50%。也就是說,每年可以將 60 萬美元用於工程師薪資,而不是讓我們的 IaaS 供應商變得更富有。
- 下載 Kubernetes
- 在 GitHub 上參與 Kubernetes 專案
- 在 Stack Overflow 上發布問題(或回答問題)
- 在 Slack 上與社群聯繫
- 在 Twitter 上關注我們 @Kubernetesio 以獲取最新更新