SaltStack主要分为两大模块 master和minion,master是管理者,minion是被管理者
主节点只需要安装salt-master,被管理节点只需要安装salt-minion

安装配置

linux版本为centos7

  1. yum install -y https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
  2. yum install -y salt-master salt-minion
  3. systemctl enable salt-master
  4. systemctl start salt-master
  5. systemctl enable salt-minion
  6. systemctl start salt-minion

minion配置文件

minion节点需要改配置文件,位于/etc/salt/minion

该文件默认全部注释

主要改两个地方

配置master的ip地址
image.png

id表示别名,让master知道是哪一个节点连接的,可以设置成任意字符串,为了方便区分最好设置成本机ip
image.png
配置文件重启后生效

master配置文件

配置master自动接受请求认证(master上配置 /etc/salt/master)
自动接受Minion节点连接
image-20210107095255257.png
超时秒数
image.png
最大请求事件大小,这里设置成1G了
image.png
超时输出·
image.png
命令输出格式为json
image.png
配置路径,非常重要,saltstack的模块中 凡是用到salt://的路径,都是基于此的相对路径
image.png
关闭一下结果缓存,可以用别的程序保存结果
image.png
配置文件重启后生效
更多配置文件内容参考博客
https://blog.51cto.com/12107790/2319823
https://blog.csdn.net/weixin_43866211/article/details/107025667

端口

启动后会默认监听两个端口
4505 消息发布
4506 消息返回
防火墙开放这两个端口即可
image.png

端口修改

master配置文件可以指定发布端口
image.png
指定minion返回端口,与minion配置文件中的master_port对应
image.png
minion的配置文件也需要相应改变
image.png

连通master和minion

首先要连通master和minion,需要这两个节点的服务器能互相ping通

在master节点上查看有哪些请求

[root@localhost ~]# salt-key -L                
Accepted Keys:
Denied Keys:
Unaccepted Keys:
mylocal
Rejected Keys:

可以看到minion节点
image-20210106163857123.png

将这个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]

image-20210107101245574.png
image-20210107101311724.png
通配符匹配

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

image-20210107101444953.png

  • 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 />![image.png](https://cdn.nlark.com/yuque/0/2021/png/370793/1611214577313-af3f2e08-d8e7-4af4-9425-4e7345da4978.png#crop=0&crop=0&crop=1&crop=1&height=103&id=ZB6Ya&margin=%5Bobject%20Object%5D&name=image.png&originHeight=103&originWidth=354&originalType=binary&ratio=1&rotation=0&showTitle=false&size=7771&status=done&style=none&title=&width=354)

<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,可以在命令中指定环境

image-20210107142524498.png

写一个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-ssh0.17.0 新引入的一个功能,不需要minion对客户端进行管理,也可以不需要mastersalt-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