缩短time-to-makrt对于任何一家企业都相当重要,这直接决定了客户满意度、市场竞争力乃至盈利能力。但在部署应用时,大多数企业内的IT团队都或多或少会遇到Dev和Ops之间的问题,这两个部门围绕着同一个应用工做,但工做方式却大相径庭。git
不少管理者都在思考如何能让Dev和Ops可以在没有任何“误解”的状况下共同努力缩短time-to-market,也就是DevOps。github
下面咱们将谈一谈,Docker和Kubernetes如何帮助DevOps发挥更大效力。微信
在传统的DevOps方法中,开发人员编写代码并将其提交给Git存储库,而后检查它在本地和开发环境中的工做方式。架构
咱们会使用像Jenkins这样的CI工具启动代码的构建过程,该工具也在构建期间运行功能测试。若是测试成功经过,咱们将更改合并到发布分支中。负载均衡
运维会使用一些工具为应用程序部署生产准备脚本,并最终将更改投入生产环境(更新版本)。运维
第一个问题是运维和开发者使用不一样的工具。例如,大多数开发人员不必定知道如何使用脚本工具,而准备发布的任务落在运维身上,但运维一般又不了解应用如何工做。微服务
第二个问题是开发环境一般手动更新而没有自动化。结果致使开发环境很是不稳定,一个开发人员所作的更改可能会中断另外一个开发者的更改,而解决这样的冲突问题一般须要花费不少时间,time-to-market变长也就不足为奇了。工具
第三个问题是开发环境可能与staging环境、生产环境有很大不一样。这可能会致使开发人员准备的发行版可能没法在暂存环境中正常工做,或即便测试在暂存环境中成功经过,生产中也可能会出现一些问题,生产中的回滚过程也并不是易事。测试
第四个问题是编写脚本很是耗时,并且容易出错。优化
Docker之于DevOps的主要优势是开发人员和运维都使用相同的工具——Docker。开发人员在开发阶段,在本地计算机上从Dockerfiles建立Docker镜像并在开发环境中运行。
运维使用相同的Docker镜像,使用Docker对staging和生产环境进行更新。须要注意的是,在更新到软件的新版本时,咱们不是要对Docker容器进行patch,换句话说软件的新版本采用一个新的Docker映像和Docker容器的新副本,而不是对旧的Docker容器进行修补。
基于以上,咱们能够建立不可变的开发、staging和生产环境。
使用这种方法有几个好处:首先,对全部更改都有很高的控制权,由于使用不可变的Docker镜像和容器进行更改,咱们您能够随时回滚到之前的版本;与脚本工具相比,开发、staging和生产环境变得更加类似;使用Docker,咱们能够保证若是某个功能在开发环境中有效,它也能够在staging和生产中使用,这也就是咱们常说的一致性。
Rainbond(云帮)是"以应用为中心”的开源PaaS, 深度整合基于Kubernetes的容器管理、ServiceMesh微服务架构最佳实践、多类型CI/CD应用构建与交付、多数据中心资源管理等技术, 为用户提供云原生应用全生命周期解决方案,构建应用与基础设施、应用与应用、基础设施与基础设施之间互联互通的生态体系, 知足支撑业务高速发展所需的敏捷开发、高效运维和精益管理需求。