[原创]Slatstack 两个数据系统重要组件:Grains和Pillar初步介绍说明 – 21运维
通知: .-...

[原创]Slatstack 两个数据系统重要组件:Grains和Pillar初步介绍说明

saltstack 21运维 3360浏览 0评论

之前文章《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的一些信息如下:

[[email protected] ~]# 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:

[[email protected] ~]# 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单个项目:

[[email protected] ~]# 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.highstatesaltutil.sync_grainssaltutil.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入口文件:

[[email protected] pillar]# cat top.sls 
base:
  'HK-VPN':
    - nginx
  'aliserver':
    - mysql

然后分别写其他调用:

[[email protected] pillar]# cat  nginx.sls 
nginx:
  root: /home/wwwroot
[[email protected] pillar]# cat  mysql.sls 
mysqlmanager: 21yunwei
mysqluser: root
mysqlpassword: rootxxx

读取结果如下:

[[email protected] pillar]# salt 'HK-VPN' pillar.data
HK-VPN:
    ----------
    nginx:
        ----------
        root:
            /home/wwwroot
[[email protected] 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,无权修改
3

 

 

转载请注明:21运维 » [原创]Slatstack 两个数据系统重要组件:Grains和Pillar初步介绍说明

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址