本实验是在《SaltStack(1)—— SaltStack》简介以及服务的部署文章基础上进行的,master-minion端已经配置好。
博客链接:https://mp.csdn.net/console/editor/html/104871109
目录
一 、Grains、Pillar的使用方法
- (一)、Grains实验
- 1、Grains简介
- 2、Grains中的查询命令
- 3、自定义grains项
- 方法一:通过文件的方式来创建grains
- 步骤一:编辑/etc/salt/minion文件中的内容
- 步骤二:重启salt-minion服务
- 步骤三:在server1查看server上的grains角色是否创建成功
- 方法二:在/etc/salt/grains中定义(在minion端)
- 步骤一:自己创建的文件
- 步骤二:同步数据
- 方法三:在slat-master端创建grains目录
- 步骤一:创建目录、创建实验文件
- 步骤二:将数据同步到minion端主机
- 方法四:在target匹配minion
(二)、Pillar的应用场景
- 1、Pillar简介
- 2、自定义pillar
- 步骤一:编辑web.sls文件
- 步骤二:
- 1、同步数据
- 2、grains各个模块之间的变量的调用
- 3、编译
- 4、数据的刷新
- 5、查看匹配的内容
一 、Grains、Pillar的使用方法
实验环境 :
主机名 | ip | 服务 |
---|---|---|
server1 | 172.25.6.1 | 服务端 salt-master |
server2 | 172.25.6.2 | 客户端 salt-minion |
server3 | 172.25.6.3 | 客户端 salt-minion |
server4 | 172.25.6.4 | 客户端 salt-minion |
(一)、Grains实验
1、Grains简介
Grains是SaltStack的一个组件 、存放在Satltack的minion端口 、
当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有minion重启时才会进行数据的更新
由于granis是静态数据,因此不推荐经常取修改它
应用场景:
- 信息查询,可用作CMDB
- 在target中使用 ,匹配minion
- 在state系统中使用,配置管理模块
2、定义
- Grains是saltstack的组件,用于收集salt-minion在启动时候的信息,又称为静态信息。并向master提交。注:重启便会重新收集。
- 可以理解为Grains记录着每台Minion的一些常用属性,比如CPU、内存、磁盘、网络信息等。
3、特点
- 存储在minion端,缓存在master端
- 数据信息相对是静态的
- 通过 grains 所获取的minion端的主机信息是固定不变的,就是在minion端主机配置发生改变时,这种数据仍然不会发生改变;除非重启服务;当然还有给命令可以刷新,使之生效,
4、功能使用
4.1 grains信息查询
- salt server2 grains.ls #grains模块的 ls 方法列出server2主机默认可用的保留字(gains信息)
2、Grains中的查询命令
2.1、查看Grains列表
[root@server1 nginx]# salt server2 grains.ls ##查看grains列表
、
2.2、指定显示的内容
格式:salt server2 grains.item 内容
例如:查看server2中的ipv4中的内容
[root@server1 ~]# salt server2 grains.item ipv4 ##查看grains端的ip
server2:
----------
ipv4:
- 127.0.0.1
- 172.25.6.2
[root@server1 ~]#
- salt server2 grains.items #查看server2主机所有保留字包含的gains变量及其值 (相当于python中的key-value键值对)
- salt ‘*’ grains.items #查看所有minion主机保留字包含的gains变量及其值
3、自定义grains项
方法一:
通过文件的方式来创建grains
- 在 /etc/salt/minion 中定义
- # vim/etc/salt/minion
- granis:
- roles:
- - apache
- - httpd
- 重启salt-minion,否则数据不会更新
- # systemctl restart salt-minion
步骤一 :
编辑/etc/salt/minion文件中的内容
[root@server2 ~]# vim /etc/salt/minion
...
grains:
roles:
- apache ##创建grains角色
...
步骤二:
重启salt-minion服务
[root@server2 ~]# systemctl restart salt-minion.service ##重启
步骤三:
在server1查看server上的grains角色是否创建成功
[root@server1 ~]# salt server2 grains.item roles
已经创建成功!!!
方法二 :
在/etc/salt/grains中定义
步骤一:
1、自己创建的文件
[root@server3 ~]# vim /etc/salt/grains ##自定义文件
roles: nginx
2、测试:
在server1上查看
https://www.baidu.com/baidu?wd=http&tn=monline_4_dg&ie=utf-8
步骤二:
1、同步数据
[root@server1 ~]# salt server3 saltutil.sync_grains ##同步数据
server3:
2、在server1上进行测试
3、查看全部的grains
[root@server1 ~]# salt '*' grains.item roles
方法三:
在slat-master端创建grains目录(只需要在master端进行操作不需要minion端)
步骤一:
1、创建目录、创建实验文件
[root@server1 ~]# mkdir /srv/salt/_grains/ ##创建目录
[root@server1 ~]# vim /srv/salt/_grains/my_grian.py ##创建一个grain文件
def my_grain(): ##定义一个空字典,往字典中添加下边的信息
grains = {}
grains['salt'] = 'stack'
grains['hello'] = 'world'
return grains
(注:创建目录时一定要是_grains 不然编译的时候不生效 !!!)
步骤二:
1、在server1上:
将数据同步到minion端主机
[root@server1 _grains]# salt '*' saltutil.sync_grains ##将数据同步到minion主机上
2、在server1 上查询相关的key和value值
[root@server1 _grains]# salt '*' grains.item salt ##输入key值
3、在server2上查看数据同步的情况
[root@server2 ~]# tree /var/cache/salt/
(数据已经同步到server2主机上 !!!)
方法四:
1、在target匹配minion:
[root@server1 ~]# salt -G roles:apache cmd.run hostname ##匹配相应的值
2、在top.sls文件中匹配相应的值
[root@server1 ~]# cat /srv/salt/top.sls
base:
'roles:apache':
- match: grain
- apache
'roles:nginx':
- match: grain
- nginx
[root@server1 salt]# salt '*' state.highstate ##高级推
3、测试:
会自动识别所指的内容
https://www.baidu.com/baidu?wd=http&tn=monline_4_dg&ie=utf-8
(二)、Pillar的应用场景
1、Pillar简介
1、定义
Pillar是Salt非常重要的一个组件,它用于给特定的minion定义任何你需要的数据,这些数据可以被Salt的其他组件使用。Pillar数据是与特定minion关联的,也就是说每一个minion都只能看到自己的数据,所以Pillar可以用来传递敏感数据。它跟grains的结构一样,也是一个字典格式,数据通过key/value的格式进行存储。
在Salt的设计中,Pillar使用独立的加密sessiion。可用于提供开发接口,用于在master端定义数据,然后再minion中使用,
一般传输敏感的数据,例如ssh key,加密证书等。
pillar和states建立方式类似,由sls文件组成,有一个入口文件top.sls,通过这个文件关联其他sls文件。
默认路径在/srv/pillar,可通过/etc/salt/master里面pillar_roots:指定位置。
pillar和grains一样也是一个数据系统,但是应用的场景不一样
pillar是将信息动态的存放在 master端,主要存放私密、敏感信息(如用户名秘密等),而且可以指定某个minion才可以看到对应的信息
pillar更加适合在配置管理中运用
grains目标匹配
1、查看Pillar的主配置文件
piller 的主配置文件在/etc/salt/master
[root@server1 ~]# vim /etc/salt/master
(注:一般情况下不用修改除非要再其他目录下定义此文件)
2、自定义pillar
Grains的四种存在形式及minion端读取grains变量的优先级:
①Core grains. #核心的grains变量,包含(minion端)系统的一些环境信息。
②在 /etc/salt/grains (minion端)自定义grains变量。
③在 /etc/salt/minion (minion主配置文件)自定义grains变量。
④在master端的 _grains 目录自定义grain,写到.py文件中,同步到minions。
注:方式③minion主配置文件 /etc/salt/minion变量定义方式
##单个变量
grains:
roles: nginx##多个变量
grains:
roles:
- webserver
- memcache
注:方式④同步grains变量,当以下命令被执行的时候被触发
state.highstate
saltutil.sync_grains
saltutil.sync_all
创建实验目录
步骤一 :
1、编辑web.sls文件
https://www.baidu.com/baidu?wd=http&tn=monline_4_dg&ie=utf-8
2、编辑top.sls的内容
[root@server1 pillar]# cat top.sls
base:
'*':
- web ##执行的是web.sls文件中的内容
步骤二:
1、同步数据
[root@server1 pillar]# salt '*' pillar.items ##同步数据
2、grains各个模块之间的变量的调用
2.1、修改web.sls文件
[root@server1 pillar]# vim web.sls
{% if grains['fqdn'] == 'server3' %}
webserver: nginx
{% elif grains['fqdn'] == 'server2' %}
webserver: httpd ##将在server2上执行的内容修改为httpd
{% endif %}
port: 80
2.2、编辑apache模块主配置文件
[root@server1 ~]# vim /srv/salt/apache/init.sls
install-apache:
pkg.installed:
- pkgs:
- {{ pillar['webserver'] }} ##将此模块将此内容改为pillar的变量调用
- httpd-tools
- php
service.running:
- name: httpd
- enable: True
- watch:
- file: /etc/httpd/conf/httpd.conf
/etc/httpd/conf/httpd.conf:
file.managed:
- source: salt://apache/httpd.conf
3、编译
将数据推送给sertver2节点
[root@server1 pillar]# salt server2 state.sls apache
(没有报错说明调用成功!!!)
4、数据的刷新
[root@server1 apache]# salt '*' saltutil.refresh_pillar ##数据刷新
server2:
True
server4:
True
server3:
True
5、查看匹配的内容
查看webserver:httpd匹配到的内容
[root@server1 apache]# salt -I 'webserver:httpd' test.ping
server2:
True
[root@server1 apache]#