点击此处进入---->saltstack入门系列(二) grains和piller 参考文档:本地PDF文档 简单介绍:基于Python开发,和puppet很像,通过ZeroMQ进行通信。可以实现p
点击此处进入---->saltstack入门系列(二) grains和piller
参考文档:本地PDF文档
简单介绍:基于Python开发,和puppet很像,通过ZeroMQ进行通信。可以实现puppet所有功能,且配置更简单,支持大部分系统,但windows上不支持安装master(主:master,从:minion)。saltstack master启动后默认监听4505(pubish_port:消息发布系统)和4506(ret_port:salt客户端与服务端通信的端口)两个端口,会发现所有的minion在4505端口持续保持在ESTABLISHED。
三种工作方式:本地;C/S;基于SSH(不用安装agent)
三大功能:远程命令执行;配置管理(服务、文件、cron、用户、组);云管理。
1.安装saltstack
准备两台机器,都写上hostname,因为只有两台主机,hosts文件直接修改,也可以做DNS解析服务器。
#vim /etc/hosts
192.168.58.132 server
192.168.58.130 client
server上:
yum install -y epel-release
yum install -y salt-master salt-minion
client上:
yum install -y epel-release
yum install -y salt-minion
启动:
server上:
/etc/init.d/salt-master start
/etc/init.d/salt-minion start
client上:
先配置minion文件,#vim /etc/salt/minion //指定server的ip
master: 192.168.58.132 //大概是16行的位置,修改或增加都行,注意冒号后有空格
id: client
说明:这个id可定义可不定义,不定义情况下,master端会以客户端的hostname来显示,定义了则master端以定义的id显示,则先前做的dns解析会生效,速度更快,这个id可以不和hostname一致,也可以直接修改/etc/hosts里的hostname为客户端的hostname,实现dns解析。
保存退出后启动服务即可:#/etc/init.d/salt-minion start
2.认证:
server上:#salt-key -a client
说明:此时我们在client上的/etc/salt/pki/minion目录下会多出一些文件;
可以使用salt-key查看已经签名的客户端;
salt-key参数说明:-A 签名所有主机;-d 删除指定主机的key。
3.远程执行:
示例1:#salt '*' test.ping
这里的*表示所有已经签名的客户端,通过salt-key可查询,通常是我们已经设定的id值,也可以直接将*换成client。*号部分支持通配、列表以及正则:
比如两台客户端client01、client02,可以写成salt 'client'、salt 'clinet0[12]'、salt -L 'client01,client02'、salt -E 'client(01|02)'等形式,其中-L表示使用列表,多个机器有逗号分隔,-E表示使用正则。
示例2:#salt 'client' cmd.run 'ip a' //因为我没有设定id值,master端默认显示的是客户端的hostname,即我的客户端为centos,实际命令也该输入salt-key列表中的值centos,如下图:
示例3:使用saltstack实现状态管理
server上:
#vim /etc/salt/master //搜索找到file_roots,修改或增加如下内容:
file_roots:
base:
- /srv/salt
#mkdir /srv/salt
#vim /srv/salt/top.sls //加入如下内容。top.sls类似于puppet的site.pp文件,作为“最高同步”操作的入口文件,执行“最高同步”操作时,将从此sls文件中获取状态对minion进行同步,注意,salt文件采用ymal格式,对代码的缩进有着严格的要求,注意的有:不要使用Tab键缩进,通常开头缩进2个空格,字符后缩进1个空格,如冒号、逗号、横杠。
base: #base环境,即基础环境,机器要执行的状态才会写到base环境里 '*': - apache #意思是在所有客户端执行apache模块
#vim /srv/salt/apache.sls
apache-service: #自定义信息 pkg.installed: #调用pkg.installed函数,下面是要安装的包的名字,pkg是模块,installed是方法 - names: #names使用yum安装多个包 - httpd - httpd-devel service.running: #service.running也是一个函数,来保证指定的服务启动,enbled表示开机启动 - name: httpd - enable: True
执行(两种方法):如果minion端事先已经安装了服务,那么它不会重复安装
1.#salt 'client' state.highstate //执行过程,先从入口文件即top.sls开始读,top.sls中规定所有机器都要执行apache这个状态模块(top.sls可实现对多台机器配置多种状态)
2.#salt 'client' state.sls apache //state.sls表示模块有个sls方法,apache表示附件的一个参数
下面是运行结果:
至此,本文演示了 2 个内容,一是远程执行,二是状态管理。
附录:
# salt-minion -l debug 查看salt客户端详细信息
#salt -C ‘wy-pe1 and wy-pe2 or wy-peN’ test.ping -C表示多参数(表示在测试多台主机的存活状态)
# salt ‘*’ disk.usage 查看磁盘使用情况(使用内建模块查看所有minion端的磁盘使用情况)
如果执行命令时,忘记语法,或需要知道某个模块具体用法,可使用sys.doc模块查询相关使用方法:
eg: #salt '*' sys.doc pkg #salt '*' sys.doc disk
#salt ‘*’ cmd.run ‘df -h’ 使用cmd.run直接调用远程shell命令(功能同disk.usage)
如果想查看执行过程,可加-l debug,如下:
#salt '*' cmd.run 'df -h' -l debug
cmd.script方式:可以向远程主机执行脚本
#salt ‘*’ cmd.script salt://useradd.sh 向minion主机上执行useradd.sh脚本(salt://是salt的默认发布目录,即/srv/salt)