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

如何使用 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)

分享創造快樂