七天学会 SALT STACK 自动化运维 (1)

七天学会 SALT STACK 自动化运维 (1)

  • 简单理解 SALTSTACK
  • 安装与配置
  • 基本的使用方法
  • 结束语
  • 引用资源

简单理解 SALT STACK

笔者是初次接触 自动化运维 这一技术领域,也是初次接触SALT STACK这一自动化运维工具, 因此这里的 简单理解 SALTSTACK 之意为 笔者的简单理解,能够看作是做者的学习笔记,文中较多记述笔者在配置安装过程当中遇到的问题,可能会有纰漏以及错误的地方,具体的新手指南,最好是参见这里.css

SALTSTACK是一款自动化运维软件,使用python编写,使用ZEROMQ用做通讯协议,主要功能包括命令批量执行,服务器环境批量配置,配置文件托管,服务器状态监控,配合强大的 Grains&Pillar 和自定义SLS配置文件,能够实现复杂功能,笔者会从最简单的场景开始着手学习而且记录配置过程, 简单使用事后,笔者的观点是,即便只是使用 SALTSTACK 管理单台vps,也比SSH要好用一些,稍后会说到缘由。同类产品有 PuppetChef,由于没有使用过因此没法进行比较.html


安装与配置

这里有详细的安装指南,由于该产品的更新迭代速度很快,因此不建议你们去看他人的中文教程,今天笔者安装的是pypi上的最新稳定版本,和网上的大部分中文教程的安装方法有所出入,因此笔者认为最好的方法就是直接参考官方的安装指南。python

笔者使用ubuntu桌面版系统,安装指南建议的安装方式是添加SALTSTACK的软件源,使用apt进行安装,能够自动处理依赖,可是笔者没法连接到该源,因此采用了最直接的python setup.py install的安装方法. 根据安装指南,须要安装 salt-master, salt-minion, salt-syndic 与ZeroMQ.nginx

安装:

在Pypi上下载 tarball, 解压以后建立虚拟环境而且执行安装脚本,笔者使用的是python 2.7.9, 直接执行一下命令安装相关依赖和saltstack自己.git

python setup.py install
pip install -r _requirements.txt
pip install -r  pip install -r zeromq-requirements.txt

在安装的过程当中可能会遇到一个swig的bug:github

AttributeError: 'module' object has no attribute 'PKCS5_SALT_LEN'

因为Pyzmq引用了 M2crypto这个包,而这个包须要使用swig,我安装的swig版本是3.0.5,当你的swig是3.0.5的时候便会报上面的错误,详细的Issue参见这里, 不过这个帖子也是从新编译了3.0.4版本的swig从而跳过这个错误的。web

从新编译swig 3.0.4版本以后,安装完毕.apache

配置

在安装指南中,默认的配置文件位置是ubuntu

/etc/salt/master
/etc/salt/minion

可是在我安装完毕 saltstack以后并无这2个配置文件,可是使用以下命令服务器

sudo salt-master -d
sudo salt-minion -l debug -d

服务也是能够成功开启,因此个人安装是没有问题的,可是文档中并无说明在经过PIP手动编译安装的状况下须要手动复制配置文件,
跳过这个坑的方法就是执行以下命令:

sudo cp ./conf/* /etc/salt/ #若是没有相关目录就手动创建目录

而后编辑

sudo vi /etc/salt/minion

# master: salt

把第16行 master: salt 前的注释去掉,而后把salt换成master节点的IP地址就能够了,因为笔者使用的是单机,因此把salt换成 0.0.0.0便可.

minion受权

在咱们的配置文件修改完毕,服务也正常启动以后, 还须要给minion服务器作受权,关于权限一节会在后面深刻研究,只有通过受权的minion才能够接受master节点的控制,最基本的受权操做也是很是简单的,毕竟SALTSTACK是以简单使用而著称的.

sudo salt-key -L
# 打印出全部受权或未受权的minion节点
sudo salt-key -A
# 受权全部节点
sudo salt-key -a name
# 受权name节点

受权完成以后,咱们就能够经过master节点进行进行对minion节点的控制了.


基本的使用方法

和最常用的ssh作对比,那就是执行命令的功能了,最简单的一条命令,参见以下代码

salt -e 'youngershen.com' cmd.run 'ifconfig'
# 或者
salt '*' cmd.run 'ifconfig'
# 或者
salt 'webserver*' cmd.run 'service apache restart'
salt 'webserver*' cmd.run 'sudo nginx -s reload'
# 对于这类命令,多台服务器切换起来真的是很是方便

关于 服务器通配符和SLS配置文件的编写,这里先不说,不过我已经以为SALTSTACK很是了不得了,配置文件管理很是整洁(Yaml),一条命令批量更新,对各类服务的机器筛选有强大的正则支持.即便是对单节点VPS的命令管理来讲,不用打密码的salt确实比ssh方便的多,并且你可能有不少VPS要管理,这样就不须要来回切换了,并且有通配符支持,因此文章开头的时候笔者就说即便是管理单节点
VPS,相对于SSH来讲SALT仍是颇有优点的,不足之处就是配置方面,若是出门在外的话,仍是须要SSH密码直接登录的.

而后是稍微复杂一点的例子.

更改 master 配置文件

file_roots:
  base:
    - /srv/salt

注意格式是yaml,当心缩进哦!

而后执行:

sudo pkill salt-master
sudo salt-master -d

增长新的SLS配置文件

# /srv/salt/ 目录下 top.sls
base:
  '*':
    - testconfig

#/srv/salt/ 目录下  testconfig.sls

myconfig:
      file.managed:
        - name: /etc/config.cnf
        - source: salt://config.cnf
xchat:
      pkg.installed:
       - watch:
        -file :myconfig

因为配置文件的信息量略大,因此只按照个人理解来简单说明,用以加强本身的理解之用, SLS文件所有采用yaml格式,语法是必须当心的,master中的 file_roots 的值,实际上就是salt文件服务器的路径值,在minion像master请求文件的时候,读取的就是这个路径的下的文件,base下的 * ,是说这个testconfig的配置能够用于任何minion节点,通配符就是体如今这里的,能够任意配置,而testconfig.sls文件中,定义了两个符号,一个是myconfig,一个是xchat,myconfig是一个随意的配置文件,xchat是一个聊天程序,意思是说当xchat被installed函数检测为安装完成状态的时候,在每次执行命令时就watch myconfig对应的文件,也就是能够达到配置文件更新的效果,见以下命令

sudo salt '*' state.highstate
# 执行完毕以后会发现 /etc目录下多了一个文件名为 config.cnf的文件,并且更新该文件以后,再
# 执行命令,该文件也会更新

结束语

而关于众多的function和配置的编写规则,只能在之后讨论了,不过我已经大体了解了如何编写SLS,配合grains,使salt即能管理配置文件,又能够进行服务器监控,grains的值也能够随意编写函数来处理监控信息.

(本文完)


引用资源

中文用户组知识库: http://www.saltstack.cn/projects/cssug-kb/wiki/Dive-into-saltstack

官方文档: http://docs.saltstack.com/en/latest/

相关文章
相关标签/搜索