天天看點

marathon參考(2)Blue-Green Deployment

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=
           

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

繼續閱讀