将应用程序部署到 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 启动应用程序服务器
首先,咱们将使用 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
具备多年软件开发经验;对Java主流技术、前沿框架都具备丰富的开发经验;擅长Linux服务器,对优化,部署等有深刻研究,熟悉Jenkins,持续集成及交付,DevOps等。
欢迎转载,但转载请注明做者与出处。谢谢!