阿裏雲雙11訪談之容器服務
摘要:在阿裏雲雙11訪談容器服務專場中,阿裏雲容器服務高級專家戒空為大家介紹了阿裏雲容器服務以及容器鏡像服務的基本情況和各自的優勢所在,並且針對“雙11”這樣大流量的場景分享了容器技術和容器鏡像技術的最佳實踐。以下內容根據訪談視頻整理而成。
阿裏雲容器服務簡介
阿裏雲容器服務就是阿裏雲在2015年推出的容器應用管理服務,其主要支持Docker應用的全生命周期的管理,阿裏雲容器服務在公有雲上麵整合了阿裏雲的虛擬化、存儲以及網絡等方麵的能力,簡化了用戶在容器應用運維上的複雜性。阿裏雲容器服務自從2015年正式上線到現在經過了兩年的時間,已經有了一千多家的企業客戶。在今年5月份的時候,阿裏雲容器服務還增加了對於Kubernetes編排能力的支持,也就是說現在同時支持了Swarm和Kubernetes。阿裏雲容器服務除了對於公有雲提供服務之外,還提供了相應的專有雲版本,用戶可以通過專有雲的方式在自己的數據中裏麵構建一個完整的容器運維能力。
阿裏雲容器鏡像服務簡介
容器鏡像服務也是阿裏雲在2015年的時候推出的一套係統,基本上大家可以認為容器鏡像服務是為用戶提供了安全穩定的鏡像托管能力,但是實際上並不至於此。除了鏡像托管以及鏡像的上傳下載之外,容器鏡像服務還包含了從鏡像構建到應用部署等一整套的DevOps能力。目前已經在阿裏雲的12個Region上進行了部署,大概會有10萬個鏡像倉庫,目前也達到了2億多次鏡像下載量。
容器技術的優勢所在
其實容器服務還有一個別稱就是操作係統級虛擬化,它與傳統虛擬化技術相比而言的主要差異在於:傳統的虛擬化需要一個虛擬機然後在其中啟動完整的係統,還會涉及到一些類似於指令翻譯的行為,所以其係統占用以及資源開銷都是比較大的,會造成比較大的係統損耗。而對於容器服務而言,多個容器直接共享宿主機的內核,這部分是幾乎沒有資源開銷的。此外進程也是直接運行在宿主機裏麵的,所以這部分其實也沒有性能損失。總之,容器服務相比傳統的虛擬化技術而言,在資源利用以及性能上麵更具有優勢。通過容器這種方式,使得我們可以在一台物理機上麵啟動多個應用,進而提高係統的資源利用率。
此外,容器技術目前事實上的規範是Docker,而Docker存在一個鏡像規範。通過Docker鏡像這種方式可以很方便地將應用和其依賴打包在一起,這樣在運行的時候就可以不必考慮宿主機上麵是否安裝了依賴,一般而言隻要安裝的係統是正確的就可以正確運行。Docker除了鏡像規範之外,還存在一套規範化的管理接口。大家可以看到Docker之後也出現了很多的容器管理平台,通過這些管理平台可以實現批量化地對於應用進行管理,比如可以非常方便地一鍵創建出測試環境,也可以對於線上的環境進行自動化運維。
“雙11”場景下,容器技術所能夠帶來的便利
其實“雙11”的業務流量往往會比較大,而且在“雙11”之前需要對於流量進行預估。但是實際上真正的流量卻是難以評估的,往往按照預先估算的數據準備資源和應用容量,然而到了“雙11”當天發現準備量還是不夠,仍然需要進行緊急擴容,這也是一個比較常見的情況。而容器技術就非常適合這樣的場景,因為現在很多企業往往都有自己的機房,並且會在自己的機房中部署應用,而在“雙11”的時候業務所需要的資源量是非常大的,用戶本身的機房的資源可能不夠,這樣就會需要使用雲上的資源,需要把一部分業務放到雲上運行,希望借助雲上的大資源池來支持“雙11”的流量,這就是比較典型的混合雲場景。
容器技術的一個非常大的特點就是方便遷移,所以通過容器技術也可以非常容易地實現跨雲遷移,可以很方便地利用容器技術把原來部署在自己機房中的應用部署到雲上去。此外,對於需要進行緊急擴容的場景,原來可能需要完成準備物理機器、安裝操作係統、安裝依賴等一係列的事情,而通過容器技術以上的這些繁瑣的操作都不需要做了,隻需要把鏡像拉下來然後運行就可以了,所以擴容的速度也會非常快。
容器技術所帶來的敏捷變革
在容器服務中其實會有這樣幾個功能能夠幫助大家更加便捷地使用。第一點就是自動彈性伸縮的能力,也就是用戶可以設定黨某個應用達到的CPU、內存等資源使用閾值的時候就要進行自動的擴容。除了對容器本身進行擴容之外,阿裏雲容器服務目前還支持在頂層資源不夠或者虛擬機已經跑滿的情況下,調用ECS的API來自動地創建一些新的機器,通過這樣的兩層調度來實現容量管理。第二點是支持混合雲的能力,用戶可以在公有雲容器的控製台裏麵管理IDC裏麵的容器的集群應用,可以使用控製台同時管理資源和部署應用,進而實現無縫的全局資源管理。
目前,阿裏雲容器服務在IDC中也提供了與雲上完全一致的編排能力,應用可以非常方便地在雲上與雲下之間進行遷移。在阿裏雲的每個公有雲Region裏麵,都提供了容器鏡像服務,用戶可以通過內網下載容器的鏡像,這樣的下載速度也是非常快的。在規模特別大的場景中,比如存在幾千台機器需要同時部署應用時,這樣的下載量是非常大的,可能很多係統無法實現這樣的量級,而在阿裏雲容器鏡像服務裏麵是通過P2P的鏡像分發機製實現的,這樣的一套方案現在已經在阿裏內部得到了充分的驗證。
容器技術最佳實踐
對於容器鏡像而言,之前也提到的主要的問題在於擴容速度需要非常快,所以一般而言需要將鏡像做的更加精簡,這樣才能夠使得鏡像的下載速度更快。具體實現上有以下幾個關鍵點:
- 在選擇基礎鏡像的時候盡可能選擇比較經典的版本。
- 在構建鏡像的時候推薦用戶把不可變的部分和變化的部分進行拆分。比如在寫dockerfile的時候可以將不可變的部分寫在前麵,可變的部分寫在後麵,盡可能地使得層次更加清晰。這樣在進行構建的時候一方麵可以盡可能地利用緩存,所以鏡像構建會非常快,基本上隻有變化的內容會需要重新構建;另一方麵因為不變的東西在機器上麵已經有了,那麼在下載的時候隻需要把新的鏡像層下載下來即可。
- 不要在鏡像構建裏麵構建代碼。一些同學喜歡在鏡像構建裏麵構建代碼,比如在Java鏡像裏麵直接使用Maven構建好,但是這種方式卻並不好。一方麵會導致鏡像非常臃腫,另一方麵因為代碼都放在鏡像裏麵,就會增加安全風險。所以推薦的做法是先進行構建,之後把構建的JAR包或者WAR等結果放在最終的鏡像裏麵。
對於容器服務而言,現在比較流行的就是微服務架構。微服務架構中的每個服務都比較小,這樣在進行擴容的時候就可以按照單個服務進行擴容,擴容的速度就會比較快。因為一般在實際場景中,整個係統可能會有很多個模塊,而真正存在性能問題的模塊隻有幾個,所以隻需要針對於存在問題的幾個模塊進行擴容即可,這樣非常適合微服務的架構。如果不使用微服務架構,而是采用傳統架構將所有的應用放在一起,這樣一方麵應用的擴容、下載以及啟動速度都會比較慢,另一方麵因為所有模塊都在一起,在進行擴容的時候全部都會進行擴容,即使某些模塊沒有問題也會進行擴容,這就會造成資源的浪費。
阿裏雲容器服務的“雙11”特惠
目前,阿裏雲容器服務和容器鏡像服務兩個產品都是免費的,這其實是非常大的優惠了!希望大家能夠持續關注阿裏雲容器技術服務和容器鏡像服務。
最後更新:2017-10-31 23:05:22