之前文章《Saltstack命令参数详解以及配置文件说明》 做了一个saltstack 的简单用户举例以及配置文件说明,基本对saltstack这个自动化工具有了一个原理、安装和配置方面的大概认识。不过,这才是精彩的开始,请关注后边的文章。
今天文章介绍了saltstack的两个重要数据系统组件grains和pillar,这两个组件都是用来做数据系统的,用来取客户端基本信息数据或主控端数据。特此笔记如下。
一,Grains
1,Grains是什么
- Grains
-
Static bits of information that a minion collects about the system when the minion first starts.
The grains interface is made available to Salt modules and components so that the right salt minion commands are automatically available on the right systems.
以上是官方的解释,大致意思是说grains是minion第一次启动的时候采集的静态数据,可以用在salt的模块和其他组件中。其实grains在每次的minion启动(重启)的时候都会采集,即向master汇报一次的。这个很重要,可以让某些同学企图使用grains值来做监控死心了,值不全都是固定的。
我们这里简单做一个输出测试,可以看到节点minion节点HK-VPN的一些信息如下:[root@Master ~]# salt 'HK-VPN' grains.items HK-VPN: ---------- SSDs: cpu_flags: - fpu - vme 此处省略一万行 cpu_model: Intel(R) Xeon(R) CPU E5-2648L v2 @ 1.90GHz cpuarch: x86_64 domain: fqdn: HK-VPN fqdn_ip4: fqdn_ip6: gpus: |_ ---------- model: Hyper-V virtual VGA vendor: unknown host: HK-VPN hwaddr_interfaces: ---------- eth0: 00:00:5d:a2:ee:1e lo: 00:00:00:00:00:00 id: HK-VPN init: upstart ip4_interfaces: ---------- eth0: - 43.252.228.XXX lo: - 127.0.0.1 ip6_interfaces: ---------- eth0: - fe80::200:5dff:fea2:ee1e lo: - ::1 ip_interfaces: ---------- eth0: - 43.252.228.XXX - fe80::200:5dff:fea2:ee1e lo: - 127.0.0.1 - ::1 ipv4: - 127.0.0.1 - 43.252.228.XXX ipv6: - ::1 - fe80::200:5dff:fea2:ee1e kernel: Linux kernelrelease: 2.6.32-504.el6.x86_64 locale_info: ---------- defaultencoding: gbk defaultlanguage: zh_CN detectedencoding: GBK localhost: HK-VPN lsb_distrib_codename: Final lsb_distrib_id: CentOS lsb_distrib_release: 6.6 master: 139.129.17.95 mdadm: mem_total: 987 nodename: HK-VPN num_cpus: 1 num_gpus: 1 os: CentOS os_family: RedHat osarch: x86_64 oscodename: Final osfinger: CentOS-6 osfullname: CentOS osmajorrelease: 6 osrelease: 6.6 osrelease_info: - 6 - 6 path: /sbin:/usr/sbin:/bin:/usr/bin ps: ps -efH pythonexecutable: /usr/bin/python2.6 pythonpath: - /usr/bin - /usr/lib/python2.6/site-packages/setuptools-19.6.1-py2.6.egg - /usr/lib/python2.6/site-packages/pip-8.0.2-py2.6.egg 此处省略一万行 pythonversion: - 2 - 6 - 6 - final - 0 saltpath: /usr/lib/python2.6/site-packages/salt saltversion: 2015.5.8 saltversioninfo: - 2015 - 5 - 8 - 0 selinux: ---------- enabled: False enforced: Disabled server_id: 1132599106 shell: /bin/sh virtual: physical zmqversion: 3.2.5
输出HK-VPN节点grains的key:
[root@Master ~]# salt 'HK-VPN' grains.ls HK-VPN: - SSDs - cpu_flags - cpu_model - cpuarch - domain - fqdn - fqdn_ip4 - fqdn_ip6 - gpus - host - hwaddr_interfaces - id 此处省略十万行。。。。
查看grains单个项目:
[root@Master ~]# salt 'HK-VPN' grains.item os HK-VPN: ---------- os: CentOS
2,应用场景:
grains的特性–每次启动汇报、静态决定了它没有pillar灵活,要知道pillar是随时可变的,只要在master端修改了那一般都会立刻生效的。所以grains更适合做一些静态的属性值的采集,例如设备的角色(role),磁盘个数(disk_num),操作系统版本等诸如此类非常固定的属性。简单总结起来grains的用途如下:
(1),grains可以在state系统应用中,用户配置管理模块。
(2),grains可以在target中使用,用来匹配minion,比如os,用-G。
(3),grains可以用于信息查询,grains保存着收集到的客户端的信息。
那么我们就可以得到一个大致的判断,如果你想定义的属性值是经常变化的,那请采用pillar,如果是很固定、不易变的那请用grains。
3,grains优先级
grains可以保持在minion端、通过master端下发等多个方式来分发。但不同的方法有不同的优先级的(由低到高):
(1). /etc/salt/grains
(2) /etc/salt/minion
(3)./srv/salt/_grains/ master端_grains目录下
优先级顺序依次为存在在minion端/etc/salt/minion配置文件中的同名grains会覆盖/etc/salt/grains文件中的值,而通过master端_grains目录下grains文件下发的值可以会覆盖minion端的所有同名值。比较拗口,总之记得,通过master下发的grains优先级是最高的可,/etc/salt/minion次之,/etc/salt/grains最低(core grains不大懂,就不讨论了,这个比/etc/salt/grains还低)。
4,grains的下发
grains的下发大致可以分为两个思路:
(1)自定义的(_grains)可以通过state.highstate、saltutil.sync_grains、saltutil.sync_all 等方法批量下发,切记所有在_grains目录下的所有自定义grains值都会下发到minion,这是血的教训。
(2)固定存放在minion端配置文件中,如grains、minion文件中,可以通过file manager的方法去批量下发/etc/salt/grains等配置文件实现grains的批量下发,当然了也通过别的方式把这个文件批量下发下去,都是ok的。
对比:
(1)通过state.highstate 下发的grains好处是无须重启minion即可生效,但通过下发/etc/salt/grains文件下发的grains值则必须重启minion端服务才可以生效。
(2)自定义的_grains每次在highstate调用的时候就会自动下发、刷新,而/etc/salt/grains文件的则不会。
二,Pillar
Pillar用于给特定的 minion 定义任何你需要的数据, 这些数据可以被Salt的其他组件使用!不是自己的,想要都木有。
安全起见,有些数据是不可以共享出来的,需要指定。比如高度敏感的数据:通过pillar传输的数据会保证只向选定的minions展现,这使得pillar可以作为Salt中管理安全信息的引擎,比如加密的key和密码。
这里简单写几个小脚本了解下吧:
首先我们要编辑/etc/salt/master 打开pillar存储路径,默认即可比如/srv/pillar
illar_roots: base: - /srv/pillar
编辑cd /srv/pillar编辑top.sls入口文件:
[root@Master pillar]# cat top.sls base: 'HK-VPN': - nginx 'aliserver': - mysql
然后分别写其他调用:
[root@Master pillar]# cat nginx.sls nginx: root: /home/wwwroot
[root@Master pillar]# cat mysql.sls mysqlmanager: 21yunwei mysqluser: root mysqlpassword: rootxxx
读取结果如下:
[root@Master pillar]# salt 'HK-VPN' pillar.data HK-VPN: ---------- nginx: ---------- root: /home/wwwroot [root@Master pillar]# salt 'aliserver' pillar.data aliserver: ---------- mysqlmanager: 21yunwei mysqlpassword: rootxxx mysqluser: root
涉及的内容太多,以后会单独写文章介绍,这里就先简单了解下这个概念和情况吧。
三,grains 对比pillar 以及总结
grains和pillar的差别是很多同学都会问的问题,具体的讨论不再细说,参见saltstack用户组的相关讨论(https://groups.google.com/forum/#!topic/saltstack-users-cn/wXGcz0N6814)。总结下来有以下几点:
1.grains存储的是静态数据、不常变化的内容,pillar则相反
2.grains是存储在minion本地,而pillar存储在master本地
3.minion有权限操作自己的grains值,如增加、删除,但minion只能查看自己的pillar,无权修改
转载请注明:西数超哥博客www.ysidc.top» [原创]Slatstack 两个数据系统重要组件:Grains和Pillar初步介绍说明
https://www.ysidc.top 西数超哥博客,数据库,西数超哥,虚拟主机,域名注册,域名,云服务器,云主机,云建站,ysidc.top