设为首页 收藏本站
查看: 1573|回复: 0

[经验分享] SaltStack数据系统之Grains、Pillar

[复制链接]

尚未签到

发表于 2018-1-22 11:12:19 | 显示全部楼层 |阅读模式
SaltStack数据系统之Grains、Pillar
1、什么是Grains?

Grains是saltstack的组件,用于收集salt-minion在启动时候的信息,又称为静态信息。
Grains是服务器的一系列粒子信息,也就是服务器的一系列物理,软件环境信息。在执行salt的sls时候可以根据Grains信息的不同对服务器进行匹配分组,例如可以根据系统是centos服务器跟系统是redhat环境的安装不同的软件包。
Grains功能:1.收集资产信息 2.信息查询
官方文档:https://docs.saltstack.com/en/getstarted/overview.html
2、Grains的功能使用
(1)Grains查询信息

[iyunv@linux-node1 ~]# salt '*' grains.items    #查看所有grains的key和values
[iyunv@linux-node1 ~]# salt '*' grains.get saltversion  #查看salt的版本
linux-node2.example.com:
    2016.11.8
linux-node1.example.com:
    2016.11.8
[iyunv@linux-node1 ~]# salt '*' grains.get ip4_interface    #查看ip
[iyunv@linux-node1 ~]# salt '*' grains.get ip4_interface:eth0

(2)Grains目标匹配

grains可以用于进行目标匹配,比如让所有的centos系统进行某个操作。使用salt -G

#(1)对os系统为centos系统执行一个uptime的命令:
[iyunv@linux-node1 ~]# salt -G 'os:Centos' cmd.run 'uptime'  #查看负载
linux-node2.example.com:
     14:17:06 up 13 days,  8:51,  2 users,  load average: 0.00, 0.01, 0.05
linux-node1.example.com:
     14:17:06 up 22 days,  8:23,  2 users,  load average: 0.01, 0.02, 0.05

#(2)在init为systemd的系统上执行查看负载:
[iyunv@linux-node1 ~]# salt -G 'init:systemd' cmd.run 'uptime'
linux-node1.example.com:
     14:21:00 up 22 days,  8:27,  2 users,  load average: 0.00, 0.01, 0.05
linux-node2.example.com:
     14:21:00 up 13 days,  8:55,  2 users,  load average: 0.00, 0.01, 0.05

(3)Grains在top file中进行匹配

#在top.sls中定义对系统是CentOS的服务之星web.apached定义的状态信息
[iyunv@linux-node1 ~]# vim /srv/salt/base/top.sls
base:
  'os:CentOS':
    - match: grain
    - web.apache
[iyunv@linux-node1 ~]# salt '*' state.highstate
linux-node2.example.com:
----------
          ID: apache-install
    Function: pkg.installed
        Name: httpd
      Result: True
     Comment: All specified packages are already installed
     Started: 14:28:57.612549
    Duration: 2490.712 ms
     Changes:   
----------
          ID: apache-service
    Function: service.running
        Name: httpd
      Result: True
     Comment: The service httpd is already running
     Started: 14:29:00.104396
    Duration: 41.901 ms
     Changes:   

Summary for linux-node2.example.com
------------
Succeeded: 2
Failed:    0
------------
Total states run:     2
Total run time:   2.533 s
linux-node1.example.com:
----------
          ID: apache-install
    Function: pkg.installed
        Name: httpd
      Result: True
     Comment: All specified packages are already installed
     Started: 14:29:12.061257
    Duration: 11458.788 ms
     Changes:   
----------
          ID: apache-service
    Function: service.running
        Name: httpd
      Result: True
     Comment: The service httpd is already running
     Started: 14:29:23.520720
    Duration: 46.868 ms
     Changes:   

Summary for linux-node1.example.com

(4)Grains自定义

    Grains的四种存在形式:
    ①Core grains.
    ②在 /etc/salt/grains 自定义grains。
    ③在 /etc/salt/minion 自定义grains。
    ④在 _grains 目录自定义grain,同步到minions。

#生产环境使用自定义一个grains
[iyunv@linux-node1 ~]# vim /etc/salt/grains
test-grains: linux-node2   #冒号后面有空格
[iyunv@linux-node1 ~]# systemctl restart salt-minion
[iyunv@linux-node1 ~]# salt '*' grains.get test-grains
linux-node1.example.com:
    linux-node2
linux-node2.example.com:
[iyunv@linux-node1 ~]# vim /etc/salt/grains
test-grains: linux-node2
hehe: haha
[iyunv@linux-node1 ~]# salt '*' saltutil.sync_grains
[iyunv@linux-node1 ~]# salt '*' grains.get hehe
linux-node1.example.com:
    haha
linux-node2.example.com:

3、什么是Pillar?

    Pillar是Salt最重要的系统之一,它跟grains的结构一样,也是一个字典格式,数据通过key/value的格式进行存储。在Salt的设计中,Pillar使用独立的加密sessiion。可用于提供开发接口,用于在master端定义数据,然后再minion中使用,一般传输敏感的数据,例如ssh key,加密证书等。

    pillar和states建立方式类似,由sls文件组成,有一个入口文件top.sls,通过这个文件关联其他sls文件,默认路径在/srv/pillar,可通过/etc/salt/master里面pillar_roots:指定位置。

    pillar到底什么作用呢?那么下面介绍一个简单的例子,你就明白了。

    用zabbix监控新上架的服务器(10台),需要将zabbix_agentd.conf分发到被监控主机,这个文件中hostname的ip每台都不同,我们不可能写10分配置文件吧!那么如何让hostname在分发的时候就根据被监控主机IP,修改成自己的呢?这时就用到渲染了,默认渲染器是jinja,支持for in循环判断,格式是{%...%}{% end* %},这样一来salt会先让jinja渲染,然后交给yaml处理。

4、Pillar的功能使用

(1)如何定义Pillar数据

    a.master配置文件中定义pillar:
    默认情况下,master配置文件中的所有数据都添加到Pillar中,且对所有minion可用。如果要禁用这一默认值,可以在master配置文件中添加如下数据,重启服务后生效:

#默认的pillar的items为空,需要修改/etc/salt/master
[iyunv@linux-node1 ~]# salt '*' pillar.items
linux-node1.example.com:
    ----------
linux-node2.example.com:
    ----------
[iyunv@linux-node1 ~]# vim /etc/salt/master
#pillar_opts: False   打开该项,修改成True
pillar_opts: True
[iyunv@linux-node1 ~]# systemctl restart salt-master
[iyunv@linux-node1 ~]# salt '*' pillar.items

    b.使用SLS文件定义Pillar
    Pillar使用与State相似的SLS文件。Pillar文件放在master配置文件中pillar_roots定义的目录下。示例如下:

[iyunv@linux-node1 ~]# vim /etc/salt/master
pillar_roots:
  base:
    - /srv/pillar/base
  prod:
    - /srv/pillar/prod

#此段代码定义了base环境下的Pillar文件保存在/srv/pillar/base目录下。prod环境下的Pillar文件保存在/srv/pillar/prod下。

[iyunv@linux-node1 ~]# mkdir -p /srv/pillar/{base,prod}
[iyunv@linux-node1 ~]# tree /srv/pillar/
/srv/pillar/
├── base
└── prod
[iyunv@linux-node1 ~]# systemctl restart salt-master

#创建base环境下的pillar文件为apache
[iyunv@linux-node1 ~]# vim /srv/pillar/base/apache.sls
{% if grains['os'] == 'CentOS' %}
apache: httpd
{% elif grains['os'] == 'Debian' %}
apache: apache2
{% endif %}

#与State相似,Pillar也有top file,也使用相同的匹配方式将数据应用到minion上。示例如下:
[iyunv@linux-node1 ~]# vim /srv/pillar/base/top.sls
base:
  '*':
    - apache
[iyunv@linux-node1 ~]# salt '*' pillar.items
linux-node1.example.com:
    ----------
    apache:
        httpd
linux-node2.example.com:
    ----------
    apache:
        httpd

#在base环境下,引用pillar
[iyunv@linux-node1 ~]# vim /srv/salt/base/web/apache.sls
apache-install:
  pkg.installed:
    - name: {{ pillar['apache'] }}

apache-service:
  service.running:
    - name: {{ pillar['apache'] }}
    - enable: True
[iyunv@linux-node1 ~]# salt '*' state.highstate
linux-node2.example.com:
----------
          ID: apache-install
    Function: pkg.installed
        Name: httpd
      Result: True
     Comment: All specified packages are already installed
     Started: 15:15:13.424547
    Duration: 940.333 ms
     Changes:   
----------
          ID: apache-service
    Function: service.running
        Name: httpd
      Result: True
     Comment: The service httpd is already running
     Started: 15:15:14.366780
    Duration: 55.706 ms
     Changes:   

Summary for linux-node2.example.com
------------
Succeeded: 2
Failed:    0
------------
Total states run:     2
Total run time: 996.039 ms
linux-node1.example.com:
----------
          ID: apache-install
    Function: pkg.installed
        Name: httpd
      Result: True
     Comment: All specified packages are already installed
     Started: 15:15:14.648492
    Duration: 8242.769 ms
     Changes:   
----------
          ID: apache-service
    Function: service.running
        Name: httpd
      Result: True
     Comment: The service httpd is already running
     Started: 15:15:22.891907
    Duration: 42.651 ms
     Changes:   

Summary for linux-node1.example.com
------------
Succeeded: 2
Failed:    0
------------
Total states run:     2
Total run time:   8.285 s

总结:
1.pillar和状态一样,有pillar_roots,在master中配置
2.到配置的地方/srv/pillar/base下写一个apache.sls
3.pillar必须在top file指定才能使用,在top.sls中指定所有的minion,都需要执行在base环境下的apache.sls
4.用之前查看是否能获取到pillar值:salt '*' pillar.items
5.更改状态配置,把name改为一个pillar的引用,这是一个jinja的语法
5、Grains VS Pillar
名称     存储位置     类型     采集方式     场景
Grains     minion     静态     minion启动时,可以刷新     1.获取信息 2.匹配
Pillar     master     动态     指定,实时生效     1.匹配 2.敏感数据配置

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-435966-1-1.html 上篇帖子: 深入理解SaltStack远程执行 下篇帖子: SaltStack配置管理--状态间的关系
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表