IT专业人员越来越多地转向Chef和Puppet开源云自动化和编排。但是其他选项,如TOSCA,也值得我们探索。
部署软件不是一件简单的事,而在面向服务架构、web服务、微服务和云的时代则更为复杂。虚拟化提出了新的挑战,赋予应用程序和服务器新的角色。基本的软件操作工具正在转变成自动化和流程编排工具,而开源软件则充当了引路人的角色,特别是Chef和Puppet。
现今用来部署应用的软件工具源自早期的一些工具,这些工具允许开发者将操作指南创建到应用中以达到简化部署的目的。这个概念,即所谓的DevOps,目标是准确和快速部署,但达到目标的不同方法很快分成了两种不同的派别。
Chef和Puppet二分天下
最简单的自动化部署方式是通过脚本。手动部署软件就是使用操作系统或云管理系统的工具启动命令,而脚本是一种可以灵活的将命令写到一个文件里然后快速执行的方式。当今市场上有两个很流行的开源自动化工具,Chef和Puppet。
Chef模型被认为是命令式或规定式,因为它是过程化的 ,明确地描述了如何部署和连接云应用程序组件。Chef以一种对程序员友好的方式来创建“菜谱”和“烹饪手册”。每个部署的步骤可以独立进行描述,这些独立的菜谱汇集到一起创建一个可重复的应用程序部署过程。由于每个操作步骤都可以在一个菜谱中描述,所有只要可以手动部署的步骤,Chef都可以自动化。
然而同样的程序员友好模式对某些用户来说并不是他们想要的。对这些用户来说,部署应用程序的合理方式是按照模型部署的最终状态来描述。该开源DevOps工具对模型进行处理来创建最终的状态。这个过程通常被称为声明式或基于目标的DevOps,也是另一种流行工具Puppet的基础。
如果Chef是对程序员友好的,那Puppet则最初源于运营人员,比起详细的如何操作的步骤,他们更熟悉如何描述他们最终想要的状态。就像高级语言让编程更加简单一样,Puppet模型能够简化部署描述。此外,由于最终状态的这种方法可以用来描述在应用生命周期管理(ALM)中的任何步骤,Puppet自然可以接纳一个完整的ALM功能,这也是Puppet的粉丝所喜欢的。
Puppet的问题是你只能部署那些可以被模型化的步骤。随着新的部署问题的出现,Puppet建模的过程开始变得同命令式脚本开发相似,而事实上,云的发展已经开始弥合这一鸿沟。Chef和Puppet似乎变得更接近彼此,而一些新的DevOps工具则跨过声明式/命令式的分隔线。不过,新的部署和配置管理的主候选工具全都支持声明模型;没有哪个是纯命令模式的。
云端的选择
云也迫使了部署和配置管理工具的发展。由于云部署需要处理虚拟化的两个层次,使得所有的部署和配置自动化变得更加复杂,而DevOps不得不同时面对部署和生命周期管理的问题。这反映在一个新的云名词上:编排。这反映了将复杂的步骤进行统一的需求。
编排连接了声明式和命令式的模型,但声明式编排似乎是更受欢迎的方法;描述一样东西当前和期望的状态是一种不错的生命周期管理的方法。两个新的纯声明式模型CFEngine和Juju,同Chef,Puppet一起正在获得更多关注。这些工具侧重于模型构造并提供政策和库的支持。此外,同时支持声明式和命令式的流程控制工具Ansible和SaltStack,正开始挑战过去的那种两极化方式。
目前为止提到的工具是从DevOps和传统部署演变而来。那么那些专门为云而生的工具的进展怎样了呢?国际标准化组织结构化信息标准推进组织(OASIS)开发了一个名为拓扑和业务流程规范云应用的声明性模型的方法。TOSCA解决了应用程序部署的最终状态定义以及虚拟资源和资源池的具体建模。TOSCA还集成了管理定义以支持生命周期自动化。
最适合你的云编排方式是什么?这里有一些技巧:
支持包括Chef在内的命令模型的工具是最强大的,在任何云中支持几乎任何种类的应用。但对于非程序员来说学起来更困难。
如果你计划依赖云端打包好的应用,那么检查该厂商是否拥有一个优选的编排方式,如果有的话,请在你的应用中也认真考虑采取这种方式。
TOSCA是云自己的模型,但也是最不成熟的。如果你当前无法做到,则可以考虑声明式云编排工具,这样过渡到TOSCA会更容易些。
如果你已经对数据中心部署的某个DevOps工具很熟悉,不要仅仅因为要迁移到云了就弃之不用了。所有的DevOps工具都在变得更加云友好。
尽管对编排这块来说还相对较新,但各式各样的开源,甚至一些商业的软件包,都支持TOSCA。一些流行的基于TOSCA的云编排工具包括Cloudify,OpenStack Heat,Alien4Cloud,以及ARIA和OpenTOSCA,这两个都是规范的参考实现。除此之外,TOSCA被接受的原因还包括网络功能虚拟化和软件定义网络。很多人认为TOSCA在这些领域的成功代表着这就是编排的未来。
编排对于应用的未来很关键。这是一种可以同时处理敏捷应用和敏捷虚拟资源的DevOps的形式。无论你用什么方法来编排,都应该随着应用和虚拟化发展的同时不断审查和修改细节。
====================================分割线================================
本文转自d1net(转载)