有状态Stateful,富含数据的CI/CD怎么做?

CI/CD with Data: 通过AWS Developer Tools、 Kubernetes和Portworx来实现软件交付Pipeline的数据迁移能力

数据是应用最重要的部分。容器技术让应用打包和部署变得更快更容易。对于软件的可靠交付来说,测试环节变得更加重要。由于所有的应用都包含数据,开发团队需要办法来可靠的控制、迁移、和测试真实的应用数据。

对于一些团队来说,通过CI/CD pipeline来移动应用数据,为了保持合规性和兼容其他一些问题,一直是通过手动方式来完成的,无法有效扩展。通常只能适用于一小部分应用,而且无法在不同环境中迁移。目标应该是运行和测试有状态容器,如同无状态容器一样简单(有状态容器 – 例如数据库或者消息总线,其中运行是被追踪的;无状态容器 – 例如网页前端)

为什么测试场景中“状态-State”十分重要?一个原因是许多bug只会在真实数据的环境下才会产生。例如,你需要测试一个数据库的schema的升级,而一个小的数据集并不能完全代表包含复杂商业逻辑的关键应用。如果你需要进行端到端的完整测试,我们需要能够容易的管理我们的数据和State。

在本篇文章中,我们定义CI/CD Pipeline的参考架构,从而能够达到应用间的自动数据迁移。我们也展示如何配置CI/CD pipeline的步骤。

有状态Pipelines: 需要可迁移的卷

作为持续集成、测试、部署的一部分,我们需要在分段setup(staging setup)中重现生产环境中发现的bug。这里,Hosting环境由一个集群组成:Kubernetes作为调度器,Portworx作为持久存储卷。测试的工作流通过AWS CodeCommit、AWSCodePipeline、和AWS CodeBuild来自动完成。

Portworx提供Kubernetes存储,从而可以实现在AWS环境和Pipeline之间的永久卷的迁移。AWS Developer Tools配合Portworx按照Kubernetes参考架构的持续部署,为Kubernetes集群添加了持久存储和存储调度。我们使用MongoDB作为有状态应用的例子,但实际上,工作流可以应用到任何容器化应用:例如Cassandra、MySQL、Kafka、以及Elasticsearch。

使用参考架构,开发者调用CodePipeline来触发运行MongoDB数据库生产系统的快照。Portworx接着会创建基于块的,可写的MongoDB卷的快照。这个过程中,MongoDB数据库的生产系统一直在运行,最终用户不会中断。

如果没有Portworx在其中,手动操作将会需要在CI/CD过程之外,进行一个应用层面的数据库备份实例。如果数据库较大,这会花费好几个小时,并且会影响到生产环境。使用基于块的快照,是实现稳固的不停机备份的最佳方式。

作为工作流的一部分,CodePipeline部署了一个新的MongoDB实例,Staging到Kubernetes集群上,并且Mount第二个具备生产数据的Porworx卷。CodePipeline通过AWS Lambda功能,来触发Portworx卷的快照。

如下图所示:


AWS Developer Tools与Kubernetes:通过工作流与Portworx集成

在下面的工作流中,开发者测试正在使用MongoDB的容器化应用的一个变化。测试是针对一个Staging的MongoDB的实例。如果变化是在服务器端的话,测试工作流也是一样的。最初的生产部署是作为Kubernetes的部署对象来被调度的,并且使用Portworx作为持久卷的存储。

持续部署Pipeline按照如下来运行:

- 开发者集成Bug修改的变化到一个主要的开发分支,这个开发分支会被合并到CodeCommit的主分支上 当代码被合并到AWS   

- CodeCommit repository的主分支后,Amazon CloudWatch触发Pipeline AWS

- CodePipeline 发送新的版本到AWS CodeBuild, CodeBuild会创建一个含有build ID的Docker容器镜像

- AWS CodeBuild推送新的已标记build      ID的Docker容器镜像,到Asazon ECR      registry Kubernetes从Amazon

- ECR下载新的容器(为数据库的客户端)、部署应用(作为一个pod)、然后Staging MongoDB实例(作为一个部署对象)

- AWS CodePipeline, 通过Lambda功能,调用Portworx来为MongoDB生产系统做快照,并且部署一个Staging的MongoDB实例

- Portworx提供生产实例的快照,作为Staging MongoDB的持久存储

- MongoDB实例Mounts快照

到这里,Staging的Setup模拟了一个生产环境。团队可以运行集成和端到端的完整测试,使用合作伙伴的工具,不会影响到生产环境的负载。完整的Pipeline如下所示:


总结

这个参考架构展示了开发团队可以很容易的在生产环境中迁移数据,以及为测试来做Staging。并不需要对应用做特定的手动操作,所有CodePipeline的运行都是自动的,并且作为CI/CD过程的一部分被追踪。

这个集成过程使得有状态容器和无状态容器一样容易。通过使用AWS Codepipeline来对CI/CD过程进行管理,开发者使用Portworx存储,可以容易的在Kubernetes集群上部署有状态容器,并且自动的在流程中进行数据管理。

参考架构和代码在Github上:

Reference architecture: https://github.com/portworx/aws-kube-codesuite

Lambda function source code for Portworx additions: https://github.com/portworx/aws-kube-codesuite/blob/master/src/kube-lambda.py

关于容器持久存储的更多内容,请访问Portworx网站(https://portworx.com/)。关于Code Pipeline的更多内容,请访问AWS CodePipeline User Guide (https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,635评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,543评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,083评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,640评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,640评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,262评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,833评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,736评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,280评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,369评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,503评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,185评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,870评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,340评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,460评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,909评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,512评论 2 359