一、简介
Saltstack 是基于Python 开发的,也是基于 C/S 架构,服务端 master 和客户端 minions ;Saltstack 和 Puppet 很像,可以说 Saltstatck 整合了 Puppet 和 Chef 的功能,更加强大,更适合大规模批量管理服务器,并且它比 Puppet 更容易配置。
三大功能: 远程命令执行,配置管理(服务,文件,cron,用户,组),云管理。
支持系统:大多数系统都支持,windows 上不支持安装 master。
二、安装配置
1、准备工作
本实验是在CentOS7.8上做的,准备两台机器,关闭防火墙firewalld并清空规则,关闭selinux
服务端 | 192.168.33.123 |
---|---|
客户端 | 192.168.33.124 |
#systemctl stop firewalld #关闭防火墙
#systemctl disable firewalld #清除防火墙规则,禁用开机自启
#setenforce 0 #关闭selinux
2、修改主机名并编辑 hosts 文件
修改主机名并把主机名追加至/etc/sysconfig/network
文件中
#hostnamectl set-hostname test1 #修改master端主机名为test1
#echo "HOSTNAME=test1" >> /etc/sysconfig/network #在主机test1上做
#hostnamectl set-hostname test2 #修改minion端主机名为test2
#echo "HOSTNAME=test2" >> /etc/sysconfig/network #在主机test2上做
编辑/etc/hosts
文件,添加IP与主机名的映射关系,如果机器太多,可以搭建DNS,这样就不用每台机器都做
#echo "192.168.33.123 test1" >> /etc/hosts
#echo "192.168.33.124 test2" >> /etc/hosts
3、安装
(1)服务端安装
#yum -y install epel-release #配置额外的软件包源,服务器端和客户端都要先配置好源才能顺利安装salt
#yum -y install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm #配置最新版本的salt源
#yum clean all && yum makecache #重新建立yum源缓存
#yum -y install python-crypto
#yum -y install salt-master salt-minion #服务器端test1安装master和minion,可以不装minion,但是为了salt能管理本机,顺便看看实验效果,建议安装
(2)客户端安装
按照上面的源配置方法配置好yum源,配置好后,直接执行下面的安装指令,客户端只需要安装minion
#yum -y install salt-minion
4、配置
服务端和客户端都要配置 master
# vim /etc/salt/minion #在第16行添加
master: 192.168.33.123 #注意冒号后有一个空格
5、启动服务
(1)服务端
# /etc/init.d/salt-master start #启动master
# /etc/init.d/salt-minion start #启动minion
或者
#salt-master -d #启动并后台运行
#salt-minion -d #启动并后台运行
(2)客户端
# /etc/init.d/salt-minion start #启动minion
或者
#salt-minion -d #启动并后台运行
三、配置认证
(1)在服务端上操作
在服务器端执行如下语句可以查询到当前环境下有多少个客户端等待服务器端的认证
[root@test1 salt]# salt-key
从上图可以看出目前有两个机器test1和test2等待认证,执行如下语句接受
[root@test1 salt]# salt-key -a test1
[root@test1 salt]# salt-key -a test2
再次用命令salt-key
查看,发现两台机器已经由服务端认证并出现在已经通过的列表中
Note:-a :accept ,-A:accept-all,-d:delete,-D:delete-all。可以使用salt-key 命令查看到已经签名的客户端。此时我们在客户端的 /etc/salt/pki/minion 目录下面会多出一个minion_master.pub 文件。
(2)测试验证
示例1:salt '*' test.ping
[root@test1 master]# salt '*' test.ping //检测通讯是否正常,也可以指定其中一个 'test2'
示例2: salt '*' cmd.run 'df -h'
[root@test1 master]# salt '*' cmd.run 'df -h' //远程执行命令,查看磁盘情况
Note: 这里的*
必须是在 master 上已经被接受过的客户端,可以通过 salt-key 查到,通常是我们已经设定的 id 值。关于这部分内容,它支持通配、列表以及正则。比如两台客户端 web10、web11, 那我们可以写成salt 'web*'
salt 'web1[02]'
salt -L 'web10,web11'
salt -E 'web(10|11)'
等形式,使用列表,即多个机器用逗号分隔,而且需要加-L,使用正则必须要带-E选项。 它还支持 grains 和 pillar,分别加-G 和 -I 选项,下面会介绍到。
四、grains 和 pillar
1、grains
grains 是在 minion(客户端)启动时收集到的一些信息,比如操作系统类型、网卡ip等。
[root@test1 master]# salt 'test2' grains.ls //列出所有的 grains 项目名字
[root@test1 master]# salt 'test2' grains.items //列出所有的 grains 项目名以及值
Note:grains的信息并不是动态的,并不会时时变更,它只是在 minion 启动时收集到的。grains 还可以做