zoukankan      html  css  js  c++  java
  • SaltStack数据系统之Grains、Pillar

    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查询信息

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

    (2)Grains目标匹配

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

    #(1)对os系统为centos系统执行一个uptime的命令:
    [root@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的系统上执行查看负载:
    [root@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定义的状态信息
    [root@linux-node1 ~]# vim /srv/salt/base/top.sls 
    base:
      'os:CentOS':
        - match: grain
        - web.apache
    [root@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
    [root@linux-node1 ~]# vim /etc/salt/grains 
    test-grains: linux-node2   #冒号后面有空格
    [root@linux-node1 ~]# systemctl restart salt-minion
    [root@linux-node1 ~]# salt '*' grains.get test-grains
    linux-node1.example.com:
        linux-node2
    linux-node2.example.com:
    [root@linux-node1 ~]# vim /etc/salt/grains 
    test-grains: linux-node2
    hehe: haha
    [root@linux-node1 ~]# salt '*' saltutil.sync_grains
    [root@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
    [root@linux-node1 ~]# salt '*' pillar.items
    linux-node1.example.com:
        ----------
    linux-node2.example.com:
        ----------
    [root@linux-node1 ~]# vim /etc/salt/master
    #pillar_opts: False   打开该项,修改成True
    pillar_opts: True
    [root@linux-node1 ~]# systemctl restart salt-master
    [root@linux-node1 ~]# salt '*' pillar.items
    • b.使用SLS文件定义Pillar
      Pillar使用与State相似的SLS文件。Pillar文件放在master配置文件中pillar_roots定义的目录下。示例如下:
    [root@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下。
    
    [root@linux-node1 ~]# mkdir -p /srv/pillar/{base,prod}
    [root@linux-node1 ~]# tree /srv/pillar/
    /srv/pillar/
    ├── base
    └── prod
    [root@linux-node1 ~]# systemctl restart salt-master
    
    #创建base环境下的pillar文件为apache
    [root@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上。示例如下:
    [root@linux-node1 ~]# vim /srv/pillar/base/top.sls 
    base:
      '*':
        - apache
    [root@linux-node1 ~]# salt '*' pillar.items
    linux-node1.example.com:
        ----------
        apache:
            httpd
    linux-node2.example.com:
        ----------
        apache:
            httpd
    
    #在base环境下,引用pillar
    [root@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
    [root@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.敏感数据配置

    转载于:https://blog.51cto.com/jinlong/2062766

  • 相关阅读:
    LENGTH()和CHAR_LENGTH()区别
    使用ibatis时 sql中 in 的参数赋值(转)
    数据库类型空间效率探索(五)- decimal/float/double/varchar
    MySQL用命令行复制表的方法
    升讯威微信营销系统开发实践:微信接口的 .NET 封装
    Github开源:Sheng.RabbitMQ.CommandExecuter (RabbitMQ 的命令模式实现)
    开源 & 免费使用 & 打包下载自行部署 :升讯威 周报系统
    开源 & 免费使用 & 打包下载自行部署 :升讯威 周报系统
    GitHub开源:升讯威ADO.NET增强组件 sheng.ADO.NET.Plus V1.3
    [源代码] SailingEase .NET Resources Tool (.NET 多语言资源编辑器)
  • 原文地址:https://www.cnblogs.com/twodog/p/12137662.html
Copyright © 2011-2022 走看看