Ansible vs SaltStack 谁才是自动化运维好帮手?

Posted 分布式实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible vs SaltStack 谁才是自动化运维好帮手?相关的知识,希望对你有一定的参考价值。

概述

互联网技术的发展,机房里面机器的数量随之增加,运维的难度和复杂度也在增加,需要投入的运维人员和成本也在增加,从而催生了一系列的自动化运维工具(Ansible、SaltStack、Puppet)的产生来减少运维的成本。

Ansible、SaltStack、Puppet都是目前比较受用户欢迎的自动化化运维工具,其中Ansible和SaltStack使用python编写,具有良好的可移植性。Puppet的使用脚本语法复杂,且可移植性比较差,目前的使用者慢慢变少。本文将对Ansible、SaltStack进行详细的比较。

Ansible和SaltStack的比较和选型

Ansible vs SaltStack 谁才是自动化运维好帮手?

Ansible和SaltStack都是的目前最流行的自动化运维工具,能满足企业IT系统的自动化运维管理。这两个工具都是用python开发的,可以部署到不同的系统环境中和具有良好的二次开发特性。在执行的命令的时候,Ansible和SaltStack都支持Ad-hoc操作模式,也可以支持将命令写入yaml格式文件中再批量执行。在处理返回结果方面,Ansible和SaltStack的返回结果格式都是JSON格式,比较易懂和方便解析。本文主要从响应速度、安全、自身运维、使用语法等方面对Ansible和SaltStack的不同点进行分析:

1. 响应速度

SaltStack的master和minion主机是通过ZeroMQ传输数据,而Ansible是通过标准SSH进行数据传输,SaltStack的响应速度要比Ansible快很多。标准SSH连接的时候比较耗费时间,ZeroMQ传输的速度会快很多,所以单单从响应速度方面考虑SaltStack会是更好的选择。但是在一般的运维场景下Ansible的响应速度也可以满足需求。

在表格1 Ansible和SaltStack性能测试中,测试了Ansible和SaltStack在执行命令、分发文件、读取文件和批量脚本执行等自动化运维场景下的性能,由耗时数据可以看出Ansible的响应速度比SaltStack要慢10倍左右。

2. 安全

Ansible和SaltStack都需要和远程主机进行连接,它们的最大的安全问题就是MITM攻击,通过伪装成Master主机和远程主机进行通信,从而进行攻击。

SaltStack使用ZeroMQ进行数据传输,ZeroMQ本身数据传输不支持加密,SaltStack可以通过使用AES数据加密方法来对数据进行加密传输,但是SaltStack的minion主机以守护进程的方式运行在远端暴露了很多容易被攻击的点。

Ansible使用标准SSH连接传输数据,不需要在远程主机上启动守护进程,并且标准SSH数据传输本身就是加密传输,这样远程主机不容易被攻击。也不是说Ansible就可以完全避免被攻击,Ansible使用paramiko库进行SSH连接,paramiko是一个有很不错记录SSH连接的python库。Ansible可以通过配置StrictHostKeyChecking参数,使得远程主机上的keys和之前连接不一样的时候Ansible没有及时感知和提醒用户。但是Ansible可以通过修改配置文件和配置一个合适的known_hosts文件来解决这个问题,因此Ansible在安全方面还是比SaltStack做的好。

3. 自身运维

SaltStack需要在Master和Minion主机启动守护进程,自身需要检测守护进程的运行状态,增加运维成本。Ansible和远端主机之间的通信是通过标准SSH进行,远程主机上只需要运行SSH进程就可以进行运维操作,SSH是机房主机中一般都安装和启动的进程,所以在Ansible进行运维的时候只需要关注Ansible主机的运行状态。Ansible对机房运维不会增加过多的运维成本。从工具本身的运维角度来说,Ansible要比SaltStack简单很多。

4. 使用语法

Ansible的Playbook语法要比SaltStack的State语法具有更好的可读性。在使用的过程中发现Ansible在实现loop的更加的简洁,也可以使用相对路径。举例说明,SaltStack在备份文件A.txt和B.txt的State语法为:

# back up A.txt and B.txt
{% for remote_target  %}
/backup/{{ filename}}:
file.managed:
‐ source: salt://remote-host/{{ filename }}
‐ require:
‐ cmd: A.txt
‐ cmd: B.txt
{% endfor %}

Ansible的Playbook语法实现同样的功能如下:

-name: back up A.txt and B.txt
copy: src ={{item}}
   Dest=/backup/{{item}}
with_items:
- A.txt
- B.txt

同样Ansible的Notify模块和Handler模块实现的功能和SaltStack的watch和module.wait的模块实现功能也类似,也比SaltStack要简洁明了。

总之,Ansible的安全性能比SaltStack好,自身运维简单,使用语法可读性更强,虽然在响应速度方面不如SaltStack,但是在大部分应用场景下Ansible的响应速度能满足需求。因此,在金融行业的自动化运维系统,Ansible工具是最好的选择。

微服务化架构设计

Ansible vs SaltStack 谁才是自动化运维好帮手?

自动化运维系统的主要运维操作场景有脚本执行、文件的上传下载、启动项管理、用户密码修改、系统软件包管理、定时任务管理等,在云计算的机房里面需要管理1000余台主机,而Ansible执行任务最高并发数约200个,所以系统中需要部署多个Ansible工具来满足系统的应用需求。运维操作需要经历连接主机,执行并返回结果的过程,这个过程需要异步执行且实时返回执行结果。

图1 展示的是自动化运维平台总体设计,便于自动化运维系统管理大规模主机、实时反馈运维结果的一套系统。

自动化运维平台:自动化运维平台包含有CMDB、图形化界面、权限管理等核心功能,后端采用REST API调用Worker模块和监听执行结果。

  • Etcd:一个高可用,分布式,一致的key-value存储,用来共享配置和服务发现。Kubernetes和Cloudfoundry都使用了etcd。

  • Consul:一个发现和配置服务的工具。客户端可以利用它提供的API,注册和发现服务。Consul可以执行监控检测来实现服务的高可用。

  • Apache Zookeeper:一个常用的,为分布式应用设计的高可用协调服务,最开始Zookeeper是Hadoop的子项目,现在已经成为顶级项目了。

  • Eureka: 是一个基于 REST 的服务,它主要是用于定位服务,以实现服务注册和服务发现功能,本身具有服务健康检测的功能。

消息中心:消息中心采用的是消息队列,开源消息队列中间件有RabbitMQ、ActiveMQ、kafka。采用消息队列的好处就是能实时的返回执行结果。

安全

Ansible vs SaltStack 谁才是自动化运维好帮手?

在金融领域中,安全是最重要的考虑因素,在众多自动化运维工具种,Ansible的安全性能最好,是目前最适合金融领域的自动化运维工具。本文通过将Ansible微服务化,集成到自动化运维平台中,实现自动化运维平台高并发执行运维操作场景和实时收集执行结果。

参考

  • http://jensrantil.github.io/salt-vs-ansible.html

  • http://www.tuicool.com/articles/3UjQNn

推荐一个培训

【基于Docker的DevOps实战培训 | 南京站】培训内容涉及容器编排框架(应用部署)、Ansible 简介、持续集成常用方式、典型案例分析、容器的选择、架构设计(百万级日活,亿级API 请求)、数据系统构建、持续集成的开发流程等,点击下面图片即可查看具体培训内容。



点击阅读原文链接可直接报名。

以上是关于Ansible vs SaltStack 谁才是自动化运维好帮手?的主要内容,如果未能解决你的问题,请参考以下文章

关系型数据库 VS NoSQL,谁才是王者

CentOS VS Ubuntu,谁才是更好的 Linux 版本?

Flutter vs React Native,谁才是跨平台应用开发的最佳利器?

MVC模式和DDD模式对比,谁才是银弹?

520谁才是你的真爱?

谁才是 Programmer