第二章 SaltStack的数据系统
2-1 SaltStack数据系统-Grains详解
[root@saltstack-node1 ~]# salt 'saltstack-node1.example.com' grains.ls
[root@saltstack-node1 ~]# salt 'saltstack-node1.example.com' grains.items
[root@saltstack-node1 ~]# salt 'saltstack-node1.example.com' grains.item fqdn
saltstack-node1.example.com:
----------
fqdn:
saltstack-node1.example.com
[root@saltstack-node1 ~]# salt 'saltstack-node1.example.com' grains.get fqdn
saltstack-node1.example.com:
saltstack-node1.example.com
Minion启动时收集(静态数据)
Grains应用场景
- Grains可以在state系统中使用,用于配置管理模块。
- Grains可以target中使用,在用来匹配Minion,比如匹配操作系统,作用-G选项。
- Grains可以用于信息查询,Grains保存着收集到的客户端的详细信息。
注意:Grains只在Minion启动时才会收集
自定义两个Grains:
[root@saltstack-node1 ~]# vim /etc/salt/minion
grains:
roles: nginx
env: test
现在我们获取是没有的,需要重启Minion:
[root@saltstack-node1 ~]# salt 'saltstack-node1.example.com' grains.get env
saltstack-node1.example.com:
[root@saltstack-node1 ~]# /etc/init.d/salt-minion restart
[root@saltstack-node1 ~]# salt 'saltstack-node1.example.com' grains.get env
saltstack-node1.example.com:
test
[root@saltstack-node1 ~]# salt 'saltstack-node1.example.com' grains.get roles
saltstack-node1.example.com:
nginx
#你看有了
还有一种定义方式:
[root@saltstack-node1 ~]# vim /etc/salt/grains
cloud: openstack
#标识说这是一个openstack的节点
[root@saltstack-node1 ~]# /etc/init.d/salt-minion restart
[root@saltstack-node1 ~]# salt 'saltstack-node1.example.com' grains.get cloud
saltstack-node1.example.com:
openstack
这样我就不需要Minion端的nginx的IP:
[root@saltstack-node1 ~]# salt -G role:nginx cmd.run '/usr/local/nginx/sbin/nginx -s reload'
[root@saltstack-node1 ~]# salt -G roles:nginx cmd.run 'uptime'
saltstack-node1.example.com:
07:47:34 up 2:14, 1 user, load average: 0.20, 0.12, 0.10
[root@saltstack-node1 ~]# salt -G os:centos cmd.run 'uptime'
saltstack-node1.example.com:
04:14:59 up 1 min, 1 user, load average: 0.32, 0.14, 0.05
saltstack-node2.example.com:
04:14:59 up 1 min, 1 user, load average: 0.09, 0.05, 0.02
编写个top.sls:
base:
'role:nginx':
- match: grain
- web.nginx
2-2 SaltStack数据系统-Pillar详解
存储位置:
- 存储在master端,存放需要提供给minion的信息
应用场景:
- 敏感信息:每个minion只能访问master分配给自己的
[root@saltstack-node1 ~]# vim /etc/salt/master
pillar_roots:
base:
- /srv/pillar
[root@saltstack-node1 ~]# mkdir -p /srv/pillar
[root@saltstack-node1 ~]# /etc/init.d/salt-master restart
[root@saltstack-node1 ~]# cd /srv/pillar/
[root@saltstack-node1 pillar]# vim zabbix.sls
Zabbix_Server: 192.168.56.21
[root@saltstack-node1 pillar]# vim top.sls
base:
'saltstack-node2.example.com':
- zabbix
[root@saltstack-node1 ~]# salt '*' saltutil.refresh_pillar
saltstack-node2.example.com:
True
saltstack-node1.example.com:
True
[root@saltstack-node1 ~]# salt '*' pillar.item Zabbix_Server
saltstack-node1.example.com:
----------
saltstack-node2.example.com:
----------
Zabbix_Server:
192.168.56.21
[root@saltstack-node1 ~]# salt -G 'os:centos' test.ping
saltstack-node2.example.com:
True
saltstack-node1.example.com:
True
[root@saltstack-node1 ~]# salt -I 'Zabbix_Server:192.168.56.21' test.ping
saltstack-node2.example.com:
True
2-3 SaltStack数据系统-Grains VS Pillar
名称 | 存储位置 | 数据类型 | 数据采集更新方式 | 应用 |
---|---|---|---|---|
Grains | Minion端 | 静态数据 | Minion启动时收集,也可以使用saltutil_sync_grains进行刷新 | 存储Minion基本数据。比如用于匹配Minion,自身数据可以用来做资产管理等 |
Pillar | Master端 | 动态数据 | 在Master端定义,指定给对应的Minion.可以使用saltutil.refresh_pillar刷新 | 存储Master指定的数据,只有指定的Minion可以看到。用于敏感数据保存 |