DevOps與阿裡雲容器服務(三)

來源:互聯網
上載者:User

DevOps與阿裡雲容器服務(三)

https://yq.aliyun.com/articles/58414

摘要: ### 前言你若問十個哲學家什麼是『哲學』通常你會得到十一種答案(有一種是你自己的)。你若問十個持續傳遞佈道師什麼是『DevOps』,你恐怕得到的是上百種答案(因為你自己也有好幾種)。只有一個哲學問題是嚴肅的,那就是生與死。

前言

你若問十個哲學家什麼是『哲學』通常你會得到十一種答案(有一種是你自己的)。

你若問十個持續傳遞佈道師什麼是『DevOps』,你恐怕得到的是上百種答案(因為你自己也有好幾種)。

U10337P1482DT20140723145551.jpg

只有一個哲學問題是嚴肅的,那就是生與死。

而對於DevOps只有三個問題是嚴肅的

1.如何重建你的系統(How to recreate your system?)
2.如何安全地部署你的系統(How to safely change your system)
3.部署後的問題監控與解決(When something has gone wrong)

而今天我們要談的是如何安全的部署你的系統,部署這個名詞包含了很多的含義,最簡單的解釋就是如何讓你的程式執行在最終的環境上。但是部署的方式上面有非常多的最佳實踐。接下來我們來討論下常見的幾種發佈方式,以及這些發佈方式和容器結合的使用。

發佈原則

常見的發佈原則有藍綠發佈、金絲雀發佈(灰階發佈)、ABTest,在國內的開發人員中,對這幾個概念有硬地的理解。藍綠發佈通常被大家成為熱部署;金絲雀發佈在國內的名頭完全被他的變種發佈方式蓋過了,主要是灰階發佈與ABTtest,下面我們來詳細的為大家解釋一下他們之間的異同。

藍綠發佈

在發佈的程序中用戶無感知服務的重啟,通常情況下是通過新舊組建並存的方式實現,也就是說在發佈的流程中,新的組建和舊版組建是相互熱備的,通過切換路由權數的方式(非0即100)實現不同的套用的上線或者下線。

greendeployment.png

金絲雀發佈

通過線上上啟動並執行服務中,新上線少量的新組建的服務,然後從這少量的新組建中快速獲得回饋,根據回饋決定最後的交付形態。
canarydeployment.png

灰階發佈

灰階發佈是通過切換線上並存組建之間的路由權數,逐步從一個組建切換為另一個組建的程序。雖然馬丁·扶老耳朵大人認為灰階發佈與金絲雀發佈是等同的,但是在具體的動作和目的上面個還是有些許差別的。金絲雀發佈更傾向於追蹤快速的回饋,而灰階發佈更傾向於從一個組建到另一個組建平穩的切換。
canary-release-1.png
canary-release-2.png
canary-release-3.png

ABTest

ABTest和灰階發佈非常像,但是從發佈的目的上,可以簡單的區分灰階發佈與ABTest,ABTest側重的是從A組建或者B組建之間的差異,並根據這個結果進行決策。最終選擇一個組建進行部署。因此和灰階發佈相比,ABTest更傾向於去決策,和金絲雀發佈相比,ABTest在權數和流量的切換上更靈活。
abtesting.png

阿裡雲容器服務實現藍綠發佈

下面我們通過一個簡單的例子來示範藍綠發佈的流程。假設我們要進行藍綠發佈的套用是一個nginx的靜態頁面,初始的套用範本如下

nginx-v1:
image: 'registry.aliyuncs.com/ringtail/nginx:1.0'
labels:
aliyun.routing.port_80: nginx
restart: always

部署後網頁的效果如下
635465b5b738a248975dabd6aff19204.png

點選變更設定
95bbe369b1759b527c894ffcfa65eabf.png

選擇變更的發佈原則與新組建服務的設定
241244debc3d1339f2f363ab9479ab4f.png

nginx-v2:
image: 'registry.aliyuncs.com/ringtail/nginx:2.0'
labels:
aliyun.routing.coexist: true
aliyun.routing.port_80: nginx
restart: always

在藍綠發佈中,新組建與舊組建不能共用同一個名字;如果共用同一個路由位址,那麼需要新增aliyun.routing.coexist的label,這個label的含義是,本期的服務與其他服務共用路由位址,在藍綠發佈的場景中,為了許諾套用的零宕機切換,新組建的服務的路由權數預設為0,需要通過路由管理網頁進行調整,方可進行流量切換。在進行發佈的程序中,會經歷兩個狀態,一個是藍綠發佈中,一個是藍綠發佈待確認。

7e861ed9770267948dd004d9818a9fce.png
09cee4dc0f8d93b2b1018dfe031f313c.png

藍綠發佈中表示,新組建的服務尚未啟動完成,而藍綠發佈待確認表示新組建的服務已經啟動完成,此時需要進行發佈確認或者發佈復原方可進行下一次發佈。進入套用的詳情網頁,可以看到新組建的套用和舊組建的套用並存。其中藍色的表示舊組建的服務,綠色表示新組建的服務。如果一個服務在前後兩個組建中都存在且沒有變化,那麼會出現黃色的標籤,表示這個套用在藍綠發佈中不會出現任何變化。
2938d9729d92b322e35fd07a5f3af3bc.png
點選路由清單,調整與之對應的路由權數。
6298b980543df7c0a00055891ff86a4a.png
如圖所示,舊組建服務的權數為100,新組建服務的權數為0,下面我們將舊組建服務的權數調整為0,新組建服務的權數調整為100

33564af8bd4f8798d8c829f88f63ab00.png
3ccf3311cd5258e4015dd446e46ca249.png

由於預設路由服務是進行對話保留的,您可以打開一個新的瀏覽器視窗,存取新的組建,結果如下。
d332d4762eb9ae4a8df2f0db73683444.png

當整個發佈流程驗證完畢後,需要進行發佈確認,方可進行下一次發佈。
9fbc7129f428236874b35cf349ce89cf.png
點選發佈確認後,查看套用的詳情,可以看到套用的服務清單已經更新了,舊版服務已經完全下線移除了
a4c1be7512c09f24367f18d18211a5cf.png

相關產品:

  1. 容器服務(Docker)
  2. 阿裡雲辦公
  3. 阿裡綠網
  4. 雲端服務器ECS
相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.