SaltStack主要分为两大模块 master和minion,master是管理者,minion是被管理者
主节点只需要安装salt-master,被管理节点只需要安装salt-minion
安装配置
linux版本为centos7
yum install -y https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpmyum install -y salt-master salt-minionsystemctl enable salt-mastersystemctl start salt-mastersystemctl enable salt-minionsystemctl start salt-minion
minion配置文件
minion节点需要改配置文件,位于/etc/salt/minion
该文件默认全部注释
主要改两个地方
配置master的ip地址
id表示别名,让master知道是哪一个节点连接的,可以设置成任意字符串,为了方便区分最好设置成本机ip
配置文件重启后生效
master配置文件
配置master自动接受请求认证(master上配置 /etc/salt/master)
自动接受Minion节点连接
超时秒数
最大请求事件大小,这里设置成1G了
超时输出·
命令输出格式为json
配置路径,非常重要,saltstack的模块中 凡是用到salt://的路径,都是基于此的相对路径
关闭一下结果缓存,可以用别的程序保存结果
配置文件重启后生效
更多配置文件内容参考博客
https://blog.51cto.com/12107790/2319823
https://blog.csdn.net/weixin_43866211/article/details/107025667
端口
启动后会默认监听两个端口
4505 消息发布
4506 消息返回
防火墙开放这两个端口即可
端口修改
master配置文件可以指定发布端口
指定minion返回端口,与minion配置文件中的master_port对应
minion的配置文件也需要相应改变
连通master和minion
首先要连通master和minion,需要这两个节点的服务器能互相ping通
在master节点上查看有哪些请求
[root@localhost ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
mylocal
Rejected Keys:
可以看到minion节点
将这个mylocal添加到管理当中,该命令可以在后面加个参数-y (建议在master配置文件中配置自动接受Minion连接,不然每一个都手动连接很麻烦)
[root@localhost ~]# salt-key -a mylocal
The following keys are going to be accepted:
Unaccepted Keys:
mylocal
Proceed? [n/Y] Y
Key for minion mylocal accepted.
现在master和minion连通了
测试一下能不能ping通,可以发现是通的 salt '*' test.ping表示ping全部
[root@localhost ~]# salt mylocal test.ping
mylocal:
True
删除节点
salt-key -d mylocal
命令使用
salt命令
参考博客 https://www.cnblogs.com/yanjieli/p/10873051.html
salt '<target>' <function> [arguments]


通配符匹配
salt 'salt-minion01' test.ping
列表匹配
salt -L 'salt-minion01,salt-minion02' test.ping
正则匹配
salt -E '^salt' test.ping
salt -E '^salt.*2$' test.ping
IP匹配
salt -S '192.168.1.32' test.ping
模块
参考博客 https://www.cnblogs.com/yanjieli/p/10864648.html

- test 模块多用于测试
- user 模块用于用户管理
- cmd 模块可以执行任意shell命令
- pkg 模块用于软件包管理
- file 模块多用于配置被控主机常见的文件操作
- service 模块用于服务管理
test模块
模块名:test
功能:用于测试
[root@salt-master ~]# salt '*' test.ping
user模块
# salt '*' user.add name <uid> <gid> <groups> <home> <shell>
[root@salt-master ~]# salt '*' user.add testuser
cmd模块
模块名:cmd
功能:实现远程的命令行调用执行(默认具备root操作权限,使用时需评估风险)
#查看所有minion内存和磁盘使用情况
[root@salt-master ~]# salt '*' cmd.run "free -m"
[root@salt-master ~]# salt '*' cmd.run "df -h"
# 在后面加个_all会显示比较详细的信息
[root@salt-master ~]# salt '*' --out=json cmd.run_all "df -h"
执行脚本
salt '*' cmd.script salt://workerTempFile/hello.sh
cp模块
复制文件
本机的文件路径要通过salt://开头
- cp.get_url 通过url传文件
- cp.get_dir 传目录
- cp.get_file 传本机上的文件 ```shell salt ‘minion104’ cp.get_file salt://task_2222/2222.sls /root/222.sls
常用选项 gzip 压缩(level 1-9),makedirs=booltype(True|False),是否创建目录
salt ‘*’ cp.get_file salt://path/to/file /minion/dst/newfile gzip=5 makedirs=True
cp.push可以将minion上的文件拉取到master上需要先在master的配置文件中修改一个地方<br />
<a name="YjAJd"></a>
### pkg模块
```shell
模块名:pkg
功能:软件包状态管理,会根据操作系统不同,选择对应的安装方式(如CentOS系统默认使用yum,Debian系统默认使用apt-get)
#安装
[root@salt-master ~]# salt '*' pkg.install "vsftpd"
#卸载
[root@salt-master ~]# salt '*' pkg.remove "vsftpd"
#安装最新版本
[root@salt-master ~]# salt '*' pkg.latest_version "vsftpd"
#更新软件包
[root@salt-master ~]# salt '*' pkg.upgrade "vsftpd"
#查看帮助手册
[root@salt-master ~]# salt '*' pkg
file模块
模块名:file
功能:被控主机常见的文件操作,包括文件读写、权限、查找、校验
#校验所有minion主机文件的加密信息,支持md5、sha1、sha224、shs256、sha384、sha512加密算法
[root@salt-master ~]# salt '*' file.get_sum /etc/passwd md5
#修改所有minion主机/etc/passwd文件的属组、用户权限、等价于chown root:root /etc/passwd
[root@salt-master ~]# salt '*' file.chown /etc/passwd root root
#获取所有minion主机/etc/passwd的stats信息
[root@salt-master ~]# salt '*' file.stats /etc/passwd
#获取所有minion主机/etc/passwd的权限mode,如755,644
[root@salt-master ~]# salt '*' file.get_mode /etc/passwd
#修改所有minion主机/etc/passwd的权限mode为0644
[root@salt-master ~]# salt '*' file.set_mode /etc/passwd 0644
#在所有minion主机创建/opt/test目录
[root@salt-master ~]# salt '*' file.mkdir /opt/test
#在所有minion主机穿件/tmp/test.conf文件
[root@salt-master ~]# salt '*' file.touch /tmp/test.conf
#将所有minion主机/tmp/test.conf文件追加内容'maxclient 100'
[root@salt-master ~]# salt '*' file.append /tmp/test.conf 'maxclient 100'
#删除所有minion主机的/tmp/test.conf文件
[root@salt-master ~]# salt '*' file.remove /tmp/test.conf
service模块
模块名:service
功能:被控主机程序包服务管理
#开启(enable)禁用(disable)
salt '*' service.enable <service name>
salt '*' service.disabled <service name>
#reload、restart、start、stop、status操作
salt '*' service.reload <service name>
salt '*' service.restart <service name>
salt '*' service.start <service name>
salt '*' service.stop <service name>
salt '*' service.status <service name>
grains模块
可以对系统信息进行监控
查看所有管理节点的主机信息,只是展示的列表
salt '*' grains.ls
查看详细信息
salt '*' grains.items
可以和grep命令结合使用
使用state模块执行脚本
Salt 通过State模块来进行文件的管理;通过YAML语法来描述,后缀是.sls的文件
state模块类似ansible中的playbooks
需要先在master配置文件中指定一下路径,路径不存在就需要创建文件夹
默认是base,可以在命令中指定环境

写一个sls 文件vim test.sls
cmd.script是运行脚本的模块,salt://hello.sh是脚本的路径,与上面配置的file_roots的是相对路径
这个test.sls文件也需要放在file_roots的路径中
shell_test:
cmd.script:
- source: salt://hello.sh
这个test.sls文件也需要放在file_roots的路径中
值得一提的是这个地址可以写成uri
shell_test:
cmd.script:
- source: https://chaoslife-1258883619.cos.ap-shanghai.myqcloud.com/sh/test1.sh
执行test任务,sls文件不需要写后缀
salt '*' state.sls test
输出格式为json
添加参数 --out=json 配合cmd.run_all 输出更详细的信息
salt '*' --out=json cmd.run_all "df -h"
salt-cp
用来复制文件
salt-cp '*' --out=json /root/hello.sh /root/
salt-ssh
参考博客 https://www.cnblogs.com/yanjieli/p/10912572.html
salt-ssh是 0.17.0 新引入的一个功能,不需要minion对客户端进行管理,也可以不需要master;salt-ssh也支持salt大部分的功能:比如grains,modules,state等;salt-ssh没有使用ZeroMQ的通信架构,执行是串行模式
需要配置一个roster文件用于配置被管理节点服务器的信息
minion62:
host: 192.168.12.104
user: root
passwd: 1234
port: 22
执行命令
使用—roster-file指定 roster文件路径
加**-i**参数自动认证
salt-ssh '*' --roster-file ./roster test.ping -i
使用salt-ssh执行脚本
需要启动master并配置文件中配置file_roots,不需要被管理节点配置minion
其余和salt一样
加**-i**参数自动认证
salt-ssh '*' --roster-file ./roster state.sls test -i
虽然不用配置minion与master相连,但效率相比于master和minion相连慢了一些
可以使用salt-ssh来批量安装minion
