Saltstack的yum部署和基础使用(基于CentOS 7的部署)
saltstack  阿里云yum源安装
wget -O /etc/yum.repos.d/saltstack.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install epel-release -y
yum install salt-minion   -y
yum install salt-master   -y
salt-master安装
yum install -y salt-master

修改配置文件
vim /etc/salt/master
#master消息发布端口 Default: 4505
publish_port: 4505
#工作线程数,应答和接受minion Default: 5
worker_threads: 100
#客户端与服务端通信的端口 Default: 4506
ret_port: 4506
#自动接受所有客户端
auto_accept: True
#启动salt-master
systemctl start salt-master
#检查是否启动成功
netstat -tnlp
tcp        0      0 0.0.0.0:4505            0.0.0.0:*              LISTEN      20839/python
tcp        0      0 0.0.0.0:4506            0.0.0.0:*              LISTEN      20845/python

salt-minions1 & salt-minions2 安装
yum install -y salt-minion
#修改配置文件
vim /etc/salt/minion
#master IP或域名
master: ip
#客户端与服务端通信的端口。 Default: 4506
master_port: 4506
#id minion的唯一标示。Default: hostname
id: ip或hostname 

启动minion
systemctl start salt-minion

salt-master查看(master接受minion的minion.pub ,存放/etc/salt/pki/master/minions目录,以minion的id命名)
[root@test ~]# ls /etc/salt/pki/master/
master.pem  minions          minions_denied  minions_rejected
master.pub  minions_autosign  minions_pre

salt-minion查看(minion将master的public key,存放/etc/salt/pki/minion目录)
[root@test ~]# ls /etc/salt/pki/minion
minion_master.pub  minion.pem  minion.pub
[root@localhost ~]# ls /etc/salt/pki/minion
minion.pem  minion.pub
将Unaccepted Keys:(未接受的key)加入到Accepted Keys:(接受的key)
salt-key -A

查看master的key列表
[root@test ~]# salt-key -L
Accepted Keys:(接受的key)
ops-glusterfs-1
ops-glusterfs-2
ops-glusterfs-3
ops-glusterfs-4
ops-glusterfs-5
ops-nginx-1
ops-nginx-2
ops-nginx-3
ops-nginx-4
Denied Keys:(否认的key)
Unaccepted Keys:(未接受的key)
Rejected Keys:(拒绝的key)

salt-key常用参数说明:
格式:salt-key 参数 [minion端ID(可以是IP,也可以是主机名) [-y]
-L 列出当前所有认证,包括Accepted Keys、Denied Keys、Unaccepted Keys、Rejected Keys
-a 添加某个或某些个未接受(Unaccepted Keys)认证
-A 添加所有未接受(Unaccepted Keys)认证
-d 删除某个或某些个已接受(Accepted Keys)认证
-D 删除所有已接受(Accepted Keys)认证
-y 使用该参数可免去证书操作的交互,除非对minion端很信任,一般不建议使用
-h 帮助

[root@test ~]# salt '*' test.ping
minion_192.168.81.12:
True
minion_192.168.81.60:
True

查看grains分类:
salt '*' grains.ls
#查看grains所有信息:
salt '*' grains.items
#查看grains某个信息(系统版本):
salt '*' grains.item osrelease

[root@test ~]# salt '*' grains.item osrelease
minion_192.168.81.12:
----------
osrelease:
7.3.1611
minion_192.168.81.60:
----------
osrelease:
7.3.1611

在minion上自定义grains信息
编辑minion配置文件/etc/salt/minion或创建新文件/etc/salt/grains文件
编辑后重启salt-minion
[root@test ~]# vim /etc/salt/grains
test:
- test1
[root@test ~]# systemctl restart salt-minion
[root@test ~]# vim /etc/salt/grains
test:
- test2
[root@test ~]# systemctl restart salt-minion
[root@test ~]# salt '*' grains.item test
minion_192.168.81.12:
----------
test:
- test1
minion_192.168.81.60:
----------
test:
- test2

匹配grains 某个信息
[root@test ~]# salt -G 'os:CentOS' test.ping
minion_192.168.81.12:
True
minion_192.168.81.60:
True

自定义节点组到配置文件里,通过一个组进行操作:
$cat /etc/salt/master.d/nodegroups.conf
nodegroups:
test1: 'L@test1,test2,test3 or *.test.com'
test2: 'G@os:CentOS and *.test.com'
test3: '* and not G@os:CentOS'

用法:
salt -N 'test1' test.ping
#分批执行,每次2个
salt '*' -b 2 test.ping
#分批执行,每次总共的25%
salt '*' -b 25% test.ping
[root@test ~]# salt '*' cmd.run 'uptime'
minion_192.168.81.12:
22:33:57 up  2:55,  2 users,  load average: 0.00, 0.01, 0.05
minion_192.168.81.60:
22:45:21 up  6:00,  3 users,  load average: 0.00, 0.01, 0.05

--------------------------------------------------------------------------------
cmd.run的使用
salt '*' cmd.run_all 'uptime'
#执行命令并只返回错误输出
salt '*' cmd.run_stderr 'uptime'
#执行命令并只返回正确输出
salt '*' cmd.run_stdout 'uptime'
#上传本地脚本到服务器上执行,返回所有信息
#创建脚本路径:vim /srv/salt/scripts/test1.sh
salt '*' cmd.script salt://scripts/test1.sh```

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

salt常用命令
查看各节点ip信息:
salt '*' network.ip_addrs
salt 该命令执行salt的执行模块,通常在master端运行,也是我们最常用到的命令
salt [options] ''  [arguments]
如: salt '*' test.ping     salt "*" cmd.run "df -hT"
salt-run 该命令执行runner(salt带的或者自定义的,runner以后会讲),通常在master端执行,比如经常用到的manage
salt-run [options] [runner.func]
salt-run manage.status   ##查看所有minion状态
salt-run manage.down     ##查看所有没在线minion
salt-run manage.up       ##查看所有在线minion
salt-key 密钥管理,通常在master端执行
salt-key [options]
salt-key -L              ##查看所有minion-key
salt-key -a    ##接受某个minion-key
salt-key -d    ##删除某个minion-key
salt-key -A              ##接受所有的minion-key
salt-key -D              ##删除所有的minion-key
salt-call 该命令通常在minion上执行,minion自己执行可执行模块,不是通过master下发job
salt-call [options]  [arguments]
salt-call test.ping           ##自己执行test.ping命令
salt-call cmd.run 'ifconfig'  ##自己执行cmd.run函数
salt-cp 分发文件到minion上,不支持目录分发,通常在master运行
salt-cp [options] '' SOURCE DEST
salt-cp '*' testfile.html /tmp
salt-cp 'test*' index.html /tmp/a.html
salt-ssh 0.17.1版本加入的salt-ssh
salt-master master运行命令
salt-master [options]
salt-master            ##前台运行master
salt-master -d         ##后台运行master
salt-master -l debug   ##前台debug输出
salt-minion minion运行命令
salt-minion [options]
salt-minion            ##前台运行
salt-minion -d         ##后台运行
salt-minion -l debug   ##前台debug输出
--------------------------------------------------------------------------------------------------------------------------------
salt '*' test.ping   ##查看在线minion
salt '*' pkg.install ftp  ##所有Minion安装ftp
说明:
‘*’ 代表的是target是指在那些minion上操作
‘test’ ,’pkg’是一个执行模块,所有的执行模块见http://docs.saltstack.com/ref/modules/all/index.html?highlight=full%20list%20builtin
‘ping’,’install’是执行模块下面的函数,同样参加上述链接查看帮助
‘ftp’ 是函数的参数(arg),有的函数需要参数,有的不需要
帮助: salt ‘‘ sys.doc ##查看所有执行模块的doc salt ‘‘ sys.doc test ##查看test模块的帮助 salt ‘*’ sys.doc test.ping ##查看test.ping函数的帮助