- salt服务端叫master,客户端叫minion
- 实验环境均在centos
一、saltstack master的安装及其配置
1. 配置yum源
使用yum之前要自己配置yum源,按照用官方的yum配置文件配置源时网络有问题,因此自己安装epel源:
#cd /usr/local/src/
#wget
#rpm -ivh epel-release-6-8.noarch.rpm
2.安装
#yum install salt-master -y
3.配置
saltstack的配置文件默认在/etc/salt下。配置文件文件命名分别使用各自的组件名称,如master的配置文件名为master
3.1 配置master环境
- 修改master配置文件:/etc/salt/master
interface: 0.0.0.0
publish_port: 4505
worker_threads: 5
ret_port: 4506
- 开放防火墙
iptables -I INPUT -p tcp --dport 4505 -j ACCEPT
iptables -I INPUT -p tcp --dport 4506 -j ACCEPT
iptables-save > /etc/sysconfig/iptables
- 开机自启动与启动服务
chkconfig salt-master on
service salt-master start
- master安装脚本
#!/bin/bash
cd /usr/local/src/
wget
rpm -ivh epel-release-6-8.noarch.rpm
yum install python-devel
yum install salt-master -y
sed -i -r 's/^#interface: 0.0.0.0/interface: 0.0.0.0/' master
sed -i -r 's/^#publish_port: 4505/publish_port: 4505/' master
sed -i -r 's/^#worker_threads: 5/worker_threads: 5/' master
sed -i -r 's/^#ret_port: 4506/ret_port: 4506/' master
iptables -I INPUT -p tcp --dport 4505 -j ACCEPT
iptables -I INPUT -p tcp --dport 4506 -j ACCEPT
iptables-save > /etc/sysconfig/iptables
chkconfig salt-master on
service salt-master start
二、saltstack minion的安装及其配置
1. 配置yum源
#cd /usr/local/src/
#wget
#rpm -ivh epel-release-6-8.noarch.rpm
2. 安装
#yum install salt-minion
#chkconfig salt-minion on
#service salt-minion start
3. minion配置
- 修改minon配置文件:/etc/salt/minion
master: 192.168.1.106 # master IP
id: 192.168.1.100 #覆盖默认的id;每个minion的id都是唯一的。minion启动后会用id值去master进行验证
- 启动minion
chkconfig salt-minion on
service salt-minion start
- minion安装脚本
#!/bin/bash
master="10.10.88.20"
id=$(ip a | grep 'eth' | grep 'inet' | awk '{print $2}' | cut -d '/' -f 1)
cd /usr/local/src/
wget
rpm -ivh epel-release-6-8.noarch.rpm
yum install python-devel -y
yum install salt-minion -y
cd /etc/salt
sed -i -r "s/^#master: salt/master: ${master}/" minion
sed -i -r "s/^#id:/id: ${id}/" minion
chkconfig salt-minion on
service salt-minion start
三、使用salt-key管理master上的密钥
master和minion安装配置完成后,如果master要管理minion,就要接收minion的key。任意minion的在master没有接受前,minion的公钥存放在/etc/salt/pki/master/minions_pre目录下,公钥文件以id命名。
1. 查看minion列表
# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
192.168.1.100
Rejected Keys:
- Accepted Key 表示 已经接受的key,用minion id表示.
- Unaccepted Keys 表示 待接收的key
查看minion列表的过程中有一个问题,就是查询不到任何minion,检查配置文件没有报错。然后进入 minion debug,执行如下命令:
salt-minion -l debug
运行后发现一个报错:
[ERROR ] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before attempting to re-authenticate
也就是说master其实已经接收到了minion的公钥。然后我在master端:
/etc/salt/pki/master/minions_pre
发现了一个minion文件(其实这个是minion的id,因为我的主机名就是minion,minion id默认以主机名命名的),查看内容,实际上就是minion的公钥,因此删除这个文件,重启master和minion
rm -rf minion
2. 接收minion
- 接收所有的minion
salt-key -A
- 接收单个minion
>salt-key -a <keyname>
3. 接收前后的salt-key的变化
#salt-key -L
Accepted Keys:
192.168.1.100
Denied Keys:
Unaccepted Keys:
Rejected Keys:
- 打印master key fingerprint
salt-key -F master
如果某个minion的id值改变后,我们再重新接收新id后,如果对所有minion执行命令,会包括之前的就minion id,这种情况我们可以将之前的minion id删除,/etc/salt/pki/master/minions 存放了所有的id。如下:192.168.159.136和minion实际上指向同一台主机,192.168.159.136是新的id
[root@master minions]# ls
192.168.159.136 minion
[root@master minions]# rm -rf minion
[root@master minions]# pwd
/etc/salt/pki/master/minions
四、开始使用salt
1.测试
[root@master ~]# salt '*' test.ping # *表示指向所有的minions目标
192.168.1.100:
True
[root@master ~]# salt 192.168.1.100 test.ping #表示指定特定的minions目标
192.168.1.100:
True
test.ping只是一个函数。salt 命令包含命令选项,目标说明,要执行的函数,和函数的参数:salt [option] target function [para]
2. salt 函数:
- 查看所有的模块、函数以及相关用法
salt '*' sys.doc
- 查看特定模块的doc
salt '' sys.doc <module_name>
如: salt '' sys.doc state
- 为所有的模块列出function
salt '*' sys.list_functions
- 为特定的模块列出function
salt '' sys.list_functions <modules>
如: salt '' sys.list_functions service
- 显示当前所有可用的minions
salt '*' test.ping
- 运行任意的shell命令
salt '*' cmd.run 'command'
- salt远程安装任意工具
pkg module会自动将本地系统包管理器映射到相同的salt函数。这意味着 pkg.install 在基于Red Hat系统上将使用 yum 而在Debian系统上则使用 apt 来安装包,等等。
salt '*' pkg.install vim
- 列出minion上的所有网络接口的详细详细(IP,GW等)
salt '*' network.interfaces