如何使用 Spinnaker 和 Kubernetes 進行數據庫變動發佈

將應用程序部署到 Kubernetes 時,有不少選擇。像 Helm 和 Ksonnet 這樣的工具使得打包應用程序並將其部署到多個 Kubernetes 環境變得很是簡單。可是,這些工具只能解決部分問題。部署到生產不多像 helm install my-chart 同樣如此簡單。他們能夠涉及多個步驟,並保證所涉及的應用程序正常運行。我從 Kubernetes 用戶那裏聽到的一個最多見的問題是「如何部署個人數據庫變動?」。這是我一遍又一遍地問本身的問題。在 Skuid ,咱們花了不少時間試圖找出最安全和高可用的方式來執行這些數據庫遷移,做爲咱們部署 Pipeline 的一部分。咱們寫的代碼來作到這一小步在咱們的 Pipeline 步驟是很複雜的。golang

使用 Spinnaker ,咱們可以使這一步驟可重複,安全和可靠。在本教程中,我將解釋如何設置一個簡單的部署 Pipeline 來運行咱們的遷移,並部署咱們的應用程序,而不寫任何複雜的代碼。數據庫

本教程的目標是展現使用 Spinnaker 爲 Kubernetes 構建總體部署 Pipeline 是多麼容易。這個例子雖然是個簡單的 Demo,可是卻演示瞭如何在部署過程當中執行多個步驟,而無需爲生產中運行的每一個應用程序重複"造輪子"。安全

安裝程序

對於本教程,咱們將使用 Go 編寫的示例應用程序。此示例應用程序包含一個簡單的 API 服務器以及一個用於上下遷移數據庫的命令。咱們將設置一個簡單的持續部署 Pipeline ,將新的 Docker 鏡像推送到鏡像註冊中心(Quay)時執行兩項操做:服務器

1. 使用新鏡像運行數據庫遷移框架

2. 部署新的 API 服務器ide

這個示例證實使用 Spinnaker 能夠輕鬆實現整個部署流程的自動化,並確保咱們以安全可重複的方式進行部署。工具

做爲參考,咱們將要部署的鏡像是經過 Server 命令在3000端口上發佈一個 API 服務器。要執行數據庫遷移,咱們將使用相同的 Docker 鏡像,但不是執行該 Server 命令,而是使用該 Migrate 命令。如下是咱們示例應用程序的 --help 輸出:測試

用法:優化

  • golang-sample-service [command]ui

可用命令:

  • Help 有關任何命令

  • Migrate 幫助執行數據庫遷移

  • Server 啓動應用程序服務器

部署 API 服務器

首先,咱們將使用 Spinnaker 創建一個簡單的部署流程。這個 Pipeline 將把一個新的鏡像推送到註冊中心。

首先,咱們須要配置觸發器:


而後,咱們將經過單擊「添加階段」並選擇「部署」來配置部署階段。


從那裏,咱們能夠添加一個新的服務器組,使用觸發鏡像,並在「容器」部分下配置它的端口:



如今這些步驟已經完成,咱們能夠經過導航返回到「Pipeline」選項卡並執行 Pipeline 來測試咱們的 Pipeline。這將把咱們服務的第一個實例部署到咱們的目標 Kubernetes 賬戶。


而後,咱們能夠經過導航到「Clusters」選項卡並查看咱們的服務是否健康(由服務器組下的綠色實例表示)來驗證咱們的服務是否正在運行。


數據庫升級

咱們教程的下一步將是將咱們的數據庫變動發佈添加到咱們的 Pipeline 中。爲此,咱們將利用 Run Job 階段,並將其做爲部署咱們的應用程序的先決條件。這個階段將經過 Docker 鏡像觸發咱們的 Pipeline,並運行一個 Kubernetes Pod 來執行數據庫遷移。若是 Pod 成功退出,該階段將被視爲成功,並進入咱們現有的部署階段。

首先,咱們將添加 Run Job 階段並對其進行配置。咱們不須要爲這個工做公開任何端口,可是咱們須要添加一些額外的環境變量,以便咱們的遷移框架知道如何鏈接到咱們的數據庫。對於本教程,我簡單地鏈接到集羣內 Postgres 數據庫,可是您的應用程序能夠輕鬆鏈接到 AWS 或其餘數據庫解決方案中的 RDS 實例。

咱們將經過添加一個 Run Job 階段開始,就像咱們添加部署階段同樣:


而後,咱們將經過選擇觸發鏡像來配置咱們的工做,覆蓋「參數」並在「容器」部分下添加咱們的環境變量:

注意:遷移數據庫的命令是 migrate up --dir={migrations-directory}



一旦咱們的做業配置好了,咱們所要作的就是配置部署階段,依靠 Run Job 階段的成功,經過導航到部署階段並從 「depends on」 部分選擇 「Run Database Migrations」:


再次,咱們能夠執行咱們的 Pipeline,如今,在部署階段以前,咱們將運行數據庫遷移做爲部署 Pipeline 的一部分。


結論

以安全可靠的方式將軟件交付給生產是一個難題。更糟糕的是,今天可用的工具只能解決一小部分問題。 Spinnaker 是一種減輕這種負擔的方法,而沒必要像 Jenkins 同樣將多個腳本和系統與 CI 平臺粘合在一塊兒。經過使用 Spinnaker Pipeline,咱們可使用現成的普通階段來構建簡單或複雜的部署,以知足您的公司的需求。

原文連接:

https://blog.spinnaker.io/deploying-database-migrations-with-spinnaker-and-kubernetes-6e6761f9d28a

做者:靳日陽,JFrog 研發工程師

具備多年軟件開發經驗;對Java主流技術、前沿框架都具備豐富的開發經驗;擅長Linux服務器,對優化,部署等有深刻研究,熟悉Jenkins,持續集成及交付,DevOps等。

歡迎轉載,但轉載請註明做者與出處。謝謝!

相關文章
相關標籤/搜索