閱讀294 返回首頁    go 阿裏雲 go 技術社區[雲棲]


RDC容器構建和部署服務新功能上線

容器服務

阿裏雲容器服務提供了從容器構建到部署的服務。再此基礎之上還提供了一係列的阿裏雲其它服務的集成和擴展,比如監控、日誌、負載均衡等。

Devops解決方案

先探討一下我們期望的Devops研發流程是什麼樣子。

Devops需求

對於一個應用A(非容器服務中的應用,而是RDC中的應用的概念),會考慮下麵的點:

  1. 在進行鏡像構建時,我希望運行測試;對於Java之類的編譯型語言,我還需要打包。但我不希望把運行測試和進行構建的依賴(比如maven),放入鏡像中。目前容器服務提供的構建服務僅支持docker build命令,因此無法在鏡像構建之外再做上述的工作。
  2. 多套環境的需求,比如testingstagingproduction三個環境。容器服務本身並沒有環境的概念。一種可能的方式是創建三個集群,分別對應上述的三個環境。但是這個環境是集群級別的,而不是服務級別的(通常一次發布是更新一個服務)。
  3. 對於正常的開發流程(hot fix另說)而言,我希望某個鏡像先上testing,驗證通過之後上staging,再驗證通過之後上production。需要有一個CD流水線來現實化這個過程。
  4. 如果發布出了問題,我也希望可以快速的把某個服務回滾到之前的版本。容器服務沒有回滾的概念,隻有變更應用配置的概念。也就是說,用戶需要記得(或者通過操作日誌查詢)上一次發布的鏡像版本是什麼,然後通過變更應用配置的入口,進行操作。
  5. 我希望在不同環境使用同一個鏡像,通過環境變量來區分不同的環境。容器服務是支持的,詳見查看服務詳情中的配置部分

可以看到對於上述的點,單用容器服務,有些無法很好的解決。下麵看看結合了RDC之後是如何解決這些問題的:

基於RDC和容器服務的Devops模式

創建應用

創建或者加入到企業之後,可以創建應用

為了滿足Devops需求中的第四點,目前需要選擇自由模式Git Flow模式分支模式後續也會支持。關於這幾種模式的區別,可以參看研發模式
create_container_app

發布流水線

創建好應用,進入發布頁麵後,可以看到RDC預置了三個環境(日常,預發,部署),並且在正常的開發流程中,每次代碼變更需要依次經過這三個環境。在這個流水線中,可以在獨立的環境中進行軟件包構建及單元測試等。詳見:構建配置容器構建配置

第一個stage(版本製作),將三個環境的包和鏡像都打出來。目前還不支持多個環境打一個鏡像,後續RDC會支持。不過可以通過配置讓三個環境的打包方式一模一樣,從而達到多個鏡像,但內容相同的效果。
CD_pipeline

RDC和容器服務的概念映射

RDC中有應用和環境的概念,容器服務中有集群、應用和服務的概念。這裏明確一下它們之間的對應關係。

容器服務中的集群和服務在RDC中沒有對應概念。

RDC中的應用(後麵均稱為RDC應用),是一個可以獨立提供服務的應用程序及其相關信息的結合。“獨立提供服務的應用”這個概念與容器服務中的服務相對應,但又不是完全匹配,事實上和容器服務的一個服務對應的是RDC中的一個環境。在RDC中這種關聯關係是通過環境的部署配置完成的。如圖:

env_mapping
更多信息,詳見容器構建和部署中的部署配置

回滾

在流水線的右上角有一個回滾按鈕,點擊之後,就可以針對特定的環境進行回滾。至於該環境具體對應到哪個集群的哪個應用的哪個服務,隻需要一次性配置好,之後就不需要關心了,隻關注container-test-rdc這個RDC應用的不同環境的發布即可。RDC會記住某個環境的某次發布所對應的鏡像地址是什麼,並在回滾時,自動替換掉模板中對應服務的鏡像地址,進行一次重新部署。

基於RDC和容器服務的Devops模式的一些限製

可以看到,通過RDC和容器服務的集成,很好的解決了從代碼提交到發布上線,及多環境流水線部署等問題。但目前還存在一些局限,這些局限會很快解決掉。

  1. 對於發布,隻支持普通發布,不支持藍綠發布。
  2. 對於應用,隻支持通過模板創建的應用,不支持通過鏡像創建的應用。
  3. 不支持多個環境打一個鏡像。

其它Devops方案

基於容器 HUB 的持續交付基於 Jenkins 的持續交付

查看詳細容器構建和部署詳細操作,點此查看

作者:阿裏雲RDC的持續交付技術專家 崔力強(懷虎)

最後更新:2017-08-13 22:39:53

  上一篇:go  因為知道這些功能,他們被永久列進了阿裏雲貢獻者榮譽榜
  下一篇:go  電商:功能遍曆場景