一、saltstack安装

1.安装saltstack

master上安装salt-master:

yum install salt-master -y

minion 上安装 salt-minion:

1 yum install salt-minion -y

2、 配置saltstack

2.1 master端:

1 vi /etc/salt/master

2.2 修改interface监听地址为本机ip:

修改auto_accept 自动接收minion的key:

auto_accept: True

2.3 修改minion文件中的的id为自己的主机名

[root@client1 ~]# vi /etc/salt/minion  #修改78行
id: client1
[root@client2 ~]# vi /etc/salt/minion   #修改78行
id: client2

也可以修改

  [root@94 ~]# cat /etc/salt/minion_id
  94.191.91.151

  本文件只有启动minion后才会生成

2.4 minion端:修改master的服务器ip:

vi /etc/salt/minion

# Set the location of the salt master server. If the master server cannot be
# resolved, then the minion will fail to start.
master: 45.63.88.217

3 启动saltstack 

3.1 master端:

/etc/init.d/salt-master restart

Stopping salt-master daemon: [  OK  ]
Starting salt-master daemon: [  OK  ]

chkconfig salt-master #开启自启

3.2 minion端:

/etc/init.d/salt-minion restart 

Stopping salt-minion daemon:  [  OK  ]
Starting salt-minion daemon:  [  OK  ]
chkconfig salt-master  #开机自启


centos 7启动命令:
[root@saltstack ~]# systemctl enable salt-master   #加入开机启动
[root@saltstack ~]# systemctl enable salt-minion  #加入开机启动
[root@saltstack ~]# systemctl start salt-master  #启动服务
[root@saltstack ~]# systemctl start salt-minion    #启动服务

4 测试saltstack

在master端执行:

[root@vultr ~]# salt-key -L
Accepted Keys:
iZ25fb5wrepZ     #客户端主机名
Denied Keys:
Unaccepted Keys:
Rejected Keys:
cat  /etc/salt/minion_id 
可以修改客服端主机名

此时可以看到minion的ip已经获取到了,说明安装成功。

如果在/etc/salt/master的配置文件中没有配置自动接收key,可以使用以下命令:

[root@master ~]# salt-key -A
The key glob '*' does not match any unaccepted keys.

测试:

salt 命令:

#所有监控用户执行命令:
salt    '*'    cmd.run    "df -h "

#指定一个用户执行命令:
salt  '用户名或ip'    cmd.run    "命令"

  cmd是模块,run是cmd模块的方法

  cmd命令很好用,但是同时也很危险,因为能直接执行命令意味着就可以删除。后面会说到ACL允许特定的人才能执行

测试
salt "zabbix-agent" test.ping
  *表示所有,因为*在shell本地也是有含义的因此我们用引号引起来,不让他在shell中体现它的含义。
  test.ping,其中test是一个模块,而ping是test模块中的一个方法
  这条命令的意思是检测minion是否在干活,这个ping和ICMP的ping不一样,不要搞混了。

 salt-key 命令参数:

-l                     显示指定状态的key,支持正则表达式
-L,--list-all          显示所有公钥
-a,ACCEPT              接受指定等待认证的key,支持正则
-A,--accept-all        接受所有等待认证的key
-r REJECT              拒绝等待认证的key,支持正则
-R REJECT-all          拒绝所有等待认证的key
--include-all          显示所有状态的key,包括non-pending状态
-p PRINT               打印指定的公钥,-P打印所有的公钥
-d DELETE              删除指定的key
-D --delete-all        删除所有的key
-f FINGER              显示指定key的指纹信息
-F --finger-all        显示所有key的指定信息

 salt-cp 命令参数:

salt-cp   '*'   /var/local/text.txt    /tmp/
#拷贝/var/local/text.txt 到所有服务器上的/tmp目录下

Salt 文件服务器:

由于文件服务器是为Salt state system工作的,所以文件服务器也是支持环境的概念的。
Salt文件服务器/etc/salt/master配置文件中的flie_roots选项管理。
Salt文件服务器的默认环境为为base环境,base环境必须定义,因为当环境没有明确指定时,文件下载就是从base环境中去找的。其配置如下:
file_roots:
  base:
    - /srv/salt/base
    - /srv/salt/failover

/srv/salt/base和/srv/salt/failover这些目录是不存在,需要手动创建。这里还需要说明的是下载文件时的搜索顺序。
文件服务器在给minions传输文件时,是有搜索顺序的。这里用上述配置说明:
如果文件URL为:salt://httpd/httpd.conf。那么传输文件时,
首先搜索/srv/salt/base/httpd/httpd.conf,如果找到了,则下载;否则就使用/srv/salt/failover/httpd/httpd.conf

2. 文件服务器多环境配置

多环境配置也是更改master配置达成,如下:

file_roots:
  base:
    - /srv/salt/base
  dev:
    - /srv/salt/dev
    - /srv/salt/base
  prod:
    - /srv/salt/prod
    - /srv/salt/base

在这个配置中,处了base环境外。还有dev环境和prod环境。配置文件修改后,需要重启master才能生效。

3. cp模块

cp模块被用于用于Salt state system、salt-cp命令(如上所述)以及可用于Salt文件服务器。

3.1 cp.get_fle

cp.get_file用于minion从master下载一个文件,语法:

文件在base环境下:

salt    '*'    cp.get_file     salt://testfile    /root/testfile

该命令表示minion从master端下载文件并拷贝到到/root/testfile文件中。注意:salt://表示的base环境。因此,testfille是位于base环境下——即/srv/salt/base目录中。

文件在base环境的多级目录下:

salt '*'  cp.get_file  salt://httpd/httpd.conf  /root/httpd.conf

salt://httpd/httpd.conf  表示   /srv/salt/base/httpd/httpf.conf**

cp模块目标路径必须是一个文件,而不是目录。这点有区别去salt-cp命令。

cp.get_file gzip格式
对于大文件传输,cp.get_file支持gzip压缩格式。因为gzip是CPU密集型的工具,因此cp.get_file开启gzip是适用于高压缩率的情况下,如JSON或者YAML文件。
语法:

salt  '*'  cp.get_file  salt://httpd/httpd.conf  /root/httpd.conf  gzip=5

gzip后的数字表示压缩比,范围在1-9之间,1表示最小压缩比,9为最大压缩比。换句话说,gzip=1情况下, 消耗的CPU小;gzip=9时,消耗的CPU则更多。

cp.get_file  makedirs=True
注意,也就是时候,cp.get_file过程中,如果目录不存在,cp.get_file是不会主动创建目录的,如果要做到这点,可以使用makedirs=True 参数。测试如下:

[root@master httpd]# salt '*' cp.get_file salt://httpd/httpd.conf /root/test/httpd.conf
192.168.1.223:
    False
[root@master httpd]# salt '*' cp.get_file salt://httpd/httpd.conf /root/test/httpd.conf makedirs=True
192.168.1.223:
    /root/test/httpd.conf

cp.get_dir  

顾名思义,cp.get_dir就是下载目录,用法基本同cp.get_file一直。直接举个例子吧

将master端的httpd目录下载到minion端的/root目录下

[root@master ~]# salt '*' cp.get_dir salt://httpd /root
192.168.1.223:
    - /root/httpd/httpd.conf

cp.push

cp.push 模块允许minion上传文件到master端。注意事项:

cp.push功能默认不开启,需要修改配置文件中的file_recv 环境,默认为False
上传的文件存放在master端的 /var/cache/salt/master/minions/<minion_id>/files/ 目录下

修改master配置文件并重启。

file_recv: True

更改minion_id步骤

1.停止salt-minion 如果不停止会一直给master发消息
2.master上面salt-key 删除老的id   salt-key -d minionid
3.mininon上删除/etc/salt/minion_id  rm -f /etc/salt/minion_id
4.删除minion端/etc/salt/pki   rm -rf /etc/salt/pki
5.minion上配置文件修改id 
6.启动minion
7.master重新salt-key加入
原文地址:https://www.cnblogs.com/xu743876685/p/8523275.html