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