歡迎光臨
每天分享高質量文章

Escalator:Atlassian開源的Kubernetes自動擴展工具

上周(這說起來已經是五月初的事情了),Atlassian向開源社區開源了Escalator,它是一款經過優化的Kubernetes自動擴展工具,大家可以從我們的GitHub倉庫[1]中拿到原始碼。


容器到Kubernetes之旅

在Atlassian內部,我們在自有平臺和服務方面,已經有很長使用容器的傳統。大概時間在2013年或者2014年左右,那時候我們正在基於Docker搭建公司最早的PaaS(Platform as a Service——平臺即服務)平臺。從微服務堆棧的容器,到構建微服務體系的CI/CD工作流程,Docker都能很方便的對過程完整打包,確保整個軟體架構可以在任何需要的地方快速運行。無論是在個人筆記本上、開發階段還是生產環境中,容器都能為我們提供可靠、準確的保障,並且我們只需要付出很少的代價。
但是容器旅行並不是一帆風順,很快一個突顯的問題出現了:容器編排。下麵是四個最大的痛點:
  1. 我們需要將Pod規劃好並安裝到用戶的計算基礎設施上。

  2. 我們需要保證在雲環境的硬體出現問題時我們的服務仍然正常。

  3. 我們需要能夠擴展基礎設施和應用,應對彈性用戶負載中的峰值壓力。

  4. 我們需要及時關閉不再使用的虛擬機資源,節約公司雲上開支。

當我們在調研和設計基礎計算平臺(PaaS)時,我們驚喜的發現Kubernetes可以幫助我們解決這些挑戰。基於容器豐富的開發接口、宣告式的配置方式、環形配置架構和龐大的社區支持,Kubernetes可以對我們的容器進行編排。
基於此,我們創建了自己的Kubernetes平臺工具,併在生產中對它千錘百煉。我們還組建了一支優秀的Kubernetes團隊來管理它,將已存在的基於容器的工作流慢慢遷移到Kubernetes平臺。該特別小組扮演著關鍵角色:它能夠讓我們的內部團隊與Kubernetes隔離開,內部團隊不必擔心如何運行Kubernetes本身,這可以保證內部團隊將主要精力放在原來的開發工作上。
遷移流程的第一步是遷移我們的構建引擎,該平臺用於Atlassian團隊的持續集成和產品構建部署,之前這些工作都運行在雲提供商的私有容器管理系統,所以整個工作流程都已經容器化。我們將該服務直接遷移到Kubernetes,這其中最大的挑戰是如何處理好峰值情況下申請數千個核心資源的巨大工作負載。


新問題出現:急需更好的自動擴展能力

在使用Kubernetes平臺之初,我們能驚喜的感受到批量化工作負載到Kubernetes的便捷性。但是當併發數量攀升上來後,我們開始感覺的這條路走起來有些顛簸。實際感受是,集群不能足夠快的擴容和縮容。
擴容:當前集群達到能力極限時,Kubernetes啟動並服務於該負載需要持續幾分鐘時間,此時用戶只能等待。這不是一個很好的解決方案,因為一些操作可能由於沒有容錯而失敗。這個問題實際上是由於Kubernetes的集群擴展服務缺少一個關鍵特性:不能在集群達到能力極限之前提前做出預判並提前擴展計算節點。更簡單點說,它不能為峰值負載提供一種緩衝機制。

縮容:我們也有與擴容相反的場景問題:當負載減弱時,自動擴展器不能迅速的進行縮容。當然這個問題並沒有凸顯出來。但是很顯然,如果這些不再有用的資源沒有被有效釋放,無形中會造成經濟損失。


更好的解決方案:Escalator

帶著解決上面兩個擴展問題的動機,我們團隊開始審視不同的選擇。我們需要擴展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給我們。
相關鏈接:
  1. https://github.com/atlassian/escalator

原文鏈接:https://developer.atlassian.com/blog/2018/05/introducing-escalator/

基於Kubernetes的DevOps實踐培訓

基於Kubernetes的DevOps實踐培訓將於2018年8月24日在北京開課,3天時間帶你系統掌握Kubernetes本次培訓包括:容器特性、鏡像、網絡;Kubernetes架構、核心組件、基本功能;Kubernetes設計理念、架構設計、基本功能、常用物件、設計原則;Kubernetes的資料庫、運行時、網絡、插件已經落地經驗;微服務架構、組件、監控方案等,點擊下方圖片查看詳情。

赞(0)

分享創造快樂