如何使用 Spinnaker 和 Kubernetes 進行資料庫變更發布?

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

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

本教程的目標是展示使用 Spinnaker 為 Kubernetes 構建整體部署 Pipeline 是多麼容易。這個例子雖然是個簡單的 Demo,但是卻演示了如何在部署過程中執行多個步驟,而無需為生產中運行的每個應用程序重複」造輪子」。

安裝程序

對於本教程,我們將使用 Go 編寫的示例應用程序。此示例應用程序包含一個簡單的 API 伺服器以及一個用於上下遷移資料庫的命令。在

這兒可以看到。我們將設置一個簡單的持續部署 Pipeline ,將新的 Docker 鏡像推送到鏡像註冊中心(Quay)時執行兩項操作:

  1. 使用新鏡像運行資料庫遷移
  2. 部署新的 API 伺服器

這個示例證明使用 Spinnaker 可以輕鬆實現整個部署流程的自動化,並確保我們以安全可重複的方式進行部署。作為參考,我們將要部署的鏡像是通過 Server 命令在3000埠上發布一個 API 伺服器。要執行資料庫遷移,我們將使用相同的 Docker 鏡像,但不是執行該 Server 命令,而是使用該 Migrate 命令。以下是我們示例應用程序的 –help 輸出:

用法:

  • golang-sample-service [command]

可用命令:

  • Help 有關任何命令
  • Migrate 幫助執行資料庫遷移
  • Server 啟動應用程序伺服器

部署 API 伺服器

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

首先,我們需要配置觸發器:

01.png

然後,我們將通過單擊「添加階段」並選擇「部署」來配置部署階段。

02.png

從那裡,我們可以添加一個新的伺服器組,使用觸發鏡像,並在「容器」部分下配置它的埠:

03.png

04.png

現在這些步驟已經完成,我們可以通過導航返回到「Pipeline」選項卡並執行 Pipeline 來測試我們的 Pipeline。這將把我們服務的第一個實例部署到我們的目標 Kubernetes 帳戶。

05.png

然後,我們可以通過導航到「Clusters」選項卡並查看我們的服務是否健康(由伺服器組下的綠色實例表示)來驗證我們的服務是否正在運行。

06.png

資料庫升級

我們教程的下一步將是將我們的資料庫變更發布添加到我們的 Pipeline 中。為此,我們將利用 Run Job 階段,並將其作為部署我們的應用程序的先決條件。這個階段將通過 Docker 鏡像觸發我們的 Pipeline,並運行一個 Kubernetes Pod 來執行資料庫遷移。如果 Pod 成功退出,該階段將被視為成功,並進入我們現有的部署階段。

首先,我們將添加 Run Job 階段並對其進行配置。我們不需要為這個工作公開任何埠,但是我們需要添加一些額外的環境變數,以便我們的遷移框架知道如何連接到我們的資料庫。對於本教程,我簡單地連接到集群內 Postgres 資料庫,但是您的應用程序可以輕鬆連接到 AWS 或其他資料庫解決方案中的 RDS 實例。

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

07.png

然後,我們將通過選擇觸發鏡像來配置我們的工作,覆蓋「參數」並在「容器」部分下添加我們的環境變數:

注意:遷移資料庫的命令是 migrate up –dir={migrations-directory}

08.png

09.png

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

10.png

再次,我們可以執行我們的 Pipeline,現在,在部署階段之前,我們將運行資料庫遷移作為部署 Pipeline 的一部分。

11.png

結論

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

原文鏈接:Deploying Database Migrations with Spinnaker and Kubernetes

本文作者:靳日陽

原文鏈接:轉載自公眾號:JFrog傑蛙DevOps(jfrogchina)

版權歸作者所有,轉載請註明出處

推薦閱讀:

kubernetes1.4.5安裝文檔
漫畫:小黃人學 Kubernetes Service
現在做雲計算的出路到底在哪?

TAG:Kubernetes | PacificHelm | Go语言 |