歡迎光臨
每天分享高質量文章

如何使用 Spinnaker 和 Kubernetes 進行資料庫變更釋出?

將應用程式部署到 Kubernetes 時,有很多選擇。像 Helm 和 Ksonnet 這樣的工具使得打包應用程式並將其部署到多個 Kubernetes 環境變得非常簡單。但是,這些工具只能解決部分問題。部署到生產很少像 helm install my-chart 一樣如此簡單。他們可以涉及多個步驟,並保證所涉及的應用程式正常執行。我從 Kubernetes 使用者那裡聽到的一個最常見的問題是“如何部署我的資料庫變更?”。這是我一遍又一遍地問自己的問題。在 Skuid ,我們花了很多時間試圖找出最安全和高可用的方式來執行這些資料庫遷移,作為我們部署 Pipeline 的一部分。我們寫的程式碼來做到這一小步在我們的 Pipeline 步驟是很複雜的。
使用 Spinnaker,我們能夠使這一步驟可重覆,安全和可靠。在本教程中,我將解釋如何設定一個簡單的部署 Pipeline 來執行我們的遷移,並部署我們的應用程式,而不寫任何複雜的程式碼。
本教程的標的是展示使用 Spinnaker 為 Kubernetes 構建整體部署 Pipeline 是多麼容易。這個例子雖然是個簡單的 Demo,但是卻演示瞭如何在部署過程中執行多個步驟,而無需為生產中執行的每個應用程式重覆”造輪子”。


安裝程式

對於本教程,我們將使用 Go 編寫的示例應用程式。此示例應用程式包含一個簡單的 API 伺服器以及一個用於上下遷移資料庫的命令。在這兒[1]可以看到。我們將設定一個簡單的持續部署 Pipeline ,將新的 Docker 映象推送到映象註冊中心(Quay)時執行兩項操作:
  • 使用新映象執行資料庫遷移

  • 部署新的 API 伺服器

這個示例證明使用 Spinnaker 可以輕鬆實現整個部署流程的自動化,並確保我們以安全可重覆的方式進行部署。作為參考,我們將要部署的映象是透過 Server 命令在3000埠上釋出一個 API 伺服器。要執行資料庫遷移,我們將使用相同的 Docker 映象,但不是執行該 Server 命令,而是使用該 Migrate 命令。以下是我們示例應用程式的 –help 輸出:
用法:
  • golang-sample-service [command]

可用命令:
  • 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,我們可以使用現成的普通階段來構建簡單或複雜的部署,以滿足您的公司的需求。
相關連結:
  1. https://github.com/ethanfrogers/golang-sample-service

原文連結:https://blog.spinnaker.io/deploying-database-migrations-with-spinnaker-and-kubernetes-6e6761f9d28a
來源:JFrog傑蛙DevOps

基於Kubernetes的DevOps實踐培訓

本次培訓包含:Kubernetes核心概念;Kubernetes叢集的安裝配置、運維管理、架構規劃;Kubernetes元件、監控、網路;針對於Kubernetes API介面的二次開發;DevOps基本理念;微服務架構;微服務的容器化等,點選識別下方二維碼加微信好友瞭解具體培訓內容

點選閱讀原文連結即可報名。
贊(0)

分享創造快樂