OpenShift中的持续交付

上一文中讲述了如何在AWS下搭建OpenShift集群。这篇文章将目光转向如何在OpenShift中实现CI/CD以及产品环境的部署。

持续交付

如果要打造一个持续交付的流水线,首先要考虑多环境的问题。一般一个应用程序会有多个环境,比如开发环境、集成测试环境、系统测试环境、用户验收测试环境、类生产环境、生产环境。如何在OpenShift中隔离并建立对这些环境的部署流程有多种方案可以选择。

  1. 同一个project中使用label和唯一名称来区分不同的环境;
  2. 集群中的不同project来隔离环境;
  3. 跨集群来隔离环境。

我们以第二种方式为例,演示下多环境管理问题。

在上图中,我们有一个build project。build project包含了一组相互依赖性比较强的应用,每个应用对应一个build config,产生的Image Stream存放在image register中。而每个环境各对应一个project,其中包含了该应用的deployment config,其镜像输入是build config产生的Image Stream。之所以这样做,有以下几点考虑:

  1. 不同的环境分布在不同的project中,可以很好的借助project的特性进行环境隔离。比如sys project的容器只能部署在label为sys的node上,prod project的容器只能部署在label为prod的node上。
  2. 不同的project可以分别定义权限访问和控制。比如只有QA才能操作sys project中的资源,运维工程师才能操作prod project中的资源。
  3. 不同的环境共用一个Image Stream,保证了应用程序镜像在不同环境中的是完全一致的,防止由于测试环境和生产环境不一致而引入缺陷。

那么大家共用同一个Image Stream,如何实现应用的promotion那?解决方案就是使用tag。

如上图所示,一个image stream里面有多个版本的镜像,而OpenShift可以为版本添加自定义tag。在不同的project里面,我们配置image的来源为”ImageStreamTag”,名称为”applicationName:environmentName”。比如sys project的镜像名为”App1:sys”,prod project的镜像为”App1:prod”。如果想将version 3的镜像推送到sys环境,只需要简单的给version 3的镜像打上sys的tag,这样部署sys环境时就会自动使用version 3的镜像。

1
oc tag App1:latest App1:sys

如果在Deployment Config里面配置了自动监听tag的变动的操作,那么一旦你修改了ImageStream的tag,就会自动触发对应环境的部署。

由于应用程序镜像在不同的环境中是一致的,那么变动的部分都被抽取到了外部配置中。如何根据不同的环境来加载对应的外部配置那?实现方式有很多种,这里介绍了使用Spring Cloud Config的方案。

首先我们将针对不同环境的配置放置在一个git仓中,然后通过Spring Cloud Config Server将其转换为http服务。而我们在应用中嵌入Spring Cloud Config Client,其会接收一个环境变量来拉取指定环境的配置。而该环境变量可以通过Deployment Config来进行注入。

1
oc env dc/sys PROFILE=sys

使用Spring Cloud Config给予了我们更多的灵活性。我们可以选择在应用程序第一次启动的时候拉取配置,也可以设置每隔一段时间自动更新配置,从而实现热更新。

OpenShift虽然提供了构建和部署的能力,我们有时也需要使用Jenkins之类的工具来可视化以及编排整个流水线。

既然OpenShift是个容器化的管理平台,那么我们完全也可以将Jenkins作为一个应用纳入到OpenShift中来托管,这样Jenkins的Master和Slave都是容器化的。OpenShift官方提供了一个Jenkins2.0的镜像,其预装了OpenShift pipeline插件,可以很方便地进行构建、部署等操作。

生产环境的部署

OpenShift在产品环境的部署默认是rolling的方式。

每次部署时,它会启动一个新的Replica Controller,部署一个pod,然后削减旧的Replica Controller的pod,如此往复,直到旧的Replica Controller中的所有pod都被销毁,新的Replica Controller的所有pod都在线。整个过程保证了服务不宕机以及流量平滑切换,对用户是无感知的。

而有的时候部署场景要负责些,比如我们想在产品环境对新版本做了充分的PVT(product version testing)才切换到新版本。那么就可以使用蓝绿部署的方式。

蓝绿部署方案的关键点在于一个Router对应两个Service。而Route作为向外界暴露的服务端口是不变的,两个Service分别对应我们的生产蓝环境和生产绿环境。同时只有一个Service能接入Router对外服务,另一个Service用来进行PVT测试。切换可以简单的修改Router的配置即可。

1
2
3
4
5
port:
  targetPort: app-blue-http
to:
  kind: Service
  name: app-blue

结语

OpenShift在应用的构建以及部署方面为我们提供了大量开箱即用的功能和解决方案,所以实现持续交付不再那么艰难。我们可以将更多的精力花费在提升应用程序质量以及架构方面,交付更好的产品。

时间: 2024-11-03 02:31:43

OpenShift中的持续交付的相关文章

快速指南:在DevOps中实现持续交付

本文讲的是快速指南:在DevOps中实现持续交付[编者的话]时至今日,以几乎相同的步调实现开发与交付已经成为一种必需.本份快速指南将帮助大家弄了解持续交付概念中的那些"良方"与"毒药". [烧脑式Kubernetes实战训练营]本次培训理论结合实践,主要包括:Kubernetes架构和资源调度原理.Kubernetes DNS与服务发现.基于Kubernetes和Jenkins的持续部署方案 .Kubernetes网络部署实践.监控.日志.Kubernetes与云原

初创企业如何做高效持续交付

直播视频点击回顾 随着云计算.大数据.AI智能等前沿科技的发展,传统的研发速度越来越难满足企业快速发展的需求,研发效能也成了继商业模式.技术突破之后的另一核心竞争力.如何保护企业代码资产,释放程序员"债务"压力?初创企业,如何打造7天互联网研发生命周期? 本文主要从双十一的员工消费引出研发协同,然后开始着重分析初创企业的持续交付,包括初创企业必备的种种,最后对初创企业的分享做了简要总结.一起来了解下吧:   双十一的这一天 双十一这一天,消费者忙着买买买,商家忙着卖卖卖,快递忙着送送送

谈谈企业的持续交付流水线设计

本文讲的是谈谈企业的持续交付流水线设计,有一天,业务人员急冲冲的跑过来,对你说生产上出现了一个严重BUG,必须要尽快修复.你听完问题描述后,胸有成竹坐定并迅速定位问题,随后改动了一行代码并提交,系统开始自动编译.各个环境自动化测试.发布上线.几分钟后,生产环境上该BUG已经被修复掉. 上面所提到的场景,这是不是很美妙?但是想必不少读者要忍不住要吐槽了,这太不实际了:新功能上线测试不要时间么?新增了功能肯定要做回归测试,这都需要一定的时间.况且怎么可以随便部署上线?还得通过预发演练.走发布审批流程

使用Azure应用服务开发持续交付的管道

一般而言,企业用户会希望加速云应用的部署,而持续交付就可以实现这一目标.本文将介绍如何使用Azure应用服务来开发一个持续交付管道. 对于那些想要通过持续交付管道在云中部署网络.移动或API应用的用户来说,微软公司的Azure应用服务是一个不错的选择. 无论是一名开发人员还是一名运营工程师,Azure应用服务都能够让他能够更为快捷地完成应用开发或部属.同时,因为它是一个完全托管的平台,所以团队成员们可以更多地关注他们的应用,而不会因为因为开发和维护可扩展性和高可用性基础设施所需的所有复杂性而陷入

谈谈持续集成,持续交付,持续部署之间的区别

经常会听到持续集成,持续交付,持续部署,三者究竟是什么,有何联系和区别呢? 假如把开发工作流程分为以下几个阶段: 编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署 正如你在上图中看到,「持续集成(Continuous Integration)」.「持续交付(Continuous Delivery)」和「持续部署(Continuous Deployment)」有着不同的软件自动化交付周期. 持续集成 持续集成是指软件个人研发的部分向软件整体部分交付,频繁进行集成

#翻译# 持续交付成熟度模型

持续交付的原则和方法,正在迅速地被越来越多的人认可为一种真正的业务敏捷的成功策略.对于许多组织结构,问题不再是"为什么要采用",而是"如何采 用":持续交付如何起步,以及组织机构应该进行哪些调整,才能保证得到可以接受的成果.本文介绍的这个成熟度模型,目的在于给出一个框架以及对几个关键方 面的理解,这些方面是你在组织中采用持续交付时需要重点考虑的.

《软件开发践行录——ThoughtWorks中国区文集》一一第二章 实战:持续交付中的业务分析 夏洁

第二章 实战:持续交付中的业务分析 夏洁 软件开发践行录--ThoughtWorks中国区文集在需要频繁交付.不断收集用户反馈.拥抱变化.追求业务敏捷的项目中,软件的开发和交付是迭代式进行的.在这样的项目团队中,业务分析师(BA)通常需要在一个开发迭代开始之前完成该迭代开发任务的分析.但在特殊情况下,从收集客户需求到将功能细节传达给开发团队的周期会缩短到一至两天.BA可以用于思考和分析的时间远远少于可以预先做出所有设计的瀑布式项目. 那么在这样的敏捷项目中,BA如何能够适应这种交付模式.完成高质

阿里云持续交付-快速可靠地交付高质量软件

文/戴蒙 拥有3万多人的阿里巴巴,线上有上万个应用,上亿的用户即时在线,每天有几百个应用在线上更新,就像在时速200公里的高速公路上横穿马路维修栅栏一样,时刻保持着心惊胆战,而保护这个过程的体系就是阿里巴巴持续交付工具与实践. 现代开发企业中如何做好持续交付是一件异常重要的事情,在互联网企业中更是如此.而阿里巴巴在这么多年的研发管理基础上,对如何做好持续交付提出了一套全新的模型与实践. 阿里技术保障部产品专家戴蒙在"2016云栖大会上海峰会"专场<"互联网+"

莫源:像搭积木一样玩转Docker的持续交付

云栖TechDay活动第十八期中,阿里云的高级研发工程师莫源带来了题为<像搭积木一样玩转Docker的持续交付>的分享,主要讲解了阿里云容器服务实现基于Docker的持续交付.容器持续交付的设计思路和未来发展反向. 幻灯片下载地址:https://yq.aliyun.com/attachment/download/?filename=dbf464e5883344e9dd010214576889bf.pdf 以下为现场分享观点整理. 最近Docker越来越火,持续交付的概念也随着被大家越炒越火.