DevOps是Development和Operations的组合
可以把DevOps看作开发(软件工程)、技术运营和质量保障(QA)三者的交集。传统的软件组织将开发、IT运营和质量保障设为各自分离的部门。在这种环境下如何采用新的开发方法(例如敏捷软件开发),这是一个重要的课题:按照从前的工作方式,开发和部署不需要IT支持或者QA深入的、跨部门的支持,而却需要极其紧密的多部门协作。然而DevOps考虑的还不止是软件部署。它是一套针对这几个部门间沟通与协作问题的流程和方法。
需要频繁交付的企业可能更需要对DevOps有一个大致的了解。Flickr发展了自己的DevOps能力,使之能够支撑业务部门“每天部署10次”的要求──如果一个组织要生产面向多种用户、具备多样功能的应用程序,其部署周期必然会很短。这种能力也被称为持续部署,并且经常与精益创业方法联系起来。 从2009年起,相关的工作组、专业组织和博客快速涌现。
DevOps的引入能对产品交付、测试、功能开发和维护(包括──曾经罕见但如今已屡见不鲜的──“热补丁”)起到意义深远的影响。在缺乏DevOps能力的组织中,开发与运营之间存在着信息“鸿沟”──例如运营人员要求更好的可靠性和安全性,开发人员则希望基础设施响应更快,而业务用户的需求则是更快地将更多的特性发布给最终用户使用。这种信息鸿沟就是最常出问题的地方。
DevOps 的概念在软件开发行业中逐渐流行起来。越来越多的团队希望实现产品的敏捷开发,DevOps 使一切成为可能。有了 DevOps ,团队可以定期发布代码、自动化部署、并将持续集成 / 持续交付作为发布过程的一部分。
虽然 DevOps 背后有各种各样的概念,但幸好有一些工具可以让你更容易地理解和实现。在本文中,你将了解这些工具,并将它们作为软件发布 / 维护工具包工作的一部分开始使用。
在很多企业中,应用程序发布是一项涉及多个团队、压力很大、风险很高的活动。然而在具备DevOps能力的组织中,应用程序发布的风险很低,原因如下 :
与传统的瀑布式开发模型相比,采用敏捷或迭代式开发意味着更频繁的发布、每次发布包含的变化更少。由于部署经常进行,因此每次部署不会对生产系统造成巨大影响,应用程序会以平滑的速率逐渐生长。
靠强有力的发布协调人来弥合开发与运营之间的技能鸿沟和沟通鸿沟;采用电子数据表、电话会议、即时消息、企业门户(wiki、sharepoint)等协作工具来确保所有相关人员理解变更的内容并全力合作。
强大的部署自动化手段确保部署任务的可重复性、减少部署出错的可能性。
与传统开发方法那种大规模的、不频繁的发布(通常以“季度”或“年”为单位)相比,敏捷方法大大提升了发布频率(通常以“天”或“周”为单位)
DevOps 有很多可使用的工具,在一篇文章中几乎不可能介绍完它们。本文将介绍五种最流行、功能最强大的 DevOps 工具:
类型:配置
语言: Go
推荐的第一个 DevOps 工具是来自 Hashicorp 的Terraform。Terraform 是一个基础设施管理工具,允许您正确地构建、更改和管理基础设施。您可以将 Terraform 视为一种供应工具。它帮助您设置服务器、数据库和其他支持全面应用程序的基础设施。
Terraform 并不局限于任何特定的云服务提供商,它可以与多个云提供商和环境协同工作。云服务提供商如 AWS、Microsoft Azure、谷歌云都与 Terraform 无缝集成。版本控制系统托管提供商,如 Github 和 Bitbucket,都可以很好地使用它。
Terraform 有一个企业版和开源版,还可以安装在 macOS、Linux 和 Windows 系统上。
类型:配置
语言:Python、PowerShell、Shell 和 Ruby
与 Terraform 类似,Ansible 也是一个基础设施管理工具。Ansible 可以帮助你部署应用程序,供应和配置管理的服务器。Ansible 是用 Python 构建的,由 RedHat 维护,但它仍然是免费和开源的。
作为一个配置管理系统,您可以使用 Ansible 来设置和构建多个服务器。你可以在控制机器上安装 Ansible,而不需要 Ansible 在其他服务器上运行,这些服务器可以从 web 到应用程序再到数据库服务器。
与 Terraform 不同,Ansible 不使用 HCL 作为它的代码。相反,配置是写在 Ansible 剧本,这是 YAML 文件。Ansible 使用声明性和程序性模式的混合。这与 Terraform 不同,后者仅仅是声明性的。
Linux 是安装 Ansible 最合适的操作系统。不过,它在 macOS 上也运行良好。对于 Windows 用户,可以通过 Linux 的 Windows 子系统的 bash shell 使用 Ansible。
语言: Go
Packer 是另一个来自 Hashicorp 的 DevOps 工具。用 Golang 编写的 Packer 可以帮助你自动创建虚拟镜像。手动构建镜像的过程可能令人沮丧,因为它容易出错,但 Packer 消除了所有这些。
对于单个 JSON 文件,可以使用 Packer 创建多个镜像。当它第一次工作时,由于没有任何东西会干扰它的自动化过程,因此可以保证它能百分百地工作。许多云服务提供商都使用镜像,您可以无缝地与这些提供商合作,因为 Packer 标准化了用于云环境的镜像的创建。
Packer 不是一个独立的工具。您可以将其与 Ansible、Chef 和 Jenkins 集成,以便在部署管道中进一步使用这些映像。安装过程并不复杂,您可以学习如何开始使用该工具。
类型:容器
语言: Go
Docker 是一种容器技术,可让您在特殊环境中隔离应用程序。容器化与虚拟化类似,不同之处在于容器不会启动完整的操作系统。
使用 Docker 容器,您可以在这些自定义环境中开发和部署应用程序,从而不必担心兼容性问题。您的应用程序可以在任何位置运行,只要它们位于容器中即可。
要启动 Docker 容器,您必须通过 Dockerfiles 创建 Docker 映像。从 Docker 映像启动时,Dockerfile 包含 Docker 容器中所需的规范。您不必总是构建自己的 Docker 映像,因为 Docker Hub 上可以使用官方映像。
Docker 本身可以在 Linux 上运行,并且在 macOS 上也可以正常运行,因为它类似于 Unix。对于 Windows 用户,也可以通过Docker 工具箱来使用 Docker。
通常情况下,你可能会使用多个 Docker 容器,这就引出了本文中的最后一个 DevOps 工具。
类型:容器
语言: Go
Kubernetes (K8s) 是一个谷歌开源工具,它可以让你管理 Docker 容器。由于在生产中经常有大量的容器在运行,因此,Kubernetes 使编排这些容器成为可能。
首先要了解编排 Docker 容器的原因。当有许多容器在运行时,很难手动监视这些容器,并使它们彼此通信;另外,这种扩展以及负载平衡也变得困难。
使用 Kubernetes,可以控制所有这些容器,因此可以将这组机器作为一台机器进行管理。与 Docker Compose 相比,Kubernetes 是不同的,因为它使部署,扩展和监视容器变得更加容易。当它们中的任何一个崩溃时,它们都可以自愈,而 Kubernetes 可以制造新的来代替。使用 K8s,可以轻松地进行存储编排、服务发现和负载平衡。
您可以在 macOS,Linux 和 Windows 上安装 Kubernetes,并通过Kubernetes 命令行工具使用它。
DevOps 的概念对于使大型应用程序在不同负载或流量下保持高性能是非常有益的。它还使软件部署管道易于管理。
如果没有可用的工具,DevOps 概念很难实现。这个领域有很多工具,每个公司都有不同的选择。尽管如此,Terraform、Ansible、Packer、Docker、Kubernetes 都是拥有大量用户社区的工具,能够在各种软件项目中实现 DevOps 的工具。如果您打算使用它们,可以做进一步的研究。