Why SaltStack
系统管理员和运维人员日常会进行大量的重复性操作,诸如安装软件、修改配置文件创建用户、批量执行命令等。如果主机数量庞大,单靠人工来维护,单调冗繁的任务实在让人难以忍受。
早期的运维人员会根据自己的生产环境写特定脚本来辅助完成这些大量重复性的工作。但是这些脚本不但复杂,难于维护,更为重要的是不可移植。总体上讲,系统管理员面临的问题主要分为两大类:一是系统状态维护(配置管理),二是远程执行命令为了解决这些问题,诞生了很多开源软件,系统状态维护方面有 Puppet、Chef、CFEngine、Ansible、SaltStack 等,这些软件擅长维护系统状态,可根据定义使相应的主机达到某种状态。维护主机的整个生命周期,实现从系统安装初始化到下线整个过程的管理和控制。在远程命令执行方面的软件则有 pssh、Fabric、Func、Rundeck、Ansible、SatStack 等,它们可以方便地对大量主机进行批量的命令执行操作。
无论采用哪款软件,系统管理员所面临的问题都是一样的,即如何在多变复杂的环境中完成灵活的配置管理和命令执行。这就需要所用的软件本身足够强大,而且具备很好的可扩展性。SaltStack 在这方面表现得十分出色,SaltStack(简称 Salt)是由 Thomas Hatch 于2011 年创建的一个开源项目。初衷只是想构建一个快速的远程执行系统。后来随着各种新功能的不断加入,演变成了现在的 Salt。如今 Salt 已成为世界上最流行的开源项目之一,同时也是最流行的基础架构管理平台之一。
Salt 灵活性强,既可进行大规模部署,也能进行小规模的系统部署。Salt 的设计架构适应于任意数量的服务器,从少量本地网络系统到跨越数个不同的数据中心,拓扑结构都是简单的服务器/客户端模型,配置简单,默认的配置几乎无须更改,只需要微调即可满足特定需求。不管你有几台、几百台甚至几千台服务器,都可以使用 Salt 在一个中心节点上对它们进行管控。使用 Salt 可以灵活定位任意服务器子集来运行命令或完成任务。也可以使用状态系统来定义被管理服务器需要达到的状态,并且只需要一条命令就可以在很短的时间内让对应的服务器变成你所定义的角色。由于 Salt 是用 Pthon 编写的,允许用户通过Python 语言自定义功能模块,同时也为用户提供了大量的 PythonAPI接口,所以用户可以根据自己的需要进行简单快速的扩展。