之前文章《Saltstack命令参数详解以及配置文件说明》 做了一个saltstack 的简单用户举例以及配置文件说明,基本对saltstack这个自动化工具有了一个原理、安装和配置方面的大概认识。不过,这才是精彩的开始,请关注后边的文章。
今天文章介绍了saltstack的两个重要数据系统组件grains和pillar,这两个组件都是用来做数据系统的,用来取客户端基本信息数据或主控端数据。特此笔记如下。
一,Grains
1,Grains是什么
[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