上週(這說起來已經是五月初的事情了),Atlassian向開源社群開源了Escalator,它是一款經過最佳化的Kubernetes自動擴充套件工具,大家可以從我們的GitHub倉庫[1]中拿到原始碼。
在Atlassian內部,我們在自有平臺和服務方面,已經有很長使用容器的傳統。大概時間在2013年或者2014年左右,那時候我們正在基於Docker搭建公司最早的PaaS(Platform as a Service——平臺即服務)平臺。從微服務堆疊的容器,到構建微服務體系的CI/CD工作流程,Docker都能很方便的對過程完整打包,確保整個軟體架構可以在任何需要的地方快速執行。無論是在個人筆記本上、開發階段還是生產環境中,容器都能為我們提供可靠、準確的保障,並且我們只需要付出很少的代價。
但是容器旅行並不是一帆風順,很快一個突顯的問題出現了:容器編排。下麵是四個最大的痛點:
-
我們需要將Pod規劃好並安裝到使用者的計算基礎設施上。
-
我們需要保證在雲環境的硬體出現問題時我們的服務仍然正常。
-
我們需要能夠擴充套件基礎設施和應用,應對彈性使用者負載中的峰值壓力。
-
我們需要及時關閉不再使用的虛擬機器資源,節約公司雲上開支。
當我們在調研和設計基礎計算平臺(PaaS)時,我們驚喜的發現Kubernetes可以幫助我們解決這些挑戰。基於容器豐富的開發介面、宣告式的配置方式、環形配置架構和龐大的社群支援,Kubernetes可以對我們的容器進行編排。
基於此,我們建立了自己的Kubernetes平臺工具,併在生產中對它千錘百煉。我們還組建了一支優秀的Kubernetes團隊來管理它,將已存在的基於容器的工作流慢慢遷移到Kubernetes平臺。該特別小組扮演著關鍵角色:它能夠讓我們的內部團隊與Kubernetes隔離開,內部團隊不必擔心如何執行Kubernetes本身,這可以保證內部團隊將主要精力放在原來的開發工作上。
遷移流程的第一步是遷移我們的構建引擎,該平臺用於Atlassian團隊的持續整合和產品構建部署,之前這些工作都執行在雲提供商的私有容器管理系統,所以整個工作流程都已經容器化。我們將該服務直接遷移到Kubernetes,這其中最大的挑戰是如何處理好峰值情況下申請數千個核心資源的巨大工作負載。
在使用Kubernetes平臺之初,我們能驚喜的感受到批次化工作負載到Kubernetes的便捷性。但是當併發數量攀升上來後,我們開始感覺的這條路走起來有些顛簸。實際感受是,叢集不能足夠快的擴容和縮容。
擴容:當前叢集達到能力極限時,Kubernetes啟動並服務於該負載需要持續幾分鐘時間,此時使用者只能等待。這不是一個很好的解決方案,因為一些操作可能由於沒有容錯而失敗。這個問題實際上是由於Kubernetes的叢集擴充套件服務缺少一個關鍵特性:不能在叢集達到能力極限之前提前做出預判並提前擴充套件計算節點。更簡單點說,它不能為峰值負載提供一種緩衝機制。
縮容:我們也有與擴容相反的場景問題:當負載減弱時,自動擴充套件器不能迅速的進行縮容。當然這個問題並沒有凸顯出來。但是很顯然,如果這些不再有用的資源沒有被有效釋放,無形中會造成經濟損失。
帶著解決上面兩個擴充套件問題的動機,我們團隊開始審視不同的選擇。我們需要擴充套件Kubernetes叢集擴充套件器的現有能力嗎?是否存在一個新的自動擴充套件器可供利用?有必要開發一套我們自己的自動擴充套件工具來最佳化現有的工作負載嗎?
經過對種種原因的分析,最終我們選擇了構建一套自己的自動擴充套件工具的方案,這個工具稱之為Escalator。我們假設了這套用於最佳化批次工作負載的自動擴充套件器的兩個基礎標的:提供先發制人的叢集能力緩衝特性,用來防止使用者直面叢集負載能力達到上限的情形;對不再需要的資源執行強制縮容。此專案建立之初我們也為Ops團隊做了一些考慮,透過使用Prometheus監控工具,我們只提供底層的東西,Ops團隊也可以同時使用Prometheus進行其他整合工作。
專案開始一段時間後,我們看到了開發的初步成果:Escalator對Kubernetes的標準叢集自動擴充套件器進行了功能補充,如此一來,我們可以對無用的資源節點進行浸染。以這種方式,叢集自動擴充套件器可以從自動擴充套件組更快的消耗和移除這些節點。接下來,我們開發了能夠先發制人的擴充套件功能,並給使用者提供了定義緩衝能力的指標項。接下來的里程碑事件是擴充套件Escalator並打包所有功能,以保證它能夠完全替代Kubernetes的標準自動擴充套件器為我們的工作負載服務。
經過幾個月的努力工作後,我們達成了當初的設想,並且我們將Escalator釋出到開源社群。之前我們需要用三分鐘左右的時間等待EC2實體加入到叢集中,現在我們僅需要幾秒鐘。這些透過Escalator的擴充套件與配置功能就可以實現。這些配置可以讓使用者來根據自身的情景配置百分比。過去我們每小時會因為無用的資源浪費很多雲上費用,現在叢集可以迅速的縮容,每天能夠節約成百上千美金。同時Ops團隊也可以透過Prometheus來達到以上的目的。
目前為止我們已經在內部和外部客戶中進行了Escalator的應用。我們同時也關心公司其他團隊在生產上如何處理Escalator在我們的環境中起到了極大的作用,所以我們將它貢獻給Kubernetes社群,作為開源軟體,大家可以下載並使用它。
您可以從Github account上取得原始碼,同時我們也很希望您能做出貢獻。您可以從Git上獲得Escalator的下一步路線圖,如果您有一些新的想法,歡迎提交PR或者feature request給我們。
-
https://github.com/atlassian/escalator
原文連結:https://developer.atlassian.com/blog/2018/05/introducing-escalator/
基於Kubernetes的DevOps實踐培訓將於2018年8月24日在北京開課,3天時間帶你係統掌握Kubernetes。本次培訓包括:容器特性、映象、網路;Kubernetes架構、核心元件、基本功能;Kubernetes設計理念、架構設計、基本功能、常用物件、設計原則;Kubernetes的資料庫、執行時、網路、外掛已經落地經驗;微服務架構、元件、監控方案等,點選下方圖片檢視詳情。
長按二維碼向我轉賬
受蘋果公司新規定影響,微信 iOS 版的贊賞功能被關閉,可透過二維碼轉賬支援公眾號。
微信掃一掃
使用小程式