本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
Qbox 如何使用 Kubernetes 和 Supergiant 每月節省 50% 的 AWS 賬單
編者按:今天的文章由 Qbox 團隊撰寫,他們是一家託管式 Elasticsearch 提供商,分享了他們使用 Kubernetes 的經驗以及它如何幫助他們節省了 50% 的雲賬單。
一年多以前,我們 Qbox 面臨一個生存問題。幾乎所有主要的 IaaS 提供商都推出或收購了與我們的 Hosted Elasticsearch 服務直接競爭的服務,其中許多甚至開始免費提供。除非我們能重新設計我們的基礎設施,使其比我們之前採用的虛擬機器方法以及我們的 IaaS 兄弟們正在使用的方法更具效能、更穩定、更便宜,否則“價格戰”就不可避免。在 Kubernetes、Docker 和 Supergiant(我們自己開發的用於管理分散式和有狀態資料的層)的幫助下,我們成功節省了 50%,這筆節省的金額達到了五位數的中間數。同時,支援工單數量急劇下降。我們對結果非常滿意,以至於我們決定將 Supergiant 開源作為一個獨立產品。本文將演示我們是如何實現這一目標的。
早在 2013 年,當很多人還不熟悉 Elasticsearch 時,我們推出了專用的、直接虛擬機器模式的服務產品。我們手工挑選了針對 Elasticsearch 最佳化的特定例項型別,使用者可以在任何區域配置執行在獨立虛擬機器上的單租戶、多節點叢集。我們對每計算小時的價格進行了加價,以提供 DevOps 支援和監控,隨著 Elasticsearch 成為今天全球性的現象,世界一度運轉良好。
背景
隨著我們叢集數量增長到數千個,節點數量增長到數萬個,不僅我們的 AWS 賬單失控。我們有 4 名工程師每天不分晝夜地替換故障節點並回復支援工單。更糟糕的是,分配的資源量與使用量不成比例。我們有數千臺伺服器,但集體 CPU 利用率不到 5%。我們花費了太多在那些完全沒有工作的處理器上。
我們之所以走到這一步,並非什麼大秘密。虛擬機器是一種有限資源,對於像 Elasticsearch 這樣計算密集型、可突發性應用程式,我們將面臨使用者要麼為了省錢而縮小叢集規模,要麼過度配置和超支的問題。當前述競爭壓力迫使我們採取行動時,我們必須重新評估一切。
採用 Docker 和 Kubernetes
我們的團隊曾一度迴避 Docker,可能是因為我們模糊地認為,在容器中無法實現像虛擬機器那樣的網路和磁碟效能。事實證明,這種假設是完全錯誤的。
為了執行效能測試,我們必須找到一個能夠管理網路容器和卷的系統。就在那時,我們發現了 Kubernetes。起初它對我們來說很陌生,但當我們熟悉它並構建了一個性能測試工具時,我們就被它征服了。它不僅和以前一樣好,甚至更好。
我們觀察到的效能提升是因為我們可以在一臺機器上“打包”的容器數量。具有諷刺意味的是,我們開始 Docker 實驗是為了避免“噪音鄰居”問題,我們原以為當多個容器共享同一虛擬機器時這是不可避免的。然而,這種隔離也成為了效能和成本的瓶頸。舉一個現實世界的例子,如果一臺機器有 2 個核心,而你需要 3 個核心,你就會遇到問題。很少有公共雲虛擬機器提供 3 個核心,所以典型的解決方案是購買 4 個核心,但無法充分利用它們。
這正是 Kubernetes 真正開始大放異彩的地方。它有請求和限制的概念,提供了對資源共享的細粒度控制。多個容器可以共享底層主機虛擬機器,而無需擔心“嘈雜的鄰居”問題。例如,它們可以請求對一定量 RAM 的獨佔控制,並且可以定義一個限制以應對溢位。這是一種實用、高效能且經濟高效的多租戶方式。我們能夠提供單租戶和多租戶兩全其美的解決方案。
Kubernetes + Supergiant
我們最初為自己的 Elasticsearch 客戶構建了 Supergiant。Supergiant 透過允許預打包和可重複部署的應用程式拓撲來解決 Kubernetes 的複雜性。更具體地說,Supergiant 允許您使用元件,這與微服務有些相似。元件代表了一組幾乎統一的軟體例項(例如,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 獲取最新更新