如何使用 Spinnaker 和 Kubernetes 进行数据库变更发布?
译者:靳日阳 转载自公众号:JFrog杰蛙DevOps(jfrogchina)
将应用程序部署到 Kubernetes 时,有很多选择。像 Helm 和 Ksonnet 这样的工具使得打包应用程序并将其部署到多个 Kubernetes 环境变得非常简单。但是,这些工具只能解决部分问题。部署到生产很少像 helm install my-chart 一样如此简单。他们可以涉及多个步骤,并保证所涉及的应用程序正常运行。我从 Kubernetes 用户那里听到的一个最常见的问题是“如何部署我的数据库变更?”。这是我一遍又一遍地问自己的问题。在 Skuid ,我们花了很多时间试图找出最安全和高可用的方式来执行这些数据库迁移,作为我们部署 Pipeline 的一部分。我们写的代码来做到这一小步在我们的 Pipeline 步骤是很复杂的。
使用 Spinnaker,我们能够使这一步骤可重复,安全和可靠。在本教程中,我将解释如何设置一个简单的部署 Pipeline 来运行我们的迁移,并部署我们的应用程序,而不写任何复杂的代码。
本教程的目标是展示使用 Spinnaker 为 Kubernetes 构建整体部署 Pipeline 是多么容易。这个例子虽然是个简单的 Demo,但是却演示了如何在部署过程中执行多个步骤,而无需为生产中运行的每个应用程序重复"造轮子"。
安装程序
对于本教程,我们将使用 Go 编写的示例应用程序。此示例应用程序包含一个简单的 API 服务器以及一个用于上下迁移数据库的命令。在
这儿可以看到。我们将设置一个简单的持续部署 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,我们可以使用现成的普通阶段来构建简单或复杂的部署,以满足您的公司的需求。
原文:Deploying Database Migrations with Spinnaker and Kubernetes 链接:https://blog.spinnaker.io/deploying-database-migrations-with-spinnaker-and-kubernetes-6e6761f9d28a
推荐阅读
Netflix 的上线工具 Spinnaker
长按指纹
一键关注
![](/assets/blank.gif)
![](/assets/blank.gif)
点击 “阅读原文” 看看本号其他精彩内容
如何使用 Spinnaker 和 Kubernetes 进行数据库变更发布?相关推荐
- k8s服务器修改ip,[转载][K8S] Kubernetes 集群变更IP地址
[K8S] Kubernetes 集群变更IP地址 原文:https://blog.csdn.net/whywhy0716/article/details/92658111 本文基于单节点K8S. 碎 ...
- LiquiBase 管理数据库变更实践
demo地址 gitee.com/youngboyvip- 首先来了解下liquibase是什么 Liquibase是一个用于跟踪.管理和应用数据库变化的开源的数据库重构工具.它将所有数据库的变化(包 ...
- 使用 LiquiBase 管理数据库变更
让开发自动化: 实现自动化数据库迁移 在过去几年中,我使用过的大多数应用程序都是需要管理大量数据的企业应用程序.从事这类项目的开发团队常常将数据库视为与应用程序完全脱离的单独实体.造成这种现象的原因是 ...
- 数据库变更管理:Liquibase or Flyway
<从零打造项目>系列文章 工具 比MyBatis Generator更强大的代码生成器 ORM框架选型 SpringBoot项目基础设施搭建 SpringBoot集成Mybatis项目实操 ...
- SpringBoot结合Liquibase实现数据库变更管理
<从零打造项目>系列文章 工具 比MyBatis Generator更强大的代码生成器 ORM框架选型 SpringBoot项目基础设施搭建 SpringBoot集成Mybatis项目实操 ...
- Kubernetes v1.23即将发布,有哪些重磅更新?
Kubernetes 1.23即将发布,此版本带来了 45 项增强功能,与 Kubernetes 1.22 中的 56 项和 Kubernetes 1.21 中的 50 项相近.在这 45 项增强功能 ...
- Kubernetes 1.13 版本发布:Kubeadm简化群集管理、容器存储接口(CSI)和CoreDNS作为默认DNS现已普遍可用
Kubernetes 1.13 版本发布 Kubeadm简化群集管理.容器存储接口(CSI)和CoreDNS作为默认DNS现已普遍可用 我们很高兴地宣布推出Kubernetes 1.13,这是我们20 ...
- sql数据库 订阅发布_如何使用中央发布者和多个订阅者数据库设置自定义SQL Server事务复制
sql数据库 订阅发布 In this article, you'll learn how to setup a simple, custom distributed database replica ...
- 罗永浩回应做主播赚钱还债;360 否认裁员;Kubernetes 1.18 版本发布| 极客头条
整理 | 屠敏 头图 | CSDN 下载自视觉中国 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦, ...
最新文章
- mfc 加密解密_[源码和文档分享]基于MFC实现的AES加密解密程序
- java 开关按钮_Java Swing JToggleButton开关按钮的实现
- (原)Mac下Apache添加限制IP线程模块:mod_limitipconn.so
- 多线程中使用信号机制 pthread_sigmask()
- Android App跳转微信小程序教程
- 如何使用ccs软件创建工程
- linux下文本去重
- 使用Layui搭建后台管理界面
- MongoDB快速学习
- ecshopnbsp;二次开发nbsp;全集
- STM32F103C8T6串口通信
- js splice的三个用法
- 凑零钱动态规划java_凑零钱问题-动态规划回溯贪心
- Linux系统中常用命令行命令、快捷键、创建长路径的快捷键
- 期货涨跌与什么有关(期货和股市涨跌有关系吗)
- chrome浏览器虚拟摄像头
- 7招,远离大数据杀熟!
- Shogun docker image中不能import shogun
- 【阶段总结】研一上学期总结
- 达摩院发布2023十大科技趋势,多领域“日进一寸”式融合创新
热门文章
- 端口转发与代理工具 内网代理 内网反弹代理
- linux VFS 虚拟文件系统 简介 super_block inode dentry file
- linux c获得时间和设置时间
- pow函数gcc编译提示 undefined reference to `power' 的解决办法
- iptables规则的查看、添加、删除和修改
- Android 中 JUnit 测试的配置
- debian linux修改语言,Debian Linux系统下英文系统切换为中文
- $.ajax data怎么处理_不会吧,不会吧,不愧是Ajax,jQuery Ajax啊
- 计算机数据库技术应用了什么,2018年全国计算机三级数据库技术考试考什么内容...
- java blob压缩_如何从Oracle中用Java压缩的BLOB列中提取XML文档