saltstack自动化运维工具,以下是本人对于它的一些操作记录

1.服务安装

master服务端安装:

1
2
3
4
# yum install salt-master salt-minion -y
# chkconfig salt-master on
# chkconfig salt-minion on
# service salt-master start

master配置文件

1
2
3
4
5
6
7
8
9
10
11
12
# vim /etc/salt/master
#监听IP地址,本机IP或者解析到本机的域名
interface: IP/domain
#启动用来接收或应答minion的线程数
worker_threads: 10
#设置默认超时时间单位秒
timeout=60
#设置搜索runner模块的额外路径
runner_dirs: ['/srv/salt-runner']

minion客户端安装:

1
2
3
# yum install salt-minion -yum
# chkconfig salt-minion on
# service salt-minion start

minion配置文件:

1
2
#服务端ip或域名
master: 106.3.142.104

2.配置认证

master服务端操作:

1
2
# salt-key -a minion
# salt-key -a master

  • -a 接受一个minion-key
  • -A 接受所有minion-key
  • -L 查看所有minion
  • -d 删除一个minion-key
  • -D 删除所有minion-key
1
# salt 'minion' test.ping

模块:
test.ping:可以检查通讯是否正常
cmd.run: 可以执行linux命令,如后面跟’df -h’查看磁盘情况

3.grains 和 pillar

1、grains

grains 是在 minion(客户端)启动时收集到的一些信息,比如操作系统类型、网卡ip等。

在master上可以查询设备的grains信息

1
2
# salt 'minion' granins.ls //列出所有的 grains 项目名字
# salt 'slaver.test.com' grains.items //列出所有的 grains 项目名以及值

grains的信息并不是动态的,并不会时时变更,它只是在 minion 启动时收集到的,需要在minion中配置。

1
2
3
4
5
6
7
8
9
10
# vim /etc/salt/minion //或者在/etc/salt/grains
grains:
role:
- nginx
env:
- test
myname:
- tpp
# service salt-minion restart

需要重启minion服务才能生效

列出所有的信息:

1
2
3
4
5
6
7
8
9
# salt 'minion' grains.item role env myname
minion:
----------
env:
test
myname:
tpp
role:
nginx

列出指定的信息:

1
2
3
# salt 'minion' grains.get role
minion:
nginx

当我们对minion分类完毕后,我们能根据一些指标进行操作,比如对所有role为nginx执行批量操作:

1
# salt -G role:nginx cmd.run 'hostname'

2.pillar

pillar 是在maseter(服务端)定义的,针对minion定义一些信息,对于一些比较重要的信息我们可以存在pillar中。

在master上可以查询设备的pillar信息

1
# salt 'minion' pillar.items

服务端配置pillar信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# vim /etc/salt/master //去掉#号
pillar_roots:
base:
- /srv/pillar
# mkdir /srv/pillar
# vim /srv/pillar/test.sls //自定义配置文件
conf: /etc/test.conf
myname: tpp
# vim /srv/pillar/top.sls //总入口文件
base:
'minion'
- test
# service salt-master restart

需要重启master服务才能生效

在重启完后,我们需要通过刷新pillar来获取最新的状态:

1
2
3
4
5
6
7
8
# salt '*' saltutil.refresh_pillar
# salt 'minion' pillar.items
minion:
----------
conf:
/etc/test.conf
myname:
tpp

pillar同样可以根据分类进行匹配对象:

1
2
3
# salt -I 'conf:/etc/test.conf' test.ping
minion:
True

4.状态文件编写

1.配置

配置master确定状态文件目录:

1
2
3
4
# vim /etc/salt/master
file_roots:
base:
- /srv/salt

其中:base、dev(开发环境)、test(测试环境)、prod(生产环境)

编写配置文件:

1
# vim /srv/salt/test/system.sls

配置文件下发管理

  • name:文件下发在minion位置
  • source:文件获取的位置
  • user:下发用户
  • group:下发用户组
  • mode:权限
    1
    2
    3
    4
    5
    6
    7
    conf_file:
    file.managed:
    - name: /etc/test.conf
    - source: salt://test/file/test.conf
    - user: root
    - group: root
    - mode: 755

yum仓库的配置:

  • name:仓库名
  • humanname:介绍
  • baseurl:下载地址
  • gpgcheck:gpg签名验证
  • enabled:是否启用
  • order:优先级比require和watch低,有order指定的state比没有order指定的优先级高
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    {% if grains.os == 'CentOS' %}
    repo_install:
    pkgrepo.managed:
    - name: rhel-test
    - humanname: is a test repo
    - baseurl: http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
    - gpgcheck: 0
    - enabled: 1
    - order: 3
    {% endif %}

文件内容替换:

  • name:文件名
  • pattern:需要替换的内容,可以正则匹配
  • repl:替换的内容
    1
    2
    3
    4
    5
    6
    selinux:
    file.replace:
    - name: /etc/selinux/config
    - pattern: ^SELINUX=\w+
    - repl: SELINUX=disabled
    - order: 1

安装包:

第一种:

  • pkgs:包名
  • only_upgrade:是否更新

第二种:
包名在最上面

  • version:指定版本
  • name:服务名称
  • enabled:是否开机启动
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    basepkgs:
    pkg.installed:
    - pkgs:
    - iptraf
    - tree
    - only_upgrade: True
    httpd:
    pkg.installed:
    - version: 1.7.12.4-1.el6.rfx
    service.running:
    - name: http
    - enabled: True

执行shell命令:

  • name:命令名
  • user:执行用户
  • unless:当返回False时候执行上面操作;onlyif,反之
    1
    2
    3
    4
    5
    6
    7
    {% for ser in ['crond','rsyslog','network','salt-minion','sysstat','atd'] %}
    chkon-{{ser}}:
    cmd.run:
    - name: 'chkconfig {{ser}} on'
    - user: root
    - unless: 'chkconfig --list {{ser}}|grep :on'
    {% endfor%}

2.执行状态文件

master服务端执行:

1
# salt '*' state.sls test.system

minion客户端上执行:

1
# salt-call state.sls test.system

saltstack官网
进阶参考