2017-02-22 37 views
0

我們正在運行DC/OS集羣,並且現在手動管理它,因爲其中運行的容器實例數量少且不需要太多幹預。DC/OS和併發部署

現在,我們希望從Jenkins進行部署 - 而在Marathon插件的配合下,我們遇到了一個或多或少有趣的問題:共享卷。

我們所有的節點都有一個安裝在/ srv上的NetApp,而且這些服務有Docker容器卷,它們將某些容器路徑映射到/ srv中的子目錄。現在,當Jenkins作業導致服務重新部署時,它將在暫存新版本時離開舊容器並在新容器達到「健康」狀態時切換。

這是一個問題,因爲所涉及的映像包含MongoDB和MySQL--由於在後備數據庫文件上存在併發訪問,因此中斷映像。

如何將舊實例縮放到0,並且只有在舊實例乾淨停止時才實際部署新實例?

在DC/OS中設置共享的MongoDB/MySQL容器是我不太喜歡的,因爲它會導致開發者機器上的容器之間的差異,以及容器播種的數據庫內容是包括在圖像中...

編輯:當有人不小心按下「重新啓動服務」時,這個問題也經常咬我們,因爲不像命名提示,它不會執行shutdown-wait-redeploy,而且還會執行stage-then-切換...

回答

0

你可以看看

基本上,你應該使用MARATHON_SINGLE_INSTANCE_APP標籤這樣

"labels":{ 
    "MARATHON_SINGLE_INSTANCE_APP": "true", 
} 

並相應地指定upgradeStrategy

"upgradeStrategy":{ 
    "minimumHealthCapacity": 0, 
    "maximumOverCapacity": 0 
}