容器在环境构建发布方面有天然优势。对于金融机构环境一般包括测试环境、准生产、生产环境,一般系统上线后要保证7*24小时运行,对于容器云构建环境有以下几个问题: 1、如何保证安全稳定不间断? 2、容器在持续集成中能提供哪些优势?3、由于容器数据存储使用内存,如何保证容器销毁之后的数据安全性?
我们的建议是,持续集成止步于镜像仓库,镜像仓库是持续集成和持续发布的媒介。
镜像仓库的镜像安全检查能力是其关键。
我们以前也提到过,测试环境可以考虑根据业务场景构建测试域,测试的镜像来自于开发或测试镜像仓库的分发(自动或手动控制),在进入准生产之前确保镜像是安全的。准生产环境和生产保持一致。目的为了性能测试。
使用容器化的目的一是为了敏捷,开发测试敏捷化;二是为了环境一致性,说到底也是为了快,减少不必要的意外。
如果数据需要持久化存储,就需要考虑数据持久化方案。数据安全等级不同,采用的方案也可能不一样。
收起同意Steven99的观点,持续集成止步于镜像仓库。
镜像的好处之一是将一个服务运行时依赖的所有库都放在一起。以Java应用为例,例如服务A依赖的一个lib库a.jar出问题了,需要更新,那么当代码修改完以后,打包成一个新的镜像,这个镜像就可以在后面不同的环境里进行流转测试,最终到达生产环境,完成上线,而不是简简单单去替换每个环境上的a.jar文件,避免了出错的可能。
关于容器云平台之上的DevOps实践,有一些心得分享一下,给大家提供参考。
第一,从需求和计划的角度做好代码仓库和分支管理,并实现自动化构建镜像。
第二,定义多环境。不同的环境用于不同的目的,一般来说有几种场景,一套或多套DEV环境是为开发和测试人员进行功能测试使用;SIT环境是服务集成环境,确认各个服务的当前版本能够正常的集成到一起;UAT是用户验收环境,用以在上线之前对所有环境做最后一次验证;PROD环境里运行的服务是真实对外提供服务的。
第三,代码化。定义清楚这些环境之后,尝试将服务的配置从代码中抽取出来,将编排部署脚本也代码化,并且为不同的环境分别做好管理。
第四,定义流水线,也即镜像在不同环境中流转的过程。
上述步骤,个人理解最重要的实践是工具的使用和代码化,能借助工具自动完成的就使用工具,所有的信息代码化,也就可以实现版本管理。