Blue-green deployment是一個安全部署應用的方法,它通過提供兩個版本的應用同時運行。爲了部署一個新版本的應用,你需要將當前版本切換到新版本,然後關閉老版本。Blue-green deployment不會使應用停止服務,在必要的情況下允許你快速回滾應用到blue版本。
這篇文章簡要的描述了這一過程
http://martinfowler.com/bliki/BlueGreenDeployment.html
在生產環境,你可能使用了腳本,將這個過程集成到了你已有的系統。下面,我們提供一個實例,使用DCOS CLI來提供一個安全部署。(DCOS CLI可以和DCOS和開源的marathon一起使用)
準備
基於marathon的應用有精準的健康監控
應用也許會暴露一個指標終端點檢測應用是否有任何沒有完成的操作。例如,檢測數據庫等待事務數等。
jq命令行json處理器
如果你使用的是開源的mesos,需要配置DCOS CLI
步驟
我們將使用GREEN版本的應用替換BLUE版本的應用。
1.在marathon中加載一個新版本的應用,添加給應用名稱一個唯一的ID,例如git的commit id。在這個例子中,我們通過添加GREEN到名稱中來給應用添加新版本號。
# launch green
dcos marathon app add green-myapp.json
注意:如果你用API來代替DCOS CLI,這個命令會很長:
curl -H "Content-Type: application/json" -X POST -d @green-myapp.json <hosturl>/marathon/v2/apps
2.可以縮放GREEN應用實例到1個或多個。初始(從0個實例開始),根據所提供的服務設置應用實例最小的數量。
# scale green
dcos marathon app update /green-myapp instances=1
3.等待,直到GREEN應用的所有任務提供了健康檢測。這一步需要jq。
# wait until healthy
dcos marathon app show /green-myapp | jq '.tasks[].healthCheckResults[] | select (.alive == false)'
4.使用上面的代碼片段去檢測所有GREEN實例是否仍然健康。如果沒有達到你的預期的結果,可以終止部署並且回滾。
5.從GREEN應用添加一個新的任務實例到負載均衡池中。
6.從當前版本(BLUE版本)的應用獲取一個多多個任務實例。
# pick tasks from blue
dcos marathon task list /blue-myapp
7.更新負載均衡配置,從BLUE應用池中刪除任務實例。
8.等待,直到BLUE任務實例沒有等待的操作。應用提供的指標終端點檢測等待操作的數量。
9.直到BLUE任務所有的操作完成,使用API關閉BLUE應用。在下面的代碼片段中,hosturl是你master節點的hostname,需要加上http://前綴。
# kill and scale blue tasks
echo "{\"ids\":[\"<task_id>\"]}" | curl -H "Content-Type: application/json" -X POST -d @- <hosturl>/marathon/v2/tasks/delete?scale=true
這個marathon操作將移除指定實例(這些實例的沒有等待操作)並且阻止他們被重新啓動。
10.重複步驟2到9,指定沒有BLUE的任務。
11.從marathon中移除BLUE應用。
# remove blue
dcos marathon app remove /blue-myapp
原文:https://mesosphere.github.io/marathon/docs/blue-green-deploy.html