DevOps與阿裡雲容器服務(三)
https://yq.aliyun.com/articles/58414
摘要: ### 前言你若問十個哲學家什麼是『哲學』通常你會得到十一種答案(有一種是你自己的)。你若問十個持續傳遞佈道師什麼是『DevOps』,你恐怕得到的是上百種答案(因為你自己也有好幾種)。只有一個哲學問題是嚴肅的,那就是生與死。
前言
你若問十個哲學家什麼是『哲學』通常你會得到十一種答案(有一種是你自己的)。
你若問十個持續傳遞佈道師什麼是『DevOps』,你恐怕得到的是上百種答案(因為你自己也有好幾種)。
只有一個哲學問題是嚴肅的,那就是生與死。
而對於DevOps只有三個問題是嚴肅的
1.如何重建你的系統(How to recreate your system?)
2.如何安全地部署你的系統(How to safely change your system)
3.部署後的問題監控與解決(When something has gone wrong)
而今天我們要談的是如何安全的部署你的系統,部署這個名詞包含了很多的含義,最簡單的解釋就是如何讓你的程式執行在最終的環境上。但是部署的方式上面有非常多的最佳實踐。接下來我們來討論下常見的幾種發佈方式,以及這些發佈方式和容器結合的使用。
發佈原則
常見的發佈原則有藍綠發佈、金絲雀發佈(灰階發佈)、ABTest,在國內的開發人員中,對這幾個概念有硬地的理解。藍綠發佈通常被大家成為熱部署;金絲雀發佈在國內的名頭完全被他的變種發佈方式蓋過了,主要是灰階發佈與ABTtest,下面我們來詳細的為大家解釋一下他們之間的異同。
藍綠發佈
在發佈的程序中用戶無感知服務的重啟,通常情況下是通過新舊組建並存的方式實現,也就是說在發佈的流程中,新的組建和舊版組建是相互熱備的,通過切換路由權數的方式(非0即100)實現不同的套用的上線或者下線。
金絲雀發佈
通過線上上啟動並執行服務中,新上線少量的新組建的服務,然後從這少量的新組建中快速獲得回饋,根據回饋決定最後的交付形態。
灰階發佈
灰階發佈是通過切換線上並存組建之間的路由權數,逐步從一個組建切換為另一個組建的程序。雖然馬丁·扶老耳朵大人認為灰階發佈與金絲雀發佈是等同的,但是在具體的動作和目的上面個還是有些許差別的。金絲雀發佈更傾向於追蹤快速的回饋,而灰階發佈更傾向於從一個組建到另一個組建平穩的切換。
ABTest
ABTest和灰階發佈非常像,但是從發佈的目的上,可以簡單的區分灰階發佈與ABTest,ABTest側重的是從A組建或者B組建之間的差異,並根據這個結果進行決策。最終選擇一個組建進行部署。因此和灰階發佈相比,ABTest更傾向於去決策,和金絲雀發佈相比,ABTest在權數和流量的切換上更靈活。
阿裡雲容器服務實現藍綠發佈
下面我們通過一個簡單的例子來示範藍綠發佈的流程。假設我們要進行藍綠發佈的套用是一個nginx的靜態頁面,初始的套用範本如下
nginx-v1:
image: 'registry.aliyuncs.com/ringtail/nginx:1.0'
labels:
aliyun.routing.port_80: nginx
restart: always
部署後網頁的效果如下
點選變更設定
選擇變更的發佈原則與新組建服務的設定
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,需要通過路由管理網頁進行調整,方可進行流量切換。在進行發佈的程序中,會經歷兩個狀態,一個是藍綠發佈中,一個是藍綠發佈待確認。
藍綠發佈中表示,新組建的服務尚未啟動完成,而藍綠發佈待確認表示新組建的服務已經啟動完成,此時需要進行發佈確認或者發佈復原方可進行下一次發佈。進入套用的詳情網頁,可以看到新組建的套用和舊組建的套用並存。其中藍色的表示舊組建的服務,綠色表示新組建的服務。如果一個服務在前後兩個組建中都存在且沒有變化,那麼會出現黃色的標籤,表示這個套用在藍綠發佈中不會出現任何變化。
點選路由清單,調整與之對應的路由權數。
如圖所示,舊組建服務的權數為100,新組建服務的權數為0,下面我們將舊組建服務的權數調整為0,新組建服務的權數調整為100
由於預設路由服務是進行對話保留的,您可以打開一個新的瀏覽器視窗,存取新的組建,結果如下。
當整個發佈流程驗證完畢後,需要進行發佈確認,方可進行下一次發佈。
點選發佈確認後,查看套用的詳情,可以看到套用的服務清單已經更新了,舊版服務已經完全下線移除了
相關產品:
- 容器服務(Docker)
- 阿裡雲辦公
- 阿裡綠網
- 雲端服務器ECS