采用DevOps方式实现软件交付的原因之一是为了消除生产部署过程中的瓶颈,对于服务器端软件,通常涉及以下部分:
☘ 应用程序环境,如操作系统参数
☘ 第三方组件,如应用程序服务器,web服务器和数据库
☘ 顶部运行的应用软件
为了消除部署瓶颈,DevOps旨在打破开发人员和IT运营人员之间的障碍(也是DevOps得名的原因),以促进协作的工作环境。因此,需要确保生产环境与开发环境保持同步,并且所有部署过程一起执行。实现这一目标的方式之一是通过使用容器,如Docker或Kubernetes。事实上,很多人将容器和DevOps理解成了同义词,并且将这两者建立了依赖的关系。
但是,这两者不需要依赖关系:完全可以在非容器环境下实现DevOps。
为什么容器很重要
容器是管理运行软件的操作系统的轻量级的抽象,它能够将进程彼此隔离,对资源使用加以限制,并帮助打包软件依赖。容器不会替代虚拟化,因为容器的操作更接近应用程序级别,而不是物理级别。
容器的高效率使得它应用非常广泛,通过容器用户可以快速部署并实现软件组件联机,与虚拟化相比它能够以较低的成本启动新的应用案例,用户可以更紧密地控制应用程序环境。例如,如果开发人员在容器中编写和构建软件,则容器及其中的一切都可以被打包并传输到生产服务器。效率和自动化使得DevOps和云运行良好。
容器中好的DevOps用例始终围绕着快速上线新服务器连接的需求,这通常是微服务部署的案例。容器可以非常有效地快速启动和破坏微服务和开发/测试环境,除此以外,在DevOps中使用容器更多的是一个选择,而不是一个需求,DevOps远不止目前这些。
非容器环境下无痛部署
不管容器能带来多少好处,有很多理由支持我们不采用容器化的方法来进行软件部署。包括:
☘ 缺乏容器技能或相关知识
☘ 特殊应用性能要求(即实时系统)
☘ 实用软件环境下不支持的硬件(即嵌入式系统,专用或传统操作系统)
☘ 公有云部署等等
不依赖容器来实现DevOps的成功,需要关注以下3点:
1、自动化:通过工具尽可能地实现自动化,无论是大型机应用程序还是微服务,都可以通过工具来减少手动工作量及其失误。
2、持续集成:连续测试软件模块、组件、服务等,不要等到开发结束之后才集成和部署系统。
3、连续测试:通过持续集成,确保系统始终可用、可测试且理论上可释放,测试开发工作的结果是反馈循环的一部分。
特定的构建和部署工具是有帮助的,并且通常需要达到使部署简化的自动化水平。然而,DevOps的最大成就主要来自于三个方向的努力:
☘ 持续开发构建和测试周期
☘ 更频繁地部署到生产服务器
☘ 直接和即时反馈给开发人员
通过这三个努力,软件永远不会被孤立地构建,组件不断地进行集成,而且每个人都能知道需要改进的地方一切正常。因此,开发和IT部门可以保证正在构建的内容将按照预期的方式进行部署和运行。业务上线的过程中就在不断地突破瓶颈,因为在部署过程和生产环境中伴随着软件的测试,因此在开发周期结束时可以正常使用。
人员是DevOps成功的关键
成功的关键不是工具集,而是人员、沟通和度量。因为使用DevOps实践,当开发新版本的软件时间被限制在几周或者几个月内,在最终期限到来的时候,用户不用担心软件的部署对生产造成的影响,因为在开发过程中一直在进行测试。
这就是为什么它被称为DevOps实践,而不是DevOps过程、DevOps组、DevOps工具集或DevOps环境。容器可是成为DevOps实践的一个补充,帮助管理生产环境,但它不应该是DevOps必须的。相反,专注于DevOps实践,并在这个过程中使用容器才有意义。