前言
Grains组件
Grains是saltstack记录minion的一些静态信息组件,可以简单的理解为grains里面记录着每台minion的一些常用的属性,比如cpu、内存、磁盘、网络信息等,可以通过grains.items查看某台minion的grains所有信息,minion的grains信息是minion启动的时候采集汇报给master的。
grains会在minion进程启动时进行加载,并缓存在内存中。这样salt-minion进程无需每次操作都要重新检索系统来获取grain,提升了minion性能。
grains的定义:
- 通过minion配置文件定义
- 通过grains相关模块定义
- 通过python脚本定义
Pillar组件
Pillar是数据管理中心,主要作用就是存储和定义配置管理中需要的一些数据,比如软件版本号、用户密码等信息,格式与grains类似,都是YAML格式。
Pillar也是Salt用来分发全局变量到所有minions的一个接口。安全起见,有些数据是不可以共享出来的,需要指定。比如高度敏感的数据:通过pillar传输的数据会保证只向选定的minions展现,这使得pillar可以作为Salt中管理安全信息的引擎,比如加密的key和密码。
grains和pillar比较:
-
1.grains存储的是静态数据、不常变化的内容,pillar则相反
-
2.grains是存储在minion本地,而pillar存储在master本地
-
3.minion有权限操作自己的grains值,如增加、删除,但minion只能查看自己的pillar,无权修改
一、Grains的定义
方法一:通过minion配置文件定义
1.打开server2的grains工具包
[root@server2 ~]# cd /etc/salt/
[root@server2 salt]# vim minion
120 grains:
121 roles:
122 - apache
[root@server2 salt]# systemctl restart salt-minion
测试查看
[root@server1 ~]# salt server2 grains.item roles ##获取对应的变量值
server2:
----------
roles:
- apache
方法二:通过grains相关模块定义
1.直接写在grains文件中
[root@server3 ~]# cd /etc/salt/
[root@server3 salt]# vim grains
[root@server3 salt]# cat grains
roles: nginx
[root@server3 salt]# systemctl restart salt-minion.service
2.查看
[root@server1 ~]# salt server3 grains.item roles
方法三:通过python脚本定义在主节点统一指定角色
[root@server1 ~]# mkdir /srv/salt/_grains
[root@server1 ~]# cd /srv/salt/_grains/
[root@server1 _grains]# vim my_grains.py
[root@server1 _grains]# cat my_grains.py
#! /usr/bin/env python
def my_grains():
grains = {'foo':'bar','hello':'world'}
grains['salt'] = 'stack'
return grains
查看效果
在脚本中引入grains角色
[root@server1 _grains]# cd /srv/salt/
[root@server1 salt]# vim top.sls
[root@server1 salt]# cat top.sls
base:
'roles:apache':
- match: grain
- apache.service
'roles:nginx':
- match: grain
- nginx.service
[root@server1 salt]# salt server[2,3] state.highstate
二、pillar工具的配置
1.在主节点上开启pillar功能
[root@server1 salt]# vim /etc/salt/master
pillar_roots:
base:
- /srv/pillar
[root@server1 salt]# mkdir /srv/pillar
[root@server1 salt]# systemctl restart salt-master
2.在脚本中引入pillar角色
[root@server1 salt]# cd /srv/pillar/
[root@server1 pillar]# ls
[root@server1 pillar]# vim vars.sls 指定角色安装指定服务
[root@server1 pillar]# cat vars.sls
{% if grains['fqdn'] == 'server2' %} 如果主机名等于server2
webserver: apache
state: master
{% elif grains['fqdn'] == 'server3' %} 如果主机名等于server3
webserver: nginx
state: backup
{% endif %}
[root@server1 pillar]# vim top.sls
[root@server1 pillar]# cat top.sls
base:
'*':
- vars 执行此目录下的所有.vars脚本
测试:
[root@server1 pillar]# salt '*' pillar.items