簡體   English   中英

在Docker Swarm中使用數據庫進行連續部署

[英]Continuous deployment with databases in Docker Swarm

我正在忙於為移動應用程序開發API,現在正在研究后端解決方案的部署。 這些組件非常簡單:nginx,.NET核心應用程序和用於持久性的postgresql。 萬一我需要快速擴展,我想首先從單個節點上的Docker Swarm開始。 為Postgresql擁有一個單獨的數據量似乎是可行的方法,但是我找不到有關升級和數據庫遷移的任何建議。 當我需要升級Postgresql映像(不需要pg_upgrade的小規模升級)時,這必須是手動操作,還是可以通過滾動升級來管理? 要求是在發生這種情況時關閉所有應用程序實例。 同樣,如何管理數據庫遷移,例如靜態數據/架構更改? 我將需要所有應用程序實例退出,完成遷移,然后重新啟動。 任何想法表示贊賞。

因此,做完這些之后,我認為我應該發布解決方案最終外觀的詳細信息。 首先,我使用GoCD(這是一款出色的開源連續交付服務器)來自動化從測試到生產的整個交付。 使用Docker時,最好應用單一責任原則,因此我如下創建了單獨的Docker Swarm堆棧:

  • 數據:由數據庫容器組成,在我的情況下為postgresql
  • 數據管理員:托管用於基於cron的數據庫備份,文件備份的容器以及處理應用程序數據庫先決條件(例如,創建數據庫/用戶)的容器
  • 應用程序:C#應用程序API的可伸縮容器,以及使用db-up進行托管數據庫遷移的容器
  • Web:托管一個Traefik容器-反向代理服務器,配置為將流量路由到應用程序堆棧
  • 監視:托管用於logstash,logspout,kibana,grafana和portainer的容器,並通過應用程序日志記錄到elasticsearch和kibana / grafana,以提供此數據的可視化。 Portainer支持群集的基本管理。

提交到master分支上的BitBucket存儲庫通過GoCD觸發對我的測試環境的更新,並使用CentOS上的大量bash腳本將所有這些編織在一起。 當測試看起來不錯時,我可以將按鈕部署到生產中。 混合Docker容器的映像是GoCD構建工件,並在構建過程中進行了版本控制,因此如有必要,可以輕松還原並重新發現它們。

我從數據庫升級中獲得的大多數信息都建議備份應用程序數據庫並將其還原到新版本的容器實例中。 有關詳細信息,請參見https://peter.grman.at/upgrade-postgres-9-container-to-10/ 對於應用程序數據庫遷移,我創建了一個特定於應用程序的“ devops”用戶,該用戶有權進行模式更改。 該用戶將被傳遞到應用程序的數據庫遷移容器,並且將無法在任何其他數據庫上使用。 應用容器本身僅提供了權限降低的應用用戶。

可以說有很多復雜的問題需要克服,例如服務間的相互依賴和啟動,但是通常使用谷歌搜索和堅韌不拔的精神是有好處的。 現在就像一個魅力!

注意:如果只希望在確保初始化數據庫(即運行所有遷移)后才開始提供應用容器,則要注意的一種模式是提供一個端口,其他服務可以在該端口上檢查服務的運行狀況。 以我為例,當所有遷移都已運行時,我讓數據庫遷移容器在端口上偵聽以提供響應。 嘗試從應用程序容器連接到數據庫還不夠,因為它不知道架構是否是最新的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM