zoukankan      html  css  js  c++  java
  • Saltstack数据系统Grains和Pillar(三)

    • Saltstack数据系统

    分为Grains和Pillar


    SaltStack 数据系统

    Grains (谷粒)
    Pillar (柱子)

    一.Grains
    Grains:静态数据 当Minion启动的时候收集的Minion本地的相关信息
    操作系统版本,内核版本,CPU,内存,硬盘。设备型号。序列号
    备注:不重启minion,这些信息数据是不会改变的。例如可以根据系统是centos服务器跟系统是redhat环境的安装不同的软件包。

    Grains功能:1.收集资产信息 2.信息查询 
    官方文档:https://docs.saltstack.com/en/getstarted/overview.html

    1)信息管理,包括资产管理;

    salt 'linux-node1*' grains.ls  # 列出ID为linux-node1的主机,grains的所有key
    salt 'linux-node1*' grains.items  # 列出主机的详细信息,可用于资产管理
    salt '*' grains.item os  # 列出所有主机的系统版本
    [root@7mini-node1 ~]# salt '*' grains.item fqdn_ip4   # 列出所有主机的IP地址
    7mini-node1:
    ----------
    fqdn_ip4:
    - 10.0.0.11
    7mini-node2:
    ----------
    fqdn_ip4:
    - 10.0.0.12
    

    2)用于目标选择;(查询具体id的主机,查询系统版本为centos的主机 等场景)  

    salt -G 'os:Centos' test.ping  # 所有主机系统为centos版本ping测试
    salt -G 'os:Centos' cmd.run 'echo 123'  # 所有主机系统为centos版本执行命令'echo 123'
    

    3)配置管理中使用

    方式一: 修改配置文件 vim /etc/salt/minion

    重启 systemctl restart salt-minion

    通过自定义的item,可以实现重启所有角色为apache的主机

    salt '*' grains.item roles  # 获取所有主机的roles
    salt -G 'roles:apache' cmd.run 'systemctl restart httpd'  # 所有主机roles为apache的执行命令systemctl restart httpd
    

    方式二:(生产环境使用,也是常用的配置)  

    修改配置文件 vim /etc/salt/grains,写法

    cloud: openstack
    

    重启 systemctl restart salt-minion

    salt '*' grains.item cloud  # 获取所有主机的cloud
    

    修改/etc/salt/grains不重启服务的方法,刷新命令如下(备注:方式一和方式二修改配置文件,通过此命令都可以不用重启服务)  

    salt '*' saltutil.sync_grains
    

      

    二.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处理。

    (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
    

    总结:
    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的语法

    三、Grains VS Pillar

      

      

     

  • 相关阅读:
    flume采集log4j日志到kafka
    解决spring 事务管理默认不支持SQLException等运行时异常
    基于黑名单的xss过滤器
    VMware创建Linux虚拟机并安装CentOS(三)
    dubbo 常见错误
    Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
    zookeeper工作原理、安装配置、工具命令简介
    VMware创建Linux虚拟机并安装CentOS(二)
    NSPredicate谓词
    IOS网络请求之NSURLSession使用详解
  • 原文地址:https://www.cnblogs.com/jimmy-xuli/p/9125053.html
Copyright © 2011-2022 走看看