RDC容器構建和部署服務新功能上線
容器服務
阿裏雲容器服務提供了從容器構建到部署的服務。再此基礎之上還提供了一係列的阿裏雲其它服務的集成和擴展,比如監控、日誌、負載均衡等。
Devops解決方案
先探討一下我們期望的Devops研發流程是什麼樣子。
Devops需求
對於一個應用A(非容器服務中的應用,而是RDC中的應用的概念),會考慮下麵的點:
- 在進行鏡像構建時,我希望運行測試;對於Java之類的編譯型語言,我還需要打包。但我不希望把運行測試和進行構建的依賴(比如maven),放入鏡像中。目前容器服務提供的構建服務僅支持
docker build
命令,因此無法在鏡像構建之外再做上述的工作。 - 多套環境的需求,比如
testing
,staging
,production
三個環境。容器服務本身並沒有環境的概念。一種可能的方式是創建三個集群,分別對應上述的三個環境。但是這個環境是集群級別的,而不是服務級別的(通常一次發布是更新一個服務)。 - 對於正常的開發流程(hot fix另說)而言,我希望某個鏡像先上
testing
,驗證通過之後上staging
,再驗證通過之後上production
。需要有一個CD流水線來現實化這個過程。 - 如果發布出了問題,我也希望可以快速的把某個服務回滾到之前的版本。容器服務沒有回滾的概念,隻有變更應用配置的概念。也就是說,用戶需要記得(或者通過操作日誌查詢)上一次發布的鏡像版本是什麼,然後通過變更應用配置的入口,進行操作。
- 我希望在不同環境使用同一個鏡像,通過環境變量來區分不同的環境。容器服務是支持的,詳見查看服務詳情中的配置部分
可以看到對於上述的點,單用容器服務,有些無法很好的解決。下麵看看結合了RDC之後是如何解決這些問題的:
基於RDC和容器服務的Devops模式
創建應用
為了滿足Devops需求中的第四點,目前需要選擇自由模式
和Git Flow模式
。分支模式
後續也會支持。關於這幾種模式的區別,可以參看研發模式 。
發布流水線
創建好應用,進入發布頁麵後,可以看到RDC預置了三個環境(日常,預發,部署),並且在正常的開發流程中,每次代碼變更需要依次經過這三個環境。在這個流水線中,可以在獨立的環境中進行軟件包構建及單元測試等。詳見:構建配置和容器構建配置 。
第一個stage
(版本製作),將三個環境的包和鏡像都打出來。目前還不支持多個環境打一個鏡像,後續RDC會支持。不過可以通過配置讓三個環境的打包方式一模一樣,從而達到多個鏡像,但內容相同的效果。
RDC和容器服務的概念映射
RDC中有應用和環境的概念,容器服務中有集群、應用和服務的概念。這裏明確一下它們之間的對應關係。
容器服務中的集群和服務在RDC中沒有對應概念。
RDC中的應用(後麵均稱為RDC應用
),是一個可以獨立提供服務的應用程序及其相關信息的結合。“獨立提供服務的應用”這個概念與容器服務中的服務相對應,但又不是完全匹配,事實上和容器服務的一個服務對應的是RDC中的一個環境。在RDC中這種關聯關係是通過環境的部署配置完成的。如圖:
更多信息,詳見容器構建和部署中的部署配置
。
回滾
在流水線的右上角有一個回滾按鈕,點擊之後,就可以針對特定的環境進行回滾。至於該環境具體對應到哪個集群的哪個應用的哪個服務,隻需要一次性配置好,之後就不需要關心了,隻關注container-test-rdc
這個RDC應用
的不同環境的發布即可。RDC會記住某個環境的某次發布所對應的鏡像地址是什麼,並在回滾時,自動替換掉模板中對應服務的鏡像地址,進行一次重新部署。
基於RDC和容器服務的Devops模式的一些限製
可以看到,通過RDC和容器服務的集成,很好的解決了從代碼提交到發布上線,及多環境流水線部署等問題。但目前還存在一些局限,這些局限會很快解決掉。
- 對於發布,隻支持普通發布,不支持藍綠發布。
- 對於應用,隻支持通過模板創建的應用,不支持通過鏡像創建的應用。
- 不支持多個環境打一個鏡像。
其它Devops方案
基於容器 HUB 的持續交付和基於 Jenkins 的持續交付。
查看詳細容器構建和部署詳細操作,點此查看
作者:阿裏雲RDC的持續交付技術專家 崔力強(懷虎)
最後更新:2017-08-13 22:39:53