针对确保服务在运行,或者触发更新和重新启动之类的简单任务,Ansible可以从命令行来运行,不需要使用配置文件。至于比较复杂的任务,Ansible配置通过名为Playbook的配置文件中的YAML语法来加以处理。Playbook还可以使用模板来扩展其功能。
Ansible有一大批模块,可用于管理各种系统以及亚马逊弹性计算云(EC2)和OpenStack等云计算基础设施。可以用几乎任何一种语言来编写自定义Ansible模块,只要模块输出是有效的JSON。
Ansible的Web用户界面以AnsibleWorks AWX的形式出现,但AWX与CLI并不直接联系在一起。这意味着,除非进行了同步过程,否则CLI里面的配置元素不会出现在Web用户界面中。你可以使用那个内置的同步工具,让两者保持一致,但需要按照预定计划运行同步工具。
SaltStack
Salt类似Ansible,因为它也是基于CLI的工具,采用了推送方法实现客户端通信。它可以通过Git或通过程序包管理系统安装到主服务器和客户端上。客户端会向主服务器提出请求,请求在主服务器上得到接受后,就可以控制该客户端了。
Salt可以通过普通的SSH与客户端进行通信,但如果使用名为minion的客户端代理软件,可以大大增强可扩展性。此外,Salt含有一个异步文件服务器,可以为客户端加快文件服务速度,这完全是Salt注重高扩展性的一个体现。
与Ansible一样,你可以直接通过CLI,向客户端发出命令,比如启动服务或安装程序包;你也可以使用名为state的YAML配置文件,处理比较复杂的任务。还有“pillar”,这些是放在集中地方的数据集,YAML配置文件可以在运行期间访问它们。
你可以直接通过CLI,向客户端请求配置信息,比如内核版本或网络接口方面的详细信息。只要使用名为“grain”的库存元素,就可以描述客户端;这样一来,管理员可以轻松向某一种类型的服务器发出命令,不需要依赖已配置群组。比如说,只要使用一个CLI命令,你就可以向运行某个内核版本的每个客户端发送命令。
与Puppet、Chef和Ansible一样,Salt也提供了大量的模块,以处理特定的软件、操作系统和云服务。自定义模块可以用Python或PyDSL来编写。除了Unix管理外,Salt的确提供Windows管理功能,但它还是更擅长管理Unix和Linux系统。
Salt的Web用户界面Halite非常新,功能不如其他系统的Web用户界面来得全面。它提供了事件日志和客户端状态的视图,能够在客户端上运行命令,但除此之外乏善可陈。
Salt的最大优点在于可扩展性和弹性。你可以有多个级别的主服务器。上游主服务器可以控制下游主服务器及其客户端。另一个优点在于对等系统,让客户端可以向主服务器提出问题,然后主服务器从其他服务器得到答案,提供全面信息。如果需要在实时数据库中查询数据,以便完成客户端的配置,这个优点就很方便。
选用Puppet、Chef、Ansible还是Salt?
工具
语言
架构
协议
Puppet
Ruby
C/S
HTTP
Chef
Ruby
C/S
HTTP
Ansible
Python
无Client
SSH
Saltstack
Python
C/S(可无Client)
SSH/ZMQ/RAET
Puppet和Chef会吸引广大开发人员和注重开发的公司,而Salt和Ansible极其适合系统管理员的要求。Ansible的简洁界面和可用性非常迎合系统管理员的想法;而在拥有许多Linux和Unix系统的公司,Ansible运行起来一开始就快速又轻松。
Salt是四款工具中最漂亮最稳健的;与Ansible一样,它也会博得系统管理员的芳心。Salt拥有高扩展性和强大功能,唯一的软肋就是Web用户界面。
Puppet是这四款工具中最成熟的,从可用性的角度来看恐怕也最容易上手,不过竭力建议你对Ruby要有深入了解。Puppet不如Ansible或Salt来得精简,配置起来有时会变得错综复杂。对异构环境来说,Puppet是最稳妥的选择,但是你可能会发觉Ansible或Salt比较适合更庞大或更一致的基础设施。